buscar_ampliaciones forosap

78
foroSAP.com REPORT z_ampliaciones_block_alv LINE-SIZE 255 NO STANDARD PAGE HEADING. TYPE-POOLS: icon, rsfs, rsds, slis. "Tipos de datos para listas genéricas. TABLES: d010inc, "Tabla de utilización para Includes ABAP dd03l, "Campos de tabla modact, "Modificaciones de la CMOD modsap, "Ampliaciones SAP sxs_inter, "Exit: Pág.definición: Interfaces sscrfields, "Campos en las imágenes de selección tddir, "Exits de campo activos para elementos de datos tddirs, "Exits de campos en determinados dynpros tftit, "Texto breve de un módulo de funciones trdirt, "Textos t?tulo p.programas en TRDIR tstc, "Códigos de transacción SAP tstct. "Textos de códigos de transacción *----------------------------------------------------------------------* * CONSTANTS *----------------------------------------------------------------------* CONSTANTS: c_sust(22) TYPE c VALUE 'SUBSTITUTION', 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 METHOD', c_type_ref(22) TYPE c VALUE 'TYPE REF TO', c_perform(22) TYPE c VALUE 'PERFORM', c_form(22) TYPE c VALUE 'FORM', c_endform(22) TYPE c VALUE 'ENDFORM', c_bte(22) TYPE c VALUE 'OPEN_FI_PERFORM', c_bte1(22) TYPE c VALUE 'OUTBOUND_CALL', c_enhance(22) TYPE c VALUE 'CALL CUSTOMER-FUNCTION', c_funcao_1(13) TYPE c VALUE 'CALLFUNCTION''', c_funcao_2(13) TYPE c VALUE 'CALL FUNCTION', c_enh(11) TYPE c VALUE 'ENHANCEMENT', c_enh1(17) TYPE c VALUE 'ENHANCEMENT-POINT', c_enh2(19) TYPE c VALUE 'ENHANCEMENT-SECTION', c_endenh(14) TYPE c VALUE 'ENDENHANCEMENT', c_endenh1(23) TYPE c VALUE 'END-ENHANCEMENT-SECTION', 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 '''',

Upload: jose-manuel-torres-saenz

Post on 28-Nov-2014

59 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: buscar_ampliaciones FOROSAP

foroSAPcom

REPORT z_ampliaciones_block_alv LINE-SIZE 255NO STANDARD PAGE HEADING

TYPE-POOLSiconrsfsrsdsslis Tipos de datos para listas geneacutericas

TABLESd010inc Tabla de utilizacioacuten para Includes ABAPdd03l Campos de tablamodact Modificaciones de la CMODmodsap Ampliaciones SAPsxs_inter Exit Paacutegdefinicioacuten Interfacessscrfields Campos en las imaacutegenes de seleccioacutentddir Exits de campo activos para elementos de datostddirs Exits de campos en determinados dynprostftit Texto breve de un moacutedulo de funcionestrdirt Textos ttulo pprogramas en TRDIRtstc Coacutedigos de transaccioacuten SAPtstct Textos de coacutedigos de transaccioacuten

---------------------------------------------------------------------- CONSTANTS----------------------------------------------------------------------CONSTANTSc_sust(22) TYPE c VALUE SUBSTITUTIONc_user_exit(22) TYPE c VALUE USEREXITc_badi(22) TYPE c VALUE BADIc_handler(30) TYPE c VALUE CL_EXITHANDLER=gtGET_INSTANCEc_method(22) TYPE c VALUE CALL METHODc_type_ref(22) TYPE c VALUE TYPE REF TOc_perform(22) TYPE c VALUE PERFORMc_form(22) TYPE c VALUE FORMc_endform(22) TYPE c VALUE ENDFORMc_bte(22) TYPE c VALUE OPEN_FI_PERFORMc_bte1(22) TYPE c VALUE OUTBOUND_CALLc_enhance(22) TYPE c VALUE CALL CUSTOMER-FUNCTIONc_funcao_1(13) TYPE c VALUE CALLFUNCTIONc_funcao_2(13) TYPE c VALUE CALL FUNCTIONc_enh(11) TYPE c VALUE ENHANCEMENTc_enh1(17) TYPE c VALUE ENHANCEMENT-POINTc_enh2(19) TYPE c VALUE ENHANCEMENT-SECTIONc_endenh(14) TYPE c VALUE ENDENHANCEMENTc_endenh1(23) TYPE c VALUE END-ENHANCEMENT-SECTIONc_include(07) TYPE c VALUE INCLUDEc_submit(06) TYPE c VALUE SUBMITc_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

CONSTANTSc_ue(4) TYPE c VALUE EXITc_b(4) TYPE c VALUE BADIc_bt(4) TYPE c VALUE BTEc_st(4) TYPE c VALUE SUSTc_fdex(4) TYPE c VALUE FDEXc_enht(4) TYPE c VALUE ENHc_operation(4) TYPE c VALUE SHOWc_type(4) TYPE c VALUE PROG Textosc_text_01 TYPE slis_fieldcat_alv-reptext_ddic VALUE Programac_text_02 TYPE slis_fieldcat_alv-reptext_ddic VALUE Nivelc_text_03 TYPE slis_fieldcat_alv-reptext_ddic VALUE Lineac_text_04 TYPE slis_fieldcat_alv-reptext_ddic VALUE Coacutedigo fuentec_text_05 TYPE slis_fieldcat_alv-reptext_ddic VALUE Tipoc_text_06 TYPE string VALUE Breakpointc_text_07 TYPE slis_fieldcat_alv-reptext_ddic VALUE STOPc_text_08 TYPE string VALUE Marcar todoc_text_09 TYPE string VALUE Desmarcar todoc_text_e01 TYPE slis_fieldcat_alv-reptext_ddic VALUEDebe ingresar programa o transaccioacutenc_text_e02 TYPE slis_fieldcat_alv-reptext_ddic VALUEDebe ingresar solo programa o transaccioacutenc_text_e03 TYPE slis_fieldcat_alv-reptext_ddic VALUEDebe seleccionar un tipo de mejora

CONSTANTSc_std_definition(3) TYPE c VALUE SAPc_std_implmnt(3) TYPE c VALUE KUN

---------------------------------------------------------------------- TABLAS INTERNAS----------------------------------------------------------------------TYPES BEGIN OF x_tadirobj_name TYPE sobj_namedevclass TYPE devclassEND OF x_tadir

TYPES BEGIN OF x_slogobj_name TYPE sobj_nameEND OF x_slog

DATA BEGIN OF ti_programa OCCURS 0 cf like rssource-linecf(500)END OF ti_programa

DATA BEGIN OF ti_includes OCCURS 0nome LIKE sy-repidnivel(2) TYPE nEND OF ti_includes

DATA BEGIN OF ti_user_exit OCCURS 0programa LIKE sy-repidtipo(4)

linea(10) TYPE n cf LIKE rssource-linecf(500)nivel(2) TYPE nbreak LIKE icon-idsel(1)END OF ti_user_exit

DATA BEGIN OF ti_badi OCCURS 0programa LIKE sy-repidtipo(4)linea(10) TYPE n cf LIKE rssource-linecf(500)nivel(2) TYPE nbreak LIKE icon-idsel(1)END OF ti_badi

DATA BEGIN OF ti_bte OCCURS 0programa LIKE sy-repidtipo(4)linea(10) TYPE n cf LIKE rssource-linecf(500)nivel(2) TYPE nbreak LIKE icon-idsel(1)END OF ti_bte

DATA BEGIN OF ti_enh OCCURS 0programa LIKE sy-repidtipo(4)linea(10) TYPE n cf LIKE rssource-linecf(500)nivel(2) TYPE nbreak LIKE icon-idsel(1)END OF ti_enh

DATA BEGIN OF ti_enhobj OCCURS 0enhname LIKE enhobj-enhnameversion LIKE enhobj-versionobj_type LIKE enhobj-obj_typeobj_name LIKE enhobj-obj_namesel(1)END OF ti_enhobj

DATA BEGIN OF ti_fdex OCCURS 0tipo(4) cf LIKE rssource-linecf(500)sel(1)END OF ti_fdex

DATAti_tadir TYPE STANDARD TABLE OF x_tadir WITH HEADER LINE

ti_jtab TYPE STANDARD TABLE OF x_slog WITH HEADER LINE

DATA BEGIN OF ti_final OCCURS 0name LIKE modsap-namemember LIKE modsap-memberinclude LIKE rs38l-include (15) Include namestext LIKE tftit-stextprograma LIKE rs38l-includesel(1)END OF ti_final

DATA BEGIN OF ti_sust OCCURS 0substid LIKE gb922-substidsubseqnr LIKE gb922-subseqnrconseqnr LIKE gb922-conseqnrsubstab LIKE gb922-substabsubsfield LIKE gb922-subsfieldsubsval LIKE gb922-subsvalexitsubst LIKE gb922-exitsubstsel(1)END OF ti_sust

DATA BEGIN OF ti_val OCCURS 0valid LIKE gb931-validvalseqnr LIKE gb931-valseqnrcondid LIKE gb931-condidcheckid LIKE gb931-checkidsel(1)END OF ti_val

DATA BEGIN OF ti_bdcdata OCCURS 0INCLUDE STRUCTURE bdcdataDATA END OF ti_bdcdata

DATA ti_gb31t TYPE TABLE OF gb31t WITH HEADER LINE

DATA BEGIN OF ti_cimp OCCURS 0enhname LIKE enhobj-enhnameobj_type LIKE enhobj-obj_typeobj_name LIKE enhobj-obj_nameelemusage LIKE enhobj-elemusageenhinclude(40) like ENHINCINX-ENHINCLUDEEND OF ti_cimp

---------------------------------------------------------------------- VARIABLE GLOBALES----------------------------------------------------------------------DATAfunctxt TYPE smp_dyntxtw_tini LIKE sy-timlovg_caracter TYPE cvg_palavra(50) TYPE cvg_inicial LIKE sy-indexvg_conta_aspa TYPE nvg_pname LIKE tfdir-pnamevg_texto(50) TYPE cvg_contador LIKE sy-tfillvg_nivel(2) TYPE n

vg_ini_contagem TYPE c INDICA QUE DEBE SER INICIADO EL CONTADORvg_conta_espaco TYPE n TOTAL DE ESPACIOS ( MAacuteXIMO 2 )

---------------------------------------------------------------------- DEFINICION DE Estructuras y tablas para ALV (FM)----------------------------------------------------------------------DATAwa_cat TYPE slis_fieldcat_alv WA cataacutelogoti_cat TYPE slis_t_fieldcat_alv TI cataacutelogowa_layout TYPE slis_layout_alv WA opciones listati_header TYPE slis_t_listheader TI cabecera listawa_header TYPE slis_listheader WA cabecera listawa_events TYPE slis_alv_event WA eventos listati_events TYPE slis_t_event TI eventos listawa_sort TYPE slis_sortinfo_alv WA sortti_sort TYPE slis_t_sortinfo_alv TI sortwa_print TYPE slis_print_alv WA print

---------------------------------------------------------------------- PARAMETROS----------------------------------------------------------------------

- DATOS OBLIGATORIOSSELECTION-SCREEN BEGIN OF BLOCK bl01 WITH FRAME TITLE tit1

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text2POSITION 20PARAMETERS p_tcode LIKE tstc-tcode TransaccioacutenSELECTION-SCREEN END OF LINE

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text1POSITION 20PARAMETERS p_prog LIKE sy-repid ProgramaSELECTION-SCREEN END OF LINE

SELECTION-SCREEN END OF BLOCK bl01

SELECTION-SCREEN BEGIN OF BLOCK bl02 WITH FRAME TITLE tit2 SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text7POSITION 20PARAMETERS p_ue AS CHECKBOX User-exit

Boton de Exits en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(45) btn USER-COMMAND extVISIBLE LENGTH 12

Boton de Proyectos de Exits en la DYNPROSELECTION-SCREEN PUSHBUTTON 38(45) ext1 USER-COMMAND ext1VISIBLE LENGTH 12

Boton de User-Exits en la DYNPROSELECTION-SCREEN PUSHBUTTON 51(45) ext2 USER-COMMAND ext2VISIBLE LENGTH 12

SELECTION-SCREEN END OF LINE

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text8POSITION 20PARAMETERS p_badi AS CHECKBOX Badis Boton de Interface en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(60) badi USER-COMMAND badiVISIBLE LENGTH 25SELECTION-SCREEN END OF LINE

SELECTION-SCREEN BEGIN OF LINEPOSITION 25PARAMETERS p_handl AS CHECKBOX DEFAULT XCL_EXITHANDLER=gtGET_INSTANCESELECTION-SCREEN COMMENT 30(40) text12SELECTION-SCREEN END OF LINE

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text9POSITION 20PARAMETERS p_bte AS CHECKBOX Bte Boton de Tx FIBF en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(60) bte1 USER-COMMAND bte1VISIBLE LENGTH 1 Boton de Tx Evento en la DYNPROSELECTION-SCREEN PUSHBUTTON 29(60) bte2 USER-COMMAND bte2VISIBLE LENGTH 10 Boton de Tx Proceso en la DYNPROSELECTION-SCREEN PUSHBUTTON 40(60) bte3 USER-COMMAND bte3VISIBLE LENGTH 10

SELECTION-SCREEN END OF LINE

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(19) text14POSITION 20PARAMETERS p_enh AS CHECKBOX Punto de ampliacioacuten

Boton de Tx SENH en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(60) senh USER-COMMAND senhVISIBLE LENGTH 1

Boton de Customer Implementation en la DYNPROSELECTION-SCREEN PUSHBUTTON 29(60) cimp USER-COMMAND cimpVISIBLE LENGTH 24

SELECTION-SCREEN END OF LINE

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text10POSITION 20PARAMETERS p_sust AS CHECKBOX Sustitucioacuten

Boton de Sustitucioacuten en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(45) btn1 USER-COMMAND obbVISIBLE LENGTH 12

Boton de programa sustitucioacuten en la DYNPROSELECTION-SCREEN PUSHBUTTON 38(45) sust USER-COMMAND sustVISIBLE LENGTH 15

SELECTION-SCREEN END OF LINE

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text13POSITION 20PARAMETERS p_val AS CHECKBOX Validacioacuten

Boton de Validacioacuten en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(45) ob28 USER-COMMAND ob28VISIBLE LENGTH 12

Boton de programa sustitucioacuten en la DYNPROSELECTION-SCREEN PUSHBUTTON 38(45) val USER-COMMAND valVISIBLE LENGTH 15

SELECTION-SCREEN END OF LINE

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text11POSITION 20PARAMETERS p_fdex AS CHECKBOX Field-exit

Boton de Field-exit en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(60) btn2 USER-COMMAND fdexVISIBLE LENGTH 28

SELECTION-SCREEN END OF LINE

SELECTION-SCREEN END OF BLOCK bl02

- DATOS OPCIONALESSELECTION-SCREEN BEGIN OF BLOCK bl03 WITH FRAME TITLE tit3

SELECTION-SCREEN BEGIN OF LINE Boton de ALL en la DYNPROSELECTION-SCREEN PUSHBUTTON 18(60) all USER-COMMAND allVISIBLE LENGTH 1 Boton de DAL en la DYNPROSELECTION-SCREEN PUSHBUTTON 21(60) dal USER-COMMAND dalVISIBLE LENGTH 1SELECTION-SCREEN END OF LINE

SELECTION-SCREEN ULINE

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text3POSITION 20PARAMETERS p_incl AS CHECKBOX DEFAULT X IncludesSELECTION-SCREEN END OF LINE

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text4POSITION 20PARAMETERS p_func AS CHECKBOX DEFAULT X Funciones

SELECTION-SCREEN END OF LINE

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text5POSITION 20PARAMETERS p_submit AS CHECKBOX DEFAULT X SubmitSELECTION-SCREEN END OF LINE

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text6POSITION 20PARAMETERS p_nivel(2) TYPE n DEFAULT 04 NivelSELECTION-SCREEN END OF LINE

SELECTION-SCREEN END OF BLOCK bl03

Botoacuten de Marcar todo en el STATUS GUISELECTION-SCREEN FUNCTION KEY 1 Botoacuten de Desmarcar todo en el STATUS GUISELECTION-SCREEN FUNCTION KEY 2 Botoacuten de Breakpoint en el STATUS GUISELECTION-SCREEN FUNCTION KEY 3

----------------------------------------------------------------------- DEFINICIOacuteN DE MACROS-----------------------------------------------------------------------DEFINE icon_create Creo para el botoacuten indicado el icono y los textos correspondientes

call function ICON_CREATEexportingname = amp2text = amp3info = amp4importingresult = amp1exceptionsothers = 0

END-OF-DEFINITION icon_create

----------------------------------------------------------------------- INICIALIZACIOacuteN DE VARIABLES-----------------------------------------------------------------------INITIALIZATION

PERFORM def_text_parameter

PERFORM def_botones

CLEAR ti_gb31tREFRESH ti_gb31t

Obtengo ValidacioacutenSustitucioacutenEventosTextoSELECT INTO TABLE ti_gb31tFROM gb31tWHERE spras EQ sy-langu

----------------------------------------------------------------------- AT SELECTION-SCREEN-----------------------------------------------------------------------

AT SELECTION-SCREEN

CASE sscrfields-ucommWHEN FC01MOVE X TO p_ue p_badi p_bte p_sust p_val p_fdex p_enhWHEN FC02CLEAR p_ue p_badi p_bte p_sust p_val p_fdex p_enhWHEN FC03PERFORM breakpointWHEN EXTPERFORM visualizar_ampliacionWHEN EXT1PERFORM visualizar_proyectoWHEN EXT2PERFORM visualizar_fm_exitWHEN BADIPERFORM visualizar_interfaceWHEN OBBCALL TRANSACTION OBBHWHEN OB28CALL TRANSACTION OB28WHEN SUST OR VALPERFORM visualizar_programaWHEN FDEXSUBMIT rsmodprf AND RETURNWHEN BTE1CALL TRANSACTION FIBFWHEN BTE2PERFORM cargar_bte USING EWHEN BTE3PERFORM cargar_bte USING PWHEN SENHSUBMIT sapmsenh VIA SELECTION-SCREENAND RETURNWHEN CIMPPERFORM visualizar_imp_enhWHEN ALLMOVE X TO p_incl p_func p_submitWHEN DALCLEAR p_incl p_func p_submitWHEN OTHERS Do Nothing ENDCASE

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_prog

PERFORM repid_f4

---------------------------------------------------------------------- INICIO----------------------------------------------------------------------START-OF-SELECTION

GET TIME FIELD w_tini

- CONSISTENCIAS DE LOS PARAMETROSPERFORM consisti_parametros

- INICIALIZA TABLAPERFORM inicializa_tabela

- VERIFICA SI EN EL PROGRAMA EXISTE ALGUN INCLUDE FUNCION O SUBMITPERFORM verifica_include_funcao_submit

- ANALISA LOS INCLUDES Y BUSCA POR USER-EXIT BADIS Y BTEPERFORM busca_user_exit_badi_bte

- ANALISA LOS INCLUDES Y BUSCA LOS FIELD-EXITSPERFORM buscar_field_exit

- OBTENGO LOS EXITs DE LA TRANSACCIOacuteNPERFORM buscar_user_exit

- OBTENGO LAS PUNTOS DE AMPLIACIOacuteNPERFORM buscar_enh

- OBTENGO LAS SUSTITUCIONESPERFORM buscar_sustituciones

- OBTENGO LAS VALIDACIONESPERFORM buscar_validaciones

- CARGO LOS BREAKPOINTSPERFORM cargar_break

- VISUALIZA LAS AMPLIACIONES ENCONTRADASPERFORM exibe_user_exit

---------------------------------------------------------------------- FIN----------------------------------------------------------------------END-OF-SELECTION

amp---------------------------------------------------------------------amp Form BUSCA_USER_EXIT_BADI_BTEamp--------------------------------------------------------------------- Busca EXITs BADIs y BTE en el coacutedigo fuente----------------------------------------------------------------------FORM busca_user_exit_badi_bte

- VERIFICA SI EN LOS INCLUDES SELECIONADOS EXISTEN EXITSLOOP AT ti_includes

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

- BORRA LA TABLA INTERNAREFRESH ti_programa

- REALIZA LECTURA DE INCLUDE ALMACENANDO EN TABLA INTERNAREAD REPORT ti_includes-nome INTO ti_programa

LOOP AT ti_programa

IF p_ue EQ XPERFORM buscar_exitPERFORM busca_enhancementsENDIF

IF p_badi EQ XPERFORM buscar_badiENDIF

IF p_bte EQ XPERFORM buscar_bteENDIF

IF p_enh EQ XPERFORM buscar_punto_ampliacionENDIF

ENDLOOPENDLOOP

ENDFORM BUSCA_USER_EXIT_BADI_BTE

amp---------------------------------------------------------------------amp Form BUSCA_ENHANCEMENTSamp--------------------------------------------------------------------- Busca las llamadas a los USER-EXIT----------------------------------------------------------------------FORM busca_enhancements

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE EN ALGUN ENHANCEMENTSEARCH ti_programa-cf FOR c_enhance- SE ENCONTRO EL ENHANCEMENT Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentarioCLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF

ENDFORM BUSCA_ENHANCEMENTS

amp---------------------------------------------------------------------amp Form EXIBE_USER_EXITamp--------------------------------------------------------------------- Muestra los datos----------------------------------------------------------------------FORM exibe_user_exit

PERFORM armar_alv

PERFORM mostrar_listado

ENDFORM EXIBE_USER_EXIT

amp---------------------------------------------------------------------amp Form PROCURA_INCLUDEamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_include

CLEAR vg_palavra

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN INCLUDESEARCH ti_programa-cf FOR c_include- SE ENCONTRO EN EL INCLUDE Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN STRUCTURESEARCH ti_programa-cf FOR c_struct

IF sy-subrc IS INITIALEXITENDIF

- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DEL INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF NOT vg_caracter IS INITIAL- VERIFICA SI NO ES FIN DE COMANDOIF vg_caracter EQ c_pontoEXITENDIF- ARMA PALABRACONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACIONTRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_includeCLEAR vg_palavraENDIFENDIFENDDO- GRABA NOMBRE DEL INCLUDE PARA FUTURA BUSQUEDA POR USER EXITREAD TABLE ti_includes WITH KEY nome = vg_palavraIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_palavra TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIF

ENDIF

ENDFORM PROCURA_INCLUDE

amp---------------------------------------------------------------------amp Form PROCURA_FUNCAOamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_funcao

CLEAR vg_conta_aspavg_palavra

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA FUNCIONSEARCH ti_programa-cf FOR c_funcao_2- SE ENCONTRO UNA FUNCION Y LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DE LA INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF NOT vg_caracter IS INITIAL- VERIFICA SI NO ES FIN DE COMANDOIF vg_caracter EQ c_aspaADD 1 TO vg_conta_aspaIF vg_conta_aspa EQ 2EXITENDIFENDIF- ARMA PALABRACONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACIONTRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_funcao_1CLEAR vg_palavraENDIFENDIFENDDO- BUSCA NOMBRE DE LA FUNCION PARA FUTURA BUSQUEDA POR USER EXITCLEAR vg_pnameSELECT SINGLE pnameINTO vg_pnameFROM tfdirWHERE funcname EQ vg_palavraIF sy-subrc EQ 0

READ TABLE ti_includes WITH KEY nome = vg_pnameIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_pname TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIF

ENDIF

ENDIF

ENDFORM PROCURA_FUNCAO

amp---------------------------------------------------------------------amp Form VERIFICA_INCLUDE_FUNCAO_SUBMITamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM verifica_include_funcao_submit

CHECK p_ue IS NOT INITIAL OR p_badi IS NOT INITIALOR p_bte IS NOT INITIAL OR p_enh IS NOT INITIAL

LOOP AT ti_includes

ADD 1 TO vg_contadorDESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfillMOVE ti_includes-nivel TO vg_nivelADD 1 TO vg_nivel

- BORRA TABLA INTERNAREFRESH ti_programa

- REALIZA LECTURA DE INCLUDEFUNCION ALMACENANDO EN TABLA INTERNAREAD REPORT ti_includes-nome INTO ti_programa

LOOP AT ti_programa

- PROCURA POR INCLUDESIF p_incl EQ c_xPERFORM procura_includeENDIF- PROCURA POR FUNCIONIF p_func EQ c_xPERFORM procura_funcaoENDIF- PROCURA POR SUBMITIF p_submit EQ c_xPERFORM procura_submitENDIF

ENDLOOP

ENDLOOP

ENDFORM VERIFICA_INCLUDE_FUNCAO_SUBMIT

amp---------------------------------------------------------------------amp Form EVITAR_TIME_OUTamp--------------------------------------------------------------------- Evito el TIME OUT visualizando un mensaje----------------------------------------------------------------------FORM evitar_time_out USING p_tfill LIKE sy-tfill

DATAvl_total(10) TYPE n

vl_atual(10) TYPE nl_tout LIKE sy-timlol_time(10) TYPE c

GET TIME FIELD l_tout

l_tout = l_tout - w_tini

MOVEp_tfill TO vl_totalvg_contador TO vl_atual

SHIFT vl_total LEFT DELETING LEADING 0SHIFT vl_atual LEFT DELETING LEADING 0WRITE l_tout TO l_time

CONCATENATE Tpo l_time Total vl_total Actual vl_atualINTO vg_textoSEPARATED BY space

CALL FUNCTION SAPGUI_PROGRESS_INDICATOREXPORTINGtext = vg_texto

ENDFORM EVITAR_TIME_OUT

amp---------------------------------------------------------------------amp Form PROCURA_SUBMITamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_submit

CLEAR vg_conta_espaco vg_palavra vg_ini_contagem

- VERIFICA SI LA LINEA DEL PROGRAMA EXISTE ALGUN INCLUDESEARCH ti_programa-cf FOR c_submit- SE ENCONTRO EN EL INCLUDE Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DEL INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF vg_ini_contagem EQ c_x AND vg_caracter IS INITIALADD 1 TO vg_conta_espacoENDIF

IF NOT vg_caracter IS INITIALMOVE c_x TO vg_ini_contagemIF vg_caracter EQ c_pontoEXITENDIF- ARMA PALABRAIF vg_conta_espaco LT 2CONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACION

TRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_submitCLEAR vg_palavraENDIFELSEEXITENDIFENDIFENDDO- BUSCA NOMBRE DE LA FUNCION PARA FUTURA BUSQUEDA POR USER EXITREAD TABLE ti_includes WITH KEY nome = vg_palavraIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_palavra TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIFENDIF

ENDFORM PROCURA_SUBMIT

amp---------------------------------------------------------------------amp Form CONSISTI_PARAMETROSamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM consisti_parametros

IF p_nivel IS INITIALMOVE 1 TO p_nivelENDIF

IF p_prog IS INITIAL AND p_tcode IS INITIAL- EL NOMBRE DEL PROGRAMA Y EL NOMBRE DE LA TRANSACCION NO PUEDEN SER- NULOS UNO DE ELLOS DEBE SER INFORMADOMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e01STOPENDIF

IF NOT p_prog IS INITIAL AND NOT p_tcode IS INITIAL- SE SOLICITA AL USUARIO QUE INFORME NOMBRE DE PROGRAMA O TRANSACCIONMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e02STOPENDIF

IF p_ue IS INITIAL AND p_badi IS INITIAL AND p_bte IS INITIALAND p_sust IS INITIAL AND p_val IS INITIAL AND p_fdex IS INITIALAND p_enh IS INITIAL- SE SOLICITA AL USUARIO QUE INFORME UN TIPO DE MEJORAMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e03STOPENDIF

ENDFORM CONSISTI_PARAMETROS

amp---------------------------------------------------------------------

amp Form INICIALIZA_TABELAamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM inicializa_tabela

DATAe_tstc TYPE tstcl_tcode TYPE sy-tcode

REFRESH ti_includes

IF NOT p_prog IS INITIAL

MOVE p_prog TO ti_includes-nome0 TO ti_includes-nivelAPPEND ti_includes

- BUSCO EL PROGRAMAREAD REPORT ti_includes-nome INTO ti_programa

IF sy-subrc EQ 0REFRESH ti_programaELSE- EL PROGRAMA NO EXISTEMESSAGE s893(pz) WITH El programa p_prog no existeSTOPENDIF

ELSEIF NOT p_tcode IS INITIAL

SELECT SINGLE FROM tstcWHERE tcode EQ p_tcode

IF sy-subrc EQ 0

IF tstc-pgmna IS NOT INITIALMOVE tstc-pgmna TO ti_includes-nome0 TO ti_includes-nivelAPPEND ti_includesELSE Se trata de una transaccioacuten de paraacutemetros Obtengo la transaccioacuten asociadaCALL FUNCTION RS_TRANSACTION_SINGLE_GETEXPORTINGparameter_tcode = p_tcodeIMPORTINGtcode = l_tcode

SELECT SINGLE INTO e_tstcFROM tstcWHERE tcode EQ l_tcode

IF sy-subrc EQ 0MOVE e_tstc-pgmna TO ti_includes-nome0 TO ti_includes-nivel

APPEND ti_includesELSE- LA TRANSACCIOacuteN NO EXISTEMESSAGE s893(pz) WITH La transaccioacuten p_tcode no existeENDIFENDIFELSE- LA TRANSACCIOacuteN NO EXISTEMESSAGE s893(pz) WITH La transaccioacuten p_tcode no existeSTOPENDIFENDIF

ENDFORM INICIALIZA_TABELA

amp---------------------------------------------------------------------amp Form armar_alvamp--------------------------------------------------------------------- Armo el ALV----------------------------------------------------------------------FORM armar_alv

DATAl_repid TYPE sy-repid

MOVE sy-repid TO l_repid

CALL FUNCTION REUSE_ALV_BLOCK_LIST_INITEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMAND

IF p_ue IS NOT INITIALPERFORM construir_catalogo_exitPERFORM definir_layout USING TI_USER_EXITCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGEPERFORM sort TABLES ti_sortUSING TI_USER_EXIT

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_USER_EXITit_events = ti_eventsit_sort = ti_sorti_text = User-exitTABLESt_outtab = ti_user_exitEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

PERFORM construir_catalogo_uexitPERFORM definir_layout USING TI_FINAL

CHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_UEXITPERFORM sort TABLES ti_sortUSING TI_FINAL

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FINALit_events = ti_eventsit_sort = ti_sorti_text = User-exit TxCMODTABLESt_outtab = ti_finalEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_badi IS NOT INITIALPERFORM construir_catalogo_badiPERFORM definir_layout USING TI_BADICHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BADIPERFORM sort TABLES ti_sortUSING TI_BADI

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_BADIit_events = ti_eventsit_sort = ti_sorti_text = BadisTABLESt_outtab = ti_badiEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_bte IS NOT INITIALPERFORM construir_catalogo_btePERFORM definir_layout USING TI_BTECHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BTEPERFORM sort TABLES ti_sortUSING TI_BTE

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layout

it_fieldcat = ti_cati_tabname = TI_BTEit_events = ti_eventsit_sort = ti_sorti_text = BTETABLESt_outtab = ti_bteEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_enh IS NOT INITIALPERFORM construir_catalogo_enhPERFORM definir_layout USING TI_ENHCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHPERFORM sort TABLES ti_sortUSING TI_ENH

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHit_events = ti_eventsit_sort = ti_sorti_text = ENHTABLESt_outtab = ti_enhEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

PERFORM construir_catalogo_enhobjPERFORM definir_layout USING TI_ENHOBJCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHOBJPERFORM sort TABLES ti_sortUSING TI_ENHOBJ

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHOBJit_events = ti_eventsit_sort = ti_sorti_text = ENHOBJTABLESt_outtab = ti_enhobjEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_sust IS NOT INITIALPERFORM construir_catalogo_sustPERFORM definir_layout USING TI_SUSTCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_SUSTPERFORM sort TABLES ti_sortUSING TI_SUST

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_SUSTit_events = ti_eventsit_sort = ti_sorti_text = SustitucionesTABLESt_outtab = ti_sustEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_val IS NOT INITIALPERFORM construir_catalogo_valPERFORM definir_layout USING TI_VALCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_VALPERFORM sort TABLES ti_sortUSING TI_VAL

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_VALit_events = ti_eventsit_sort = ti_sorti_text = ValidacionesTABLESt_outtab = ti_valEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_fdex IS NOT INITIALPERFORM construir_catalogo_fdexPERFORM definir_layout USING TI_FDEXCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_FDEX

PERFORM sort TABLES ti_sortUSING TI_FDEX

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FDEXit_events = ti_eventsit_sort = ti_sorti_text = Field-exitTABLESt_outtab = ti_fdexEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

ENDFORM armar_alv

amp---------------------------------------------------------------------amp Form construir_catalogo_EXITamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_exit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_USER_EXITi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03

CF X c_text_04

ENDFORM construir_catalogo_EXIT

amp---------------------------------------------------------------------amp Form asignar_campo_a_catalogoamp--------------------------------------------------------------------- Asignar campo al catalogo ALV----------------------------------------------------------------------FORM asignar_campo_a_catalogo TABLES pt_cat STRUCTURE wa_catUSING p_fieldname LIKE wa_cat-fieldnamep_key LIKE wa_cat-keyp_col_pos TYPE cp_fix_column LIKE wa_cat-fix_columnp_hotspot LIKE wa_cat-hotspotp_do_sum LIKE wa_cat-do_sump_input LIKE wa_cat-inputp_checkbox LIKE wa_cat-checkboxp_no_out LIKE wa_cat-no_outp_icon LIKE wa_cat-iconp_reptext_ddic LIKE wa_cat-reptext_ddic

STATICS l_col_pos LIKE sy-cucol

Asignar atributos de campo en el catalogo de cabecera ALVCLEAR wa_catREAD TABLE pt_cat INTO wa_catWITH KEY fieldname = p_fieldname

CHECK sy-subrc EQ 0

IF NOT p_reptext_ddic IS INITIALwa_cat-seltext_l = wa_cat-seltext_m =wa_cat-seltext_s = wa_cat-reptext_ddic = p_reptext_ddicENDIF

IF p_col_pos EQ X Inicializo el conteo para ordenar las columnasl_col_pos = 1ELSEADD 1 TO l_col_posENDIF

wa_cat-fieldname = p_fieldnamewa_cat-key = p_keywa_cat-col_pos = l_col_poswa_cat-fix_column = p_fix_columnwa_cat-hotspot = p_hotspotwa_cat-do_sum = p_do_sumwa_cat-edit = wa_cat-input = p_inputwa_cat-checkbox = p_checkboxwa_cat-no_out = p_no_outwa_cat-icon = p_icon

MODIFY pt_cat FROM wa_cat INDEX sy-tabix

ENDFORM asignar_campo_a_catalogo

amp---------------------------------------------------------------------amp Form definir_layoutamp--------------------------------------------------------------------- Definir atributos del layout de reporte----------------------------------------------------------------------FORM definir_layout USING p_table TYPE slis_layout_alv-box_tabnameCHANGING p_layout TYPE slis_layout_alv

CLEAR p_layout

IF p_table NE TI_CIMP Marco el campo para la seleccioacutenp_layout-box_fieldname = SELp_layout-box_tabname = p_tableENDIFp_layout-zebra = Xp_layout-colwidth_optimize = Xp_layout-no_vline = p_layout-no_colhead = p_layout-lights_condense = Xp_layout-detail_popup = Xp_layout-detail_initial_lines = Xp_layout-flexible_key = p_layout-key_hotspot = p_layout-confirmation_prompt = X

ENDFORM definir_layout

amp---------------------------------------------------------------------amp Form construir_eventosamp--------------------------------------------------------------------- Asignar eventos soportados----------------------------------------------------------------------FORM construir_eventos USING p_form LIKE wa_events-formDATAl_type(1) TYPE n

REFRESH ti_eventsCLEAR wa_events

ALV Simple Block appendl_type = 2

Buscar secciones para eventosCALL FUNCTION REUSE_ALV_EVENTS_GETEXPORTINGi_list_type = l_typeIMPORTINGet_events = ti_events

Leer evento TOP_OF_PAGEREAD TABLE ti_events WITH KEY name = slis_ev_top_of_pageINTO wa_events Asignar Rutina FORM TOP_OF_PAGE a eventoIF sy-subrc = 0MOVE p_form TO wa_events-formMODIFY ti_events FROM wa_events INDEX sy-tabixENDIF

ENDFORM construir_eventos

amp---------------------------------------------------------------------amp Form top_of_pageamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_user_exitWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUser-exit

ENDFORM top_of_page

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_UEXITamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_uexit

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_finalWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUSER-EXITs TxSMOD

ENDFORM TOP_OF_PAGE_UEXIT

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_FDEXamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_fdex

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_fdexWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incFIELD-EXITs

ENDFORM TOP_OF_PAGE_FDEX

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BADIamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_badi

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_badiWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBADIs

ENDFORM TOP_OF_PAGE_BADI

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BTEamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_bte

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_bteWRITE sy-tfill TO l_tfill_cant

CONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBTEs

ENDFORM TOP_OF_PAGE_BTE

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enh

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_enhWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENH

amp---------------------------------------------------------------------amp Form sortamp--------------------------------------------------------------------- Creo el sort del ALV (FM)---------------------------------------------------------------------- --gtPT_sort Tabla --gtP_tabname Nombre de la tabla----------------------------------------------------------------------FORM sort TABLES pt_sortUSING p_tabname TYPE any

CLEAR pt_sort wa_sortREFRESH pt_sort

CASE p_tabnameWHEN TI_SUST

wa_sort-fieldname = SUBSTIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = SUBSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = CONSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN TI_VAL

wa_sort-fieldname = VALIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = VALSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN TI_ENHOBJ

wa_sort-fieldname = ENHNAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = VERSIONwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN OTHERS

IF p_tabname NE TI_FINAL

wa_sort-fieldname = TIPOwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

IF p_tabname NE TI_FDEX

wa_sort-fieldname = NIVELwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = PROGRAMAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = LINEAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

ENDIF

ELSE

wa_sort-fieldname = NAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = MEMBERwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sortENDIFENDCASE

ENDFORM sort

amp---------------------------------------------------------------------amp Form mostrar_listadoamp--------------------------------------------------------------------- Mostrar listado ALV----------------------------------------------------------------------FORM mostrar_listado

wa_print-reserve_lines = 2

CALL FUNCTION REUSE_ALV_BLOCK_LIST_DISPLAY

EXPORTINGis_print = wa_printEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM mostrar_listado

amp---------------------------------------------------------------------amp Form user_commandamp--------------------------------------------------------------------- Evaluar acciones del usuario----------------------------------------------------------------------FORM user_command USING ucomm LIKE sy-ucommsfields TYPE slis_selfield

DATA l_break TYPE c

Rescatar el registro seleccionadoCASE sfields-tabnameWHEN TI_USER_EXITREAD TABLE ti_user_exit INDEX sfields-tabindexWHEN TI_BADIREAD TABLE ti_badi INDEX sfields-tabindexWHEN TI_BTEREAD TABLE ti_bte INDEX sfields-tabindexWHEN TI_ENHREAD TABLE ti_enh INDEX sfields-tabindexWHEN TI_ENHOBJREAD TABLE ti_enhobj INDEX sfields-tabindexWHEN TI_FDEXREAD TABLE ti_fdex INDEX sfields-tabindexWHEN TI_FINALREAD TABLE ti_final INDEX sfields-tabindexWHEN TI_SUSTREAD TABLE ti_sust INDEX sfields-tabindexWHEN TI_VALREAD TABLE ti_val INDEX sfields-tabindexWHEN TI_CIMPREAD TABLE ti_cimp INDEX sfields-tabindexENDCASE

Seleccion de opcionCASE ucomm DOUBLE CLICKWHEN ampIC1 Evaluar valor de campo seleccionadoCHECK NOT sfields-value IS INITIAL

CASE sfields-tabnameWHEN TI_USER_EXIT USER-EXITIF ti_user_exit-tipo EQ sfields-value(4)SEARCH ti_user_exit-cf FOR c_enhanceCHECK sy-subrc EQ 0PERFORM visualizar_exit USING ti_user_exit-programati_user_exit-cf

ELSEIF ti_user_exit-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_user_exit-programati_user_exit-lineaMOVE X TO l_breakELSEIF ti_user_exit-break EQ sfields-value(4)OR ti_user_exit-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_user_exit-programati_user_exit-lineati_user_exit-breakMOVE X TO l_breakENDIF

WHEN TI_FINAL USER-EXIT Tx CMODIF ti_final-name EQ sfields-valueCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = ti_final-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSEIF ti_final-include EQ sfields-valuePERFORM visualizar_linea USING ti_final-programa1MOVE X TO l_breakENDIF

WHEN TI_BADI BadiIF ti_badi-tipo EQ sfields-value(4)PERFORM visualizar_badi USING ti_badi-cfELSEIF ti_badi-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_badi-programati_badi-lineaMOVE X TO l_breakELSEIF ti_badi-break EQ sfields-value(4)OR ti_badi-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_badi-programati_badi-lineati_badi-breakMOVE X TO l_breakENDIF

WHEN TI_BTE BTEIF ti_bte-tipo EQ sfields-value(4)PERFORM fibf USING ti_bte-cfELSEIF ti_bte-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_bte-programati_bte-lineaMOVE X TO l_breakELSEIF ti_bte-break EQ sfields-value(4)OR ti_bte-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_bte-programati_bte-linea

ti_bte-breakMOVE X TO l_breakENDIF

WHEN TI_ENH Punto de ampliacioacutenIF ti_enh-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_enh-programati_enh-lineaMOVE X TO l_breakELSEIF ti_enh-tipo EQ sfields-value(4)PERFORM bi_se18 USING ti_enh-cfENDIF

WHEN TI_ENHOBJ Punto de ampliacioacutenIF ti_enhobj-enhname EQ sfields-value(30)PERFORM bi_se19 USING ti_enhobj-enhnameENDIF

WHEN TI_SUST SustitucionesIF ti_sust-substid EQ sfields-value(7) ORti_sust-subseqnr EQ sfields-value(3)PERFORM visualizar_sust USING ti_sust-substidti_sust-subseqnrENDIF

WHEN TI_VAL ValidacionesIF ti_val-valid EQ sfields-value(7) ORti_val-valseqnr EQ sfields-value(3)PERFORM visualizar_val USING ti_val-validti_val-valseqnrENDIF

WHEN TI_FDEX Field-exitIF ti_fdex-tipo EQ sfields-valueSUBMIT rsmodprf AND RETURNELSEIF ti_fdex-cf(60) EQ sfields-value Visualizo el field-exitCALL FUNCTION RS_FUNCTION_SHOWEXPORTINGfuncname = ti_fdex-cf

CALL FUNCTION RS_NAVIGATION_MONITORENDIF

WHEN TI_CIMP Customer implementation

CASE sfields-fieldnameWHEN ENHNAMEPERFORM bi_se19 USING ti_cimp-enhnameWHEN ENHINCLUDEPERFORM visualizar_enh_cf USING ti_cimp-enhinclude

WHEN OTHERS DO NOTHING ENDCASE

WHEN OTHERS DO NOTHING ENDCASE

WHEN OTHERS DO NOTHING ENDCASE

IF l_break IS NOT INITIAL AND sfields-tabname NE TI_CIMPWAIT UP TO 1 SECONDSPERFORM cargar_breakENDIFsfields-refresh = X

ENDFORM user_command

amp---------------------------------------------------------------------amp Form visualizar_lineaamp--------------------------------------------------------------------- Visualizo la linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_linea USING p_programa TYPE sy-repidp_linea

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_programaobject_type = c_typeposition = p_lineaEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM visualizar_linea

amp---------------------------------------------------------------------amp Form buscar_exitamp--------------------------------------------------------------------- Buscar USER-EXIT----------------------------------------------------------------------FORM buscar_exit

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN USER-EXITSEARCH ti_programa-cf FOR c_user_exit- SE ENCONTRO UN USER-EXIT Y SE VERIFICA SI LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS PERFORMSEARCH ti_programa-cf FOR c_performCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LAS ASIGNACIONESSEARCH ti_programa-cf FOR c_igualCHECK sy-subrc NE 0

CLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INIacuteCIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF

ENDFORM buscar_exit

amp---------------------------------------------------------------------amp Form buscar_badiamp--------------------------------------------------------------------- Buscar BADI----------------------------------------------------------------------FORM buscar_badi

DATAl_subrc LIKE sy-subrc

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BADISEARCH ti_programa-cf FOR c_badi- SE ENCONTRO UNA BADI Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

SEARCH ti_programa-cf FOR c_includeIF sy-subrc NE 0CLEAR l_subrcSEARCH ti_programa-cf FOR c_methodIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_funcao_2IF sy-subrc NE 0SEARCH ti_programa-cf FOR c_performIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_type_refIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_formMOVE 4 TO l_subrcENDIFENDIFENDIFENDIF

IF l_subrc EQ 0CLEAR ti_badi

- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIFELSECHECK p_handl IS NOT INITIAL- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA INSTANCIA DE- UNA BADISEARCH ti_programa-cf FOR c_handler- SE ENCONTRO UNA INSTANCIA DE IMPLEMENACIOacuteN Y SE VERIFICA SI LA LINEA- NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

SEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0CLEAR ti_badi- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIF

ENDFORM buscar_badi

amp---------------------------------------------------------------------amp Form buscar_bteamp--------------------------------------------------------------------- Buscar BTE----------------------------------------------------------------------FORM buscar_bte

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OPEN_FI_PERFORM

- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endform

CHECK sy-subrc NE 0

CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte1- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OUTBOUND_CALL

- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0

CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF

ENDFORM buscar_bte

amp---------------------------------------------------------------------amp Form repid_f4amp--------------------------------------------------------------------- Ejecuto el F4 para buscar programas----------------------------------------------------------------------FORM repid_f4

CALL FUNCTION REPOSITORY_INFO_SYSTEM_F4EXPORTINGobject_type = PROGobject_name = p_progsuppress_selection = XIMPORTINGobject_name_selected = p_progEXCEPTIONS

cancel = 1wrong_type = 2OTHERS = 3

ENDFORM repid_f4

amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf

DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

SEARCH p_cf FOR 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 INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

READ TABLE lt_cf INDEX 4

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

CHECK sy-subrc IS INITIAL

Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten

textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer

CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4

IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF

WHEN OTHERS Do Nothing ENDCASE

ENDFORM visualizar_badi

amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf

DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

CLEAR d010inc modsap modact

Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid

IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF

SEARCH p_cf FOR c_enhance

CHECK sy-subrc IS INITIAL

REFRESH lt_cf

l_cf = 500 - sy-fdpos

MOVE p_cf+sy-fdpos(l_cf) TO l_linea

SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3

TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS

Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _

Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit

CHECK sy-subrc IS INITIAL

Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM

modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3

ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname

CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ENDIF

ENDFORM visualizar_exit

amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit

DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo

DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe

DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE

CHECK p_fdex IS NOT INITIAL

CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe

MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex

IF p_prog IS NOT INITIAL

MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF

Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog

LOOP AT lt_d020s

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

REFRESH lt_d021s

Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4

Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X

SEARCH lt_d021s-fnam FOR -

IF sy-subrc IS INITIAL

MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum

Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname

APPEND lt_campo

ENDIF

ENDLOOPENDLOOP

CHECK lt_campo[] IS NOT INITIAL

SORT lt_campo BY repid dnum tabname fieldname

DELETE ADJACENT DUPLICATES FROM lt_campo

Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname

SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l

LOOP AT lt_dd03l

CLEAR tddir tddirs

SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname

CHECK sy-subrc IS INITIAL

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog

CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF

Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf

IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF

READ TABLE lt_fe WITH KEY cf = lt_fe-cf

CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP

LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex

ENDLOOP

ENDFORM buscar_field_exit

amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf

DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c

SEARCH p_cf FOR c_bte

IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ELSE

SEARCH p_cf FOR c_bte1

CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ENDIF

IF l_tipo IS NOT INITIAL

PERFORM visualizar_bte USING l_tipol_linea

ELSECALL TRANSACTION FIBFENDIF

ENDFORM fibf

amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT

EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM breakpoint

amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_badi

amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE

i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_bte

amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X TIPO X X c_text_05CF X c_text_04

ENDFORM construir_catalogo_FDEX

amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc

DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

CHECK lt_break[] IS NOT INITIAL

IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix

MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF

IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix

MOVEti_badi-linea TO l_lineti_badi-programa TO l_program

READ TABLE lt_break INTO wa_break

WITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF

IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix

MOVEti_bte-linea TO l_lineti_bte-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF

ENDFORM cargar_break

amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

DATAl_tabix TYPE sy-tabix

l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

SELECT SINGLE FROM d010incWHERE include = p_programa

IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF

MOVEp_linea TO l_linep_programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM asignar_break

amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit

IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF

PERFORM get_objects Get Objects

ENDFORM buscar_user_exit

amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects

DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area

DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix

SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog

IF sy-subrc = 0

SORT ti_tadir BY obj_name devclass

SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass

IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF

- Get UserExit namesLOOP AT ti_jtab

SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E

APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area

l_fname = ti_final-member

CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include

LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP

CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP

ENDFORM get_objects

amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X

ENDFORM construir_catalogo_uexit

amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------

FORM visualizar_ampliacion

DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF

SELECT SINGLE FROM modsapWHERE member EQ l_member

IF sy-subrc IS INITIAL

Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member

ENDIF

ENDFORM visualizar_ampliacion

amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea

RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs

REFRESH r_event r_procs

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event

SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs

SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE

ENDFORM visualizar_bte

amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE

----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c

DATAl_linea(500) TYPE c

DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

MOVE lt_fields-value TO l_linea

PERFORM visualizar_bte USING p_tipol_linea

ENDFORM cargar_bte

amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface

DATAl_linea(500) TYPE c

DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE

InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF

ENDFORM visualizar_interface

amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones

CHECK p_sust IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922

ENDFORM buscar_sustituciones

amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST

ENDFORM construir_catalogo_sust

amp---------------------------------------------------------------------

amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones

ENDFORM TOP_OF_PAGE_SUST

amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4

CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_sust

amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones

CHECK p_val IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931

ENDFORM buscar_validaciones

amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID

ENDFORM construir_catalogo_val

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones

ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2

CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_val

amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto

DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF

SELECT SINGLE FROM modsapWHERE name EQ l_name

IF sy-subrc IS INITIAL

MOVE l_name TO l_member

SELECT SINGLE FROM modactWHERE member EQ l_member

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF

ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF

ENDFORM visualizar_proyecto

amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel

APPEND ti_enh

ENDIFENDIFENDIF

ENDFORM buscar_punto_ampliacioacuten

amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_enh

amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh

DATA l_obj_name TYPE enhobj-obj_name

DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name

CHECK p_enh IS NOT INITIAL

IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF

REFRESH lt_obj_name

LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP

SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name

ENDFORM buscar_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X

ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME

ENDFORM construir_catalogo_enhobj

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENHOBJ

amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM bi_se19

amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro

CLEAR ti_bdcdatati_bdcdata-program = program

ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata

ENDFORM BDC_DYNPRO

amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval

CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata

ENDFORM BDC_FIELD

amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa

DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)

CHECK ti_gb31t[] IS NOT INITIAL

DO

Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2

IF l_exit EQ XEXITENDIF

CHECK l_exit IS INITIAL

Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND

CHECK l_boolpool IS NOT INITIAL

MOVE l_boolpool TO l_repid

Visualizo el programaPERFORM visualizar_linea USING l_repid01

ENDDO

ENDFORM visualizar_programa

amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope

STATICS l_flag TYPE c

DATA l_tit(65) TYPE c

CHECK l_flag IS INITIAL

l_flag = X

WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline

4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM texto_tope

amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf

DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off

CHECK l_off IS NOT INITIAL

ADD 7 TO l_offl_cf = 500 - l_off

SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_enhspotname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1

invalid_object_type = 2OTHERS = 3

ENDFORM bi_se18

amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit

DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE

DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE

MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE

MOVE lt_fields-value TO l_nameENDIF

Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_

LOOP AT lt_tfdir

CLEARl_group l_include l_namespace l_str_area

l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl

IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl

CHECK sy-subrc IS INITIAL

Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP

CHECK l_flag IS INITIAL

La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value

ENDFORM visualizar_fm_exit

amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter

tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten

ENDFORM def_text_parameter

amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones

Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt

Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt

Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt

icon_create RESULT name text infoicon_create

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 2: buscar_ampliaciones FOROSAP

c_igual(3) TYPE c VALUE = c_x TYPE c VALUE X

CONSTANTSc_ue(4) TYPE c VALUE EXITc_b(4) TYPE c VALUE BADIc_bt(4) TYPE c VALUE BTEc_st(4) TYPE c VALUE SUSTc_fdex(4) TYPE c VALUE FDEXc_enht(4) TYPE c VALUE ENHc_operation(4) TYPE c VALUE SHOWc_type(4) TYPE c VALUE PROG Textosc_text_01 TYPE slis_fieldcat_alv-reptext_ddic VALUE Programac_text_02 TYPE slis_fieldcat_alv-reptext_ddic VALUE Nivelc_text_03 TYPE slis_fieldcat_alv-reptext_ddic VALUE Lineac_text_04 TYPE slis_fieldcat_alv-reptext_ddic VALUE Coacutedigo fuentec_text_05 TYPE slis_fieldcat_alv-reptext_ddic VALUE Tipoc_text_06 TYPE string VALUE Breakpointc_text_07 TYPE slis_fieldcat_alv-reptext_ddic VALUE STOPc_text_08 TYPE string VALUE Marcar todoc_text_09 TYPE string VALUE Desmarcar todoc_text_e01 TYPE slis_fieldcat_alv-reptext_ddic VALUEDebe ingresar programa o transaccioacutenc_text_e02 TYPE slis_fieldcat_alv-reptext_ddic VALUEDebe ingresar solo programa o transaccioacutenc_text_e03 TYPE slis_fieldcat_alv-reptext_ddic VALUEDebe seleccionar un tipo de mejora

CONSTANTSc_std_definition(3) TYPE c VALUE SAPc_std_implmnt(3) TYPE c VALUE KUN

---------------------------------------------------------------------- TABLAS INTERNAS----------------------------------------------------------------------TYPES BEGIN OF x_tadirobj_name TYPE sobj_namedevclass TYPE devclassEND OF x_tadir

TYPES BEGIN OF x_slogobj_name TYPE sobj_nameEND OF x_slog

DATA BEGIN OF ti_programa OCCURS 0 cf like rssource-linecf(500)END OF ti_programa

DATA BEGIN OF ti_includes OCCURS 0nome LIKE sy-repidnivel(2) TYPE nEND OF ti_includes

DATA BEGIN OF ti_user_exit OCCURS 0programa LIKE sy-repidtipo(4)

linea(10) TYPE n cf LIKE rssource-linecf(500)nivel(2) TYPE nbreak LIKE icon-idsel(1)END OF ti_user_exit

DATA BEGIN OF ti_badi OCCURS 0programa LIKE sy-repidtipo(4)linea(10) TYPE n cf LIKE rssource-linecf(500)nivel(2) TYPE nbreak LIKE icon-idsel(1)END OF ti_badi

DATA BEGIN OF ti_bte OCCURS 0programa LIKE sy-repidtipo(4)linea(10) TYPE n cf LIKE rssource-linecf(500)nivel(2) TYPE nbreak LIKE icon-idsel(1)END OF ti_bte

DATA BEGIN OF ti_enh OCCURS 0programa LIKE sy-repidtipo(4)linea(10) TYPE n cf LIKE rssource-linecf(500)nivel(2) TYPE nbreak LIKE icon-idsel(1)END OF ti_enh

DATA BEGIN OF ti_enhobj OCCURS 0enhname LIKE enhobj-enhnameversion LIKE enhobj-versionobj_type LIKE enhobj-obj_typeobj_name LIKE enhobj-obj_namesel(1)END OF ti_enhobj

DATA BEGIN OF ti_fdex OCCURS 0tipo(4) cf LIKE rssource-linecf(500)sel(1)END OF ti_fdex

DATAti_tadir TYPE STANDARD TABLE OF x_tadir WITH HEADER LINE

ti_jtab TYPE STANDARD TABLE OF x_slog WITH HEADER LINE

DATA BEGIN OF ti_final OCCURS 0name LIKE modsap-namemember LIKE modsap-memberinclude LIKE rs38l-include (15) Include namestext LIKE tftit-stextprograma LIKE rs38l-includesel(1)END OF ti_final

DATA BEGIN OF ti_sust OCCURS 0substid LIKE gb922-substidsubseqnr LIKE gb922-subseqnrconseqnr LIKE gb922-conseqnrsubstab LIKE gb922-substabsubsfield LIKE gb922-subsfieldsubsval LIKE gb922-subsvalexitsubst LIKE gb922-exitsubstsel(1)END OF ti_sust

DATA BEGIN OF ti_val OCCURS 0valid LIKE gb931-validvalseqnr LIKE gb931-valseqnrcondid LIKE gb931-condidcheckid LIKE gb931-checkidsel(1)END OF ti_val

DATA BEGIN OF ti_bdcdata OCCURS 0INCLUDE STRUCTURE bdcdataDATA END OF ti_bdcdata

DATA ti_gb31t TYPE TABLE OF gb31t WITH HEADER LINE

DATA BEGIN OF ti_cimp OCCURS 0enhname LIKE enhobj-enhnameobj_type LIKE enhobj-obj_typeobj_name LIKE enhobj-obj_nameelemusage LIKE enhobj-elemusageenhinclude(40) like ENHINCINX-ENHINCLUDEEND OF ti_cimp

---------------------------------------------------------------------- VARIABLE GLOBALES----------------------------------------------------------------------DATAfunctxt TYPE smp_dyntxtw_tini LIKE sy-timlovg_caracter TYPE cvg_palavra(50) TYPE cvg_inicial LIKE sy-indexvg_conta_aspa TYPE nvg_pname LIKE tfdir-pnamevg_texto(50) TYPE cvg_contador LIKE sy-tfillvg_nivel(2) TYPE n

vg_ini_contagem TYPE c INDICA QUE DEBE SER INICIADO EL CONTADORvg_conta_espaco TYPE n TOTAL DE ESPACIOS ( MAacuteXIMO 2 )

---------------------------------------------------------------------- DEFINICION DE Estructuras y tablas para ALV (FM)----------------------------------------------------------------------DATAwa_cat TYPE slis_fieldcat_alv WA cataacutelogoti_cat TYPE slis_t_fieldcat_alv TI cataacutelogowa_layout TYPE slis_layout_alv WA opciones listati_header TYPE slis_t_listheader TI cabecera listawa_header TYPE slis_listheader WA cabecera listawa_events TYPE slis_alv_event WA eventos listati_events TYPE slis_t_event TI eventos listawa_sort TYPE slis_sortinfo_alv WA sortti_sort TYPE slis_t_sortinfo_alv TI sortwa_print TYPE slis_print_alv WA print

---------------------------------------------------------------------- PARAMETROS----------------------------------------------------------------------

- DATOS OBLIGATORIOSSELECTION-SCREEN BEGIN OF BLOCK bl01 WITH FRAME TITLE tit1

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text2POSITION 20PARAMETERS p_tcode LIKE tstc-tcode TransaccioacutenSELECTION-SCREEN END OF LINE

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text1POSITION 20PARAMETERS p_prog LIKE sy-repid ProgramaSELECTION-SCREEN END OF LINE

SELECTION-SCREEN END OF BLOCK bl01

SELECTION-SCREEN BEGIN OF BLOCK bl02 WITH FRAME TITLE tit2 SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text7POSITION 20PARAMETERS p_ue AS CHECKBOX User-exit

Boton de Exits en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(45) btn USER-COMMAND extVISIBLE LENGTH 12

Boton de Proyectos de Exits en la DYNPROSELECTION-SCREEN PUSHBUTTON 38(45) ext1 USER-COMMAND ext1VISIBLE LENGTH 12

Boton de User-Exits en la DYNPROSELECTION-SCREEN PUSHBUTTON 51(45) ext2 USER-COMMAND ext2VISIBLE LENGTH 12

SELECTION-SCREEN END OF LINE

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text8POSITION 20PARAMETERS p_badi AS CHECKBOX Badis Boton de Interface en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(60) badi USER-COMMAND badiVISIBLE LENGTH 25SELECTION-SCREEN END OF LINE

SELECTION-SCREEN BEGIN OF LINEPOSITION 25PARAMETERS p_handl AS CHECKBOX DEFAULT XCL_EXITHANDLER=gtGET_INSTANCESELECTION-SCREEN COMMENT 30(40) text12SELECTION-SCREEN END OF LINE

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text9POSITION 20PARAMETERS p_bte AS CHECKBOX Bte Boton de Tx FIBF en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(60) bte1 USER-COMMAND bte1VISIBLE LENGTH 1 Boton de Tx Evento en la DYNPROSELECTION-SCREEN PUSHBUTTON 29(60) bte2 USER-COMMAND bte2VISIBLE LENGTH 10 Boton de Tx Proceso en la DYNPROSELECTION-SCREEN PUSHBUTTON 40(60) bte3 USER-COMMAND bte3VISIBLE LENGTH 10

SELECTION-SCREEN END OF LINE

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(19) text14POSITION 20PARAMETERS p_enh AS CHECKBOX Punto de ampliacioacuten

Boton de Tx SENH en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(60) senh USER-COMMAND senhVISIBLE LENGTH 1

Boton de Customer Implementation en la DYNPROSELECTION-SCREEN PUSHBUTTON 29(60) cimp USER-COMMAND cimpVISIBLE LENGTH 24

SELECTION-SCREEN END OF LINE

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text10POSITION 20PARAMETERS p_sust AS CHECKBOX Sustitucioacuten

Boton de Sustitucioacuten en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(45) btn1 USER-COMMAND obbVISIBLE LENGTH 12

Boton de programa sustitucioacuten en la DYNPROSELECTION-SCREEN PUSHBUTTON 38(45) sust USER-COMMAND sustVISIBLE LENGTH 15

SELECTION-SCREEN END OF LINE

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text13POSITION 20PARAMETERS p_val AS CHECKBOX Validacioacuten

Boton de Validacioacuten en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(45) ob28 USER-COMMAND ob28VISIBLE LENGTH 12

Boton de programa sustitucioacuten en la DYNPROSELECTION-SCREEN PUSHBUTTON 38(45) val USER-COMMAND valVISIBLE LENGTH 15

SELECTION-SCREEN END OF LINE

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text11POSITION 20PARAMETERS p_fdex AS CHECKBOX Field-exit

Boton de Field-exit en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(60) btn2 USER-COMMAND fdexVISIBLE LENGTH 28

SELECTION-SCREEN END OF LINE

SELECTION-SCREEN END OF BLOCK bl02

- DATOS OPCIONALESSELECTION-SCREEN BEGIN OF BLOCK bl03 WITH FRAME TITLE tit3

SELECTION-SCREEN BEGIN OF LINE Boton de ALL en la DYNPROSELECTION-SCREEN PUSHBUTTON 18(60) all USER-COMMAND allVISIBLE LENGTH 1 Boton de DAL en la DYNPROSELECTION-SCREEN PUSHBUTTON 21(60) dal USER-COMMAND dalVISIBLE LENGTH 1SELECTION-SCREEN END OF LINE

SELECTION-SCREEN ULINE

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text3POSITION 20PARAMETERS p_incl AS CHECKBOX DEFAULT X IncludesSELECTION-SCREEN END OF LINE

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text4POSITION 20PARAMETERS p_func AS CHECKBOX DEFAULT X Funciones

SELECTION-SCREEN END OF LINE

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text5POSITION 20PARAMETERS p_submit AS CHECKBOX DEFAULT X SubmitSELECTION-SCREEN END OF LINE

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text6POSITION 20PARAMETERS p_nivel(2) TYPE n DEFAULT 04 NivelSELECTION-SCREEN END OF LINE

SELECTION-SCREEN END OF BLOCK bl03

Botoacuten de Marcar todo en el STATUS GUISELECTION-SCREEN FUNCTION KEY 1 Botoacuten de Desmarcar todo en el STATUS GUISELECTION-SCREEN FUNCTION KEY 2 Botoacuten de Breakpoint en el STATUS GUISELECTION-SCREEN FUNCTION KEY 3

----------------------------------------------------------------------- DEFINICIOacuteN DE MACROS-----------------------------------------------------------------------DEFINE icon_create Creo para el botoacuten indicado el icono y los textos correspondientes

call function ICON_CREATEexportingname = amp2text = amp3info = amp4importingresult = amp1exceptionsothers = 0

END-OF-DEFINITION icon_create

----------------------------------------------------------------------- INICIALIZACIOacuteN DE VARIABLES-----------------------------------------------------------------------INITIALIZATION

PERFORM def_text_parameter

PERFORM def_botones

CLEAR ti_gb31tREFRESH ti_gb31t

Obtengo ValidacioacutenSustitucioacutenEventosTextoSELECT INTO TABLE ti_gb31tFROM gb31tWHERE spras EQ sy-langu

----------------------------------------------------------------------- AT SELECTION-SCREEN-----------------------------------------------------------------------

AT SELECTION-SCREEN

CASE sscrfields-ucommWHEN FC01MOVE X TO p_ue p_badi p_bte p_sust p_val p_fdex p_enhWHEN FC02CLEAR p_ue p_badi p_bte p_sust p_val p_fdex p_enhWHEN FC03PERFORM breakpointWHEN EXTPERFORM visualizar_ampliacionWHEN EXT1PERFORM visualizar_proyectoWHEN EXT2PERFORM visualizar_fm_exitWHEN BADIPERFORM visualizar_interfaceWHEN OBBCALL TRANSACTION OBBHWHEN OB28CALL TRANSACTION OB28WHEN SUST OR VALPERFORM visualizar_programaWHEN FDEXSUBMIT rsmodprf AND RETURNWHEN BTE1CALL TRANSACTION FIBFWHEN BTE2PERFORM cargar_bte USING EWHEN BTE3PERFORM cargar_bte USING PWHEN SENHSUBMIT sapmsenh VIA SELECTION-SCREENAND RETURNWHEN CIMPPERFORM visualizar_imp_enhWHEN ALLMOVE X TO p_incl p_func p_submitWHEN DALCLEAR p_incl p_func p_submitWHEN OTHERS Do Nothing ENDCASE

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_prog

PERFORM repid_f4

---------------------------------------------------------------------- INICIO----------------------------------------------------------------------START-OF-SELECTION

GET TIME FIELD w_tini

- CONSISTENCIAS DE LOS PARAMETROSPERFORM consisti_parametros

- INICIALIZA TABLAPERFORM inicializa_tabela

- VERIFICA SI EN EL PROGRAMA EXISTE ALGUN INCLUDE FUNCION O SUBMITPERFORM verifica_include_funcao_submit

- ANALISA LOS INCLUDES Y BUSCA POR USER-EXIT BADIS Y BTEPERFORM busca_user_exit_badi_bte

- ANALISA LOS INCLUDES Y BUSCA LOS FIELD-EXITSPERFORM buscar_field_exit

- OBTENGO LOS EXITs DE LA TRANSACCIOacuteNPERFORM buscar_user_exit

- OBTENGO LAS PUNTOS DE AMPLIACIOacuteNPERFORM buscar_enh

- OBTENGO LAS SUSTITUCIONESPERFORM buscar_sustituciones

- OBTENGO LAS VALIDACIONESPERFORM buscar_validaciones

- CARGO LOS BREAKPOINTSPERFORM cargar_break

- VISUALIZA LAS AMPLIACIONES ENCONTRADASPERFORM exibe_user_exit

---------------------------------------------------------------------- FIN----------------------------------------------------------------------END-OF-SELECTION

amp---------------------------------------------------------------------amp Form BUSCA_USER_EXIT_BADI_BTEamp--------------------------------------------------------------------- Busca EXITs BADIs y BTE en el coacutedigo fuente----------------------------------------------------------------------FORM busca_user_exit_badi_bte

- VERIFICA SI EN LOS INCLUDES SELECIONADOS EXISTEN EXITSLOOP AT ti_includes

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

- BORRA LA TABLA INTERNAREFRESH ti_programa

- REALIZA LECTURA DE INCLUDE ALMACENANDO EN TABLA INTERNAREAD REPORT ti_includes-nome INTO ti_programa

LOOP AT ti_programa

IF p_ue EQ XPERFORM buscar_exitPERFORM busca_enhancementsENDIF

IF p_badi EQ XPERFORM buscar_badiENDIF

IF p_bte EQ XPERFORM buscar_bteENDIF

IF p_enh EQ XPERFORM buscar_punto_ampliacionENDIF

ENDLOOPENDLOOP

ENDFORM BUSCA_USER_EXIT_BADI_BTE

amp---------------------------------------------------------------------amp Form BUSCA_ENHANCEMENTSamp--------------------------------------------------------------------- Busca las llamadas a los USER-EXIT----------------------------------------------------------------------FORM busca_enhancements

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE EN ALGUN ENHANCEMENTSEARCH ti_programa-cf FOR c_enhance- SE ENCONTRO EL ENHANCEMENT Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentarioCLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF

ENDFORM BUSCA_ENHANCEMENTS

amp---------------------------------------------------------------------amp Form EXIBE_USER_EXITamp--------------------------------------------------------------------- Muestra los datos----------------------------------------------------------------------FORM exibe_user_exit

PERFORM armar_alv

PERFORM mostrar_listado

ENDFORM EXIBE_USER_EXIT

amp---------------------------------------------------------------------amp Form PROCURA_INCLUDEamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_include

CLEAR vg_palavra

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN INCLUDESEARCH ti_programa-cf FOR c_include- SE ENCONTRO EN EL INCLUDE Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN STRUCTURESEARCH ti_programa-cf FOR c_struct

IF sy-subrc IS INITIALEXITENDIF

- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DEL INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF NOT vg_caracter IS INITIAL- VERIFICA SI NO ES FIN DE COMANDOIF vg_caracter EQ c_pontoEXITENDIF- ARMA PALABRACONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACIONTRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_includeCLEAR vg_palavraENDIFENDIFENDDO- GRABA NOMBRE DEL INCLUDE PARA FUTURA BUSQUEDA POR USER EXITREAD TABLE ti_includes WITH KEY nome = vg_palavraIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_palavra TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIF

ENDIF

ENDFORM PROCURA_INCLUDE

amp---------------------------------------------------------------------amp Form PROCURA_FUNCAOamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_funcao

CLEAR vg_conta_aspavg_palavra

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA FUNCIONSEARCH ti_programa-cf FOR c_funcao_2- SE ENCONTRO UNA FUNCION Y LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DE LA INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF NOT vg_caracter IS INITIAL- VERIFICA SI NO ES FIN DE COMANDOIF vg_caracter EQ c_aspaADD 1 TO vg_conta_aspaIF vg_conta_aspa EQ 2EXITENDIFENDIF- ARMA PALABRACONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACIONTRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_funcao_1CLEAR vg_palavraENDIFENDIFENDDO- BUSCA NOMBRE DE LA FUNCION PARA FUTURA BUSQUEDA POR USER EXITCLEAR vg_pnameSELECT SINGLE pnameINTO vg_pnameFROM tfdirWHERE funcname EQ vg_palavraIF sy-subrc EQ 0

READ TABLE ti_includes WITH KEY nome = vg_pnameIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_pname TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIF

ENDIF

ENDIF

ENDFORM PROCURA_FUNCAO

amp---------------------------------------------------------------------amp Form VERIFICA_INCLUDE_FUNCAO_SUBMITamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM verifica_include_funcao_submit

CHECK p_ue IS NOT INITIAL OR p_badi IS NOT INITIALOR p_bte IS NOT INITIAL OR p_enh IS NOT INITIAL

LOOP AT ti_includes

ADD 1 TO vg_contadorDESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfillMOVE ti_includes-nivel TO vg_nivelADD 1 TO vg_nivel

- BORRA TABLA INTERNAREFRESH ti_programa

- REALIZA LECTURA DE INCLUDEFUNCION ALMACENANDO EN TABLA INTERNAREAD REPORT ti_includes-nome INTO ti_programa

LOOP AT ti_programa

- PROCURA POR INCLUDESIF p_incl EQ c_xPERFORM procura_includeENDIF- PROCURA POR FUNCIONIF p_func EQ c_xPERFORM procura_funcaoENDIF- PROCURA POR SUBMITIF p_submit EQ c_xPERFORM procura_submitENDIF

ENDLOOP

ENDLOOP

ENDFORM VERIFICA_INCLUDE_FUNCAO_SUBMIT

amp---------------------------------------------------------------------amp Form EVITAR_TIME_OUTamp--------------------------------------------------------------------- Evito el TIME OUT visualizando un mensaje----------------------------------------------------------------------FORM evitar_time_out USING p_tfill LIKE sy-tfill

DATAvl_total(10) TYPE n

vl_atual(10) TYPE nl_tout LIKE sy-timlol_time(10) TYPE c

GET TIME FIELD l_tout

l_tout = l_tout - w_tini

MOVEp_tfill TO vl_totalvg_contador TO vl_atual

SHIFT vl_total LEFT DELETING LEADING 0SHIFT vl_atual LEFT DELETING LEADING 0WRITE l_tout TO l_time

CONCATENATE Tpo l_time Total vl_total Actual vl_atualINTO vg_textoSEPARATED BY space

CALL FUNCTION SAPGUI_PROGRESS_INDICATOREXPORTINGtext = vg_texto

ENDFORM EVITAR_TIME_OUT

amp---------------------------------------------------------------------amp Form PROCURA_SUBMITamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_submit

CLEAR vg_conta_espaco vg_palavra vg_ini_contagem

- VERIFICA SI LA LINEA DEL PROGRAMA EXISTE ALGUN INCLUDESEARCH ti_programa-cf FOR c_submit- SE ENCONTRO EN EL INCLUDE Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DEL INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF vg_ini_contagem EQ c_x AND vg_caracter IS INITIALADD 1 TO vg_conta_espacoENDIF

IF NOT vg_caracter IS INITIALMOVE c_x TO vg_ini_contagemIF vg_caracter EQ c_pontoEXITENDIF- ARMA PALABRAIF vg_conta_espaco LT 2CONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACION

TRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_submitCLEAR vg_palavraENDIFELSEEXITENDIFENDIFENDDO- BUSCA NOMBRE DE LA FUNCION PARA FUTURA BUSQUEDA POR USER EXITREAD TABLE ti_includes WITH KEY nome = vg_palavraIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_palavra TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIFENDIF

ENDFORM PROCURA_SUBMIT

amp---------------------------------------------------------------------amp Form CONSISTI_PARAMETROSamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM consisti_parametros

IF p_nivel IS INITIALMOVE 1 TO p_nivelENDIF

IF p_prog IS INITIAL AND p_tcode IS INITIAL- EL NOMBRE DEL PROGRAMA Y EL NOMBRE DE LA TRANSACCION NO PUEDEN SER- NULOS UNO DE ELLOS DEBE SER INFORMADOMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e01STOPENDIF

IF NOT p_prog IS INITIAL AND NOT p_tcode IS INITIAL- SE SOLICITA AL USUARIO QUE INFORME NOMBRE DE PROGRAMA O TRANSACCIONMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e02STOPENDIF

IF p_ue IS INITIAL AND p_badi IS INITIAL AND p_bte IS INITIALAND p_sust IS INITIAL AND p_val IS INITIAL AND p_fdex IS INITIALAND p_enh IS INITIAL- SE SOLICITA AL USUARIO QUE INFORME UN TIPO DE MEJORAMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e03STOPENDIF

ENDFORM CONSISTI_PARAMETROS

amp---------------------------------------------------------------------

amp Form INICIALIZA_TABELAamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM inicializa_tabela

DATAe_tstc TYPE tstcl_tcode TYPE sy-tcode

REFRESH ti_includes

IF NOT p_prog IS INITIAL

MOVE p_prog TO ti_includes-nome0 TO ti_includes-nivelAPPEND ti_includes

- BUSCO EL PROGRAMAREAD REPORT ti_includes-nome INTO ti_programa

IF sy-subrc EQ 0REFRESH ti_programaELSE- EL PROGRAMA NO EXISTEMESSAGE s893(pz) WITH El programa p_prog no existeSTOPENDIF

ELSEIF NOT p_tcode IS INITIAL

SELECT SINGLE FROM tstcWHERE tcode EQ p_tcode

IF sy-subrc EQ 0

IF tstc-pgmna IS NOT INITIALMOVE tstc-pgmna TO ti_includes-nome0 TO ti_includes-nivelAPPEND ti_includesELSE Se trata de una transaccioacuten de paraacutemetros Obtengo la transaccioacuten asociadaCALL FUNCTION RS_TRANSACTION_SINGLE_GETEXPORTINGparameter_tcode = p_tcodeIMPORTINGtcode = l_tcode

SELECT SINGLE INTO e_tstcFROM tstcWHERE tcode EQ l_tcode

IF sy-subrc EQ 0MOVE e_tstc-pgmna TO ti_includes-nome0 TO ti_includes-nivel

APPEND ti_includesELSE- LA TRANSACCIOacuteN NO EXISTEMESSAGE s893(pz) WITH La transaccioacuten p_tcode no existeENDIFENDIFELSE- LA TRANSACCIOacuteN NO EXISTEMESSAGE s893(pz) WITH La transaccioacuten p_tcode no existeSTOPENDIFENDIF

ENDFORM INICIALIZA_TABELA

amp---------------------------------------------------------------------amp Form armar_alvamp--------------------------------------------------------------------- Armo el ALV----------------------------------------------------------------------FORM armar_alv

DATAl_repid TYPE sy-repid

MOVE sy-repid TO l_repid

CALL FUNCTION REUSE_ALV_BLOCK_LIST_INITEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMAND

IF p_ue IS NOT INITIALPERFORM construir_catalogo_exitPERFORM definir_layout USING TI_USER_EXITCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGEPERFORM sort TABLES ti_sortUSING TI_USER_EXIT

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_USER_EXITit_events = ti_eventsit_sort = ti_sorti_text = User-exitTABLESt_outtab = ti_user_exitEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

PERFORM construir_catalogo_uexitPERFORM definir_layout USING TI_FINAL

CHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_UEXITPERFORM sort TABLES ti_sortUSING TI_FINAL

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FINALit_events = ti_eventsit_sort = ti_sorti_text = User-exit TxCMODTABLESt_outtab = ti_finalEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_badi IS NOT INITIALPERFORM construir_catalogo_badiPERFORM definir_layout USING TI_BADICHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BADIPERFORM sort TABLES ti_sortUSING TI_BADI

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_BADIit_events = ti_eventsit_sort = ti_sorti_text = BadisTABLESt_outtab = ti_badiEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_bte IS NOT INITIALPERFORM construir_catalogo_btePERFORM definir_layout USING TI_BTECHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BTEPERFORM sort TABLES ti_sortUSING TI_BTE

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layout

it_fieldcat = ti_cati_tabname = TI_BTEit_events = ti_eventsit_sort = ti_sorti_text = BTETABLESt_outtab = ti_bteEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_enh IS NOT INITIALPERFORM construir_catalogo_enhPERFORM definir_layout USING TI_ENHCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHPERFORM sort TABLES ti_sortUSING TI_ENH

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHit_events = ti_eventsit_sort = ti_sorti_text = ENHTABLESt_outtab = ti_enhEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

PERFORM construir_catalogo_enhobjPERFORM definir_layout USING TI_ENHOBJCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHOBJPERFORM sort TABLES ti_sortUSING TI_ENHOBJ

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHOBJit_events = ti_eventsit_sort = ti_sorti_text = ENHOBJTABLESt_outtab = ti_enhobjEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_sust IS NOT INITIALPERFORM construir_catalogo_sustPERFORM definir_layout USING TI_SUSTCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_SUSTPERFORM sort TABLES ti_sortUSING TI_SUST

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_SUSTit_events = ti_eventsit_sort = ti_sorti_text = SustitucionesTABLESt_outtab = ti_sustEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_val IS NOT INITIALPERFORM construir_catalogo_valPERFORM definir_layout USING TI_VALCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_VALPERFORM sort TABLES ti_sortUSING TI_VAL

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_VALit_events = ti_eventsit_sort = ti_sorti_text = ValidacionesTABLESt_outtab = ti_valEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_fdex IS NOT INITIALPERFORM construir_catalogo_fdexPERFORM definir_layout USING TI_FDEXCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_FDEX

PERFORM sort TABLES ti_sortUSING TI_FDEX

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FDEXit_events = ti_eventsit_sort = ti_sorti_text = Field-exitTABLESt_outtab = ti_fdexEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

ENDFORM armar_alv

amp---------------------------------------------------------------------amp Form construir_catalogo_EXITamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_exit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_USER_EXITi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03

CF X c_text_04

ENDFORM construir_catalogo_EXIT

amp---------------------------------------------------------------------amp Form asignar_campo_a_catalogoamp--------------------------------------------------------------------- Asignar campo al catalogo ALV----------------------------------------------------------------------FORM asignar_campo_a_catalogo TABLES pt_cat STRUCTURE wa_catUSING p_fieldname LIKE wa_cat-fieldnamep_key LIKE wa_cat-keyp_col_pos TYPE cp_fix_column LIKE wa_cat-fix_columnp_hotspot LIKE wa_cat-hotspotp_do_sum LIKE wa_cat-do_sump_input LIKE wa_cat-inputp_checkbox LIKE wa_cat-checkboxp_no_out LIKE wa_cat-no_outp_icon LIKE wa_cat-iconp_reptext_ddic LIKE wa_cat-reptext_ddic

STATICS l_col_pos LIKE sy-cucol

Asignar atributos de campo en el catalogo de cabecera ALVCLEAR wa_catREAD TABLE pt_cat INTO wa_catWITH KEY fieldname = p_fieldname

CHECK sy-subrc EQ 0

IF NOT p_reptext_ddic IS INITIALwa_cat-seltext_l = wa_cat-seltext_m =wa_cat-seltext_s = wa_cat-reptext_ddic = p_reptext_ddicENDIF

IF p_col_pos EQ X Inicializo el conteo para ordenar las columnasl_col_pos = 1ELSEADD 1 TO l_col_posENDIF

wa_cat-fieldname = p_fieldnamewa_cat-key = p_keywa_cat-col_pos = l_col_poswa_cat-fix_column = p_fix_columnwa_cat-hotspot = p_hotspotwa_cat-do_sum = p_do_sumwa_cat-edit = wa_cat-input = p_inputwa_cat-checkbox = p_checkboxwa_cat-no_out = p_no_outwa_cat-icon = p_icon

MODIFY pt_cat FROM wa_cat INDEX sy-tabix

ENDFORM asignar_campo_a_catalogo

amp---------------------------------------------------------------------amp Form definir_layoutamp--------------------------------------------------------------------- Definir atributos del layout de reporte----------------------------------------------------------------------FORM definir_layout USING p_table TYPE slis_layout_alv-box_tabnameCHANGING p_layout TYPE slis_layout_alv

CLEAR p_layout

IF p_table NE TI_CIMP Marco el campo para la seleccioacutenp_layout-box_fieldname = SELp_layout-box_tabname = p_tableENDIFp_layout-zebra = Xp_layout-colwidth_optimize = Xp_layout-no_vline = p_layout-no_colhead = p_layout-lights_condense = Xp_layout-detail_popup = Xp_layout-detail_initial_lines = Xp_layout-flexible_key = p_layout-key_hotspot = p_layout-confirmation_prompt = X

ENDFORM definir_layout

amp---------------------------------------------------------------------amp Form construir_eventosamp--------------------------------------------------------------------- Asignar eventos soportados----------------------------------------------------------------------FORM construir_eventos USING p_form LIKE wa_events-formDATAl_type(1) TYPE n

REFRESH ti_eventsCLEAR wa_events

ALV Simple Block appendl_type = 2

Buscar secciones para eventosCALL FUNCTION REUSE_ALV_EVENTS_GETEXPORTINGi_list_type = l_typeIMPORTINGet_events = ti_events

Leer evento TOP_OF_PAGEREAD TABLE ti_events WITH KEY name = slis_ev_top_of_pageINTO wa_events Asignar Rutina FORM TOP_OF_PAGE a eventoIF sy-subrc = 0MOVE p_form TO wa_events-formMODIFY ti_events FROM wa_events INDEX sy-tabixENDIF

ENDFORM construir_eventos

amp---------------------------------------------------------------------amp Form top_of_pageamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_user_exitWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUser-exit

ENDFORM top_of_page

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_UEXITamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_uexit

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_finalWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUSER-EXITs TxSMOD

ENDFORM TOP_OF_PAGE_UEXIT

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_FDEXamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_fdex

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_fdexWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incFIELD-EXITs

ENDFORM TOP_OF_PAGE_FDEX

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BADIamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_badi

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_badiWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBADIs

ENDFORM TOP_OF_PAGE_BADI

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BTEamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_bte

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_bteWRITE sy-tfill TO l_tfill_cant

CONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBTEs

ENDFORM TOP_OF_PAGE_BTE

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enh

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_enhWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENH

amp---------------------------------------------------------------------amp Form sortamp--------------------------------------------------------------------- Creo el sort del ALV (FM)---------------------------------------------------------------------- --gtPT_sort Tabla --gtP_tabname Nombre de la tabla----------------------------------------------------------------------FORM sort TABLES pt_sortUSING p_tabname TYPE any

CLEAR pt_sort wa_sortREFRESH pt_sort

CASE p_tabnameWHEN TI_SUST

wa_sort-fieldname = SUBSTIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = SUBSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = CONSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN TI_VAL

wa_sort-fieldname = VALIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = VALSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN TI_ENHOBJ

wa_sort-fieldname = ENHNAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = VERSIONwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN OTHERS

IF p_tabname NE TI_FINAL

wa_sort-fieldname = TIPOwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

IF p_tabname NE TI_FDEX

wa_sort-fieldname = NIVELwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = PROGRAMAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = LINEAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

ENDIF

ELSE

wa_sort-fieldname = NAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = MEMBERwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sortENDIFENDCASE

ENDFORM sort

amp---------------------------------------------------------------------amp Form mostrar_listadoamp--------------------------------------------------------------------- Mostrar listado ALV----------------------------------------------------------------------FORM mostrar_listado

wa_print-reserve_lines = 2

CALL FUNCTION REUSE_ALV_BLOCK_LIST_DISPLAY

EXPORTINGis_print = wa_printEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM mostrar_listado

amp---------------------------------------------------------------------amp Form user_commandamp--------------------------------------------------------------------- Evaluar acciones del usuario----------------------------------------------------------------------FORM user_command USING ucomm LIKE sy-ucommsfields TYPE slis_selfield

DATA l_break TYPE c

Rescatar el registro seleccionadoCASE sfields-tabnameWHEN TI_USER_EXITREAD TABLE ti_user_exit INDEX sfields-tabindexWHEN TI_BADIREAD TABLE ti_badi INDEX sfields-tabindexWHEN TI_BTEREAD TABLE ti_bte INDEX sfields-tabindexWHEN TI_ENHREAD TABLE ti_enh INDEX sfields-tabindexWHEN TI_ENHOBJREAD TABLE ti_enhobj INDEX sfields-tabindexWHEN TI_FDEXREAD TABLE ti_fdex INDEX sfields-tabindexWHEN TI_FINALREAD TABLE ti_final INDEX sfields-tabindexWHEN TI_SUSTREAD TABLE ti_sust INDEX sfields-tabindexWHEN TI_VALREAD TABLE ti_val INDEX sfields-tabindexWHEN TI_CIMPREAD TABLE ti_cimp INDEX sfields-tabindexENDCASE

Seleccion de opcionCASE ucomm DOUBLE CLICKWHEN ampIC1 Evaluar valor de campo seleccionadoCHECK NOT sfields-value IS INITIAL

CASE sfields-tabnameWHEN TI_USER_EXIT USER-EXITIF ti_user_exit-tipo EQ sfields-value(4)SEARCH ti_user_exit-cf FOR c_enhanceCHECK sy-subrc EQ 0PERFORM visualizar_exit USING ti_user_exit-programati_user_exit-cf

ELSEIF ti_user_exit-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_user_exit-programati_user_exit-lineaMOVE X TO l_breakELSEIF ti_user_exit-break EQ sfields-value(4)OR ti_user_exit-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_user_exit-programati_user_exit-lineati_user_exit-breakMOVE X TO l_breakENDIF

WHEN TI_FINAL USER-EXIT Tx CMODIF ti_final-name EQ sfields-valueCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = ti_final-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSEIF ti_final-include EQ sfields-valuePERFORM visualizar_linea USING ti_final-programa1MOVE X TO l_breakENDIF

WHEN TI_BADI BadiIF ti_badi-tipo EQ sfields-value(4)PERFORM visualizar_badi USING ti_badi-cfELSEIF ti_badi-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_badi-programati_badi-lineaMOVE X TO l_breakELSEIF ti_badi-break EQ sfields-value(4)OR ti_badi-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_badi-programati_badi-lineati_badi-breakMOVE X TO l_breakENDIF

WHEN TI_BTE BTEIF ti_bte-tipo EQ sfields-value(4)PERFORM fibf USING ti_bte-cfELSEIF ti_bte-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_bte-programati_bte-lineaMOVE X TO l_breakELSEIF ti_bte-break EQ sfields-value(4)OR ti_bte-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_bte-programati_bte-linea

ti_bte-breakMOVE X TO l_breakENDIF

WHEN TI_ENH Punto de ampliacioacutenIF ti_enh-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_enh-programati_enh-lineaMOVE X TO l_breakELSEIF ti_enh-tipo EQ sfields-value(4)PERFORM bi_se18 USING ti_enh-cfENDIF

WHEN TI_ENHOBJ Punto de ampliacioacutenIF ti_enhobj-enhname EQ sfields-value(30)PERFORM bi_se19 USING ti_enhobj-enhnameENDIF

WHEN TI_SUST SustitucionesIF ti_sust-substid EQ sfields-value(7) ORti_sust-subseqnr EQ sfields-value(3)PERFORM visualizar_sust USING ti_sust-substidti_sust-subseqnrENDIF

WHEN TI_VAL ValidacionesIF ti_val-valid EQ sfields-value(7) ORti_val-valseqnr EQ sfields-value(3)PERFORM visualizar_val USING ti_val-validti_val-valseqnrENDIF

WHEN TI_FDEX Field-exitIF ti_fdex-tipo EQ sfields-valueSUBMIT rsmodprf AND RETURNELSEIF ti_fdex-cf(60) EQ sfields-value Visualizo el field-exitCALL FUNCTION RS_FUNCTION_SHOWEXPORTINGfuncname = ti_fdex-cf

CALL FUNCTION RS_NAVIGATION_MONITORENDIF

WHEN TI_CIMP Customer implementation

CASE sfields-fieldnameWHEN ENHNAMEPERFORM bi_se19 USING ti_cimp-enhnameWHEN ENHINCLUDEPERFORM visualizar_enh_cf USING ti_cimp-enhinclude

WHEN OTHERS DO NOTHING ENDCASE

WHEN OTHERS DO NOTHING ENDCASE

WHEN OTHERS DO NOTHING ENDCASE

IF l_break IS NOT INITIAL AND sfields-tabname NE TI_CIMPWAIT UP TO 1 SECONDSPERFORM cargar_breakENDIFsfields-refresh = X

ENDFORM user_command

amp---------------------------------------------------------------------amp Form visualizar_lineaamp--------------------------------------------------------------------- Visualizo la linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_linea USING p_programa TYPE sy-repidp_linea

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_programaobject_type = c_typeposition = p_lineaEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM visualizar_linea

amp---------------------------------------------------------------------amp Form buscar_exitamp--------------------------------------------------------------------- Buscar USER-EXIT----------------------------------------------------------------------FORM buscar_exit

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN USER-EXITSEARCH ti_programa-cf FOR c_user_exit- SE ENCONTRO UN USER-EXIT Y SE VERIFICA SI LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS PERFORMSEARCH ti_programa-cf FOR c_performCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LAS ASIGNACIONESSEARCH ti_programa-cf FOR c_igualCHECK sy-subrc NE 0

CLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INIacuteCIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF

ENDFORM buscar_exit

amp---------------------------------------------------------------------amp Form buscar_badiamp--------------------------------------------------------------------- Buscar BADI----------------------------------------------------------------------FORM buscar_badi

DATAl_subrc LIKE sy-subrc

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BADISEARCH ti_programa-cf FOR c_badi- SE ENCONTRO UNA BADI Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

SEARCH ti_programa-cf FOR c_includeIF sy-subrc NE 0CLEAR l_subrcSEARCH ti_programa-cf FOR c_methodIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_funcao_2IF sy-subrc NE 0SEARCH ti_programa-cf FOR c_performIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_type_refIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_formMOVE 4 TO l_subrcENDIFENDIFENDIFENDIF

IF l_subrc EQ 0CLEAR ti_badi

- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIFELSECHECK p_handl IS NOT INITIAL- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA INSTANCIA DE- UNA BADISEARCH ti_programa-cf FOR c_handler- SE ENCONTRO UNA INSTANCIA DE IMPLEMENACIOacuteN Y SE VERIFICA SI LA LINEA- NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

SEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0CLEAR ti_badi- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIF

ENDFORM buscar_badi

amp---------------------------------------------------------------------amp Form buscar_bteamp--------------------------------------------------------------------- Buscar BTE----------------------------------------------------------------------FORM buscar_bte

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OPEN_FI_PERFORM

- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endform

CHECK sy-subrc NE 0

CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte1- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OUTBOUND_CALL

- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0

CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF

ENDFORM buscar_bte

amp---------------------------------------------------------------------amp Form repid_f4amp--------------------------------------------------------------------- Ejecuto el F4 para buscar programas----------------------------------------------------------------------FORM repid_f4

CALL FUNCTION REPOSITORY_INFO_SYSTEM_F4EXPORTINGobject_type = PROGobject_name = p_progsuppress_selection = XIMPORTINGobject_name_selected = p_progEXCEPTIONS

cancel = 1wrong_type = 2OTHERS = 3

ENDFORM repid_f4

amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf

DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

SEARCH p_cf FOR 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 INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

READ TABLE lt_cf INDEX 4

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

CHECK sy-subrc IS INITIAL

Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten

textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer

CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4

IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF

WHEN OTHERS Do Nothing ENDCASE

ENDFORM visualizar_badi

amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf

DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

CLEAR d010inc modsap modact

Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid

IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF

SEARCH p_cf FOR c_enhance

CHECK sy-subrc IS INITIAL

REFRESH lt_cf

l_cf = 500 - sy-fdpos

MOVE p_cf+sy-fdpos(l_cf) TO l_linea

SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3

TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS

Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _

Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit

CHECK sy-subrc IS INITIAL

Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM

modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3

ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname

CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ENDIF

ENDFORM visualizar_exit

amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit

DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo

DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe

DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE

CHECK p_fdex IS NOT INITIAL

CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe

MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex

IF p_prog IS NOT INITIAL

MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF

Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog

LOOP AT lt_d020s

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

REFRESH lt_d021s

Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4

Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X

SEARCH lt_d021s-fnam FOR -

IF sy-subrc IS INITIAL

MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum

Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname

APPEND lt_campo

ENDIF

ENDLOOPENDLOOP

CHECK lt_campo[] IS NOT INITIAL

SORT lt_campo BY repid dnum tabname fieldname

DELETE ADJACENT DUPLICATES FROM lt_campo

Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname

SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l

LOOP AT lt_dd03l

CLEAR tddir tddirs

SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname

CHECK sy-subrc IS INITIAL

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog

CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF

Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf

IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF

READ TABLE lt_fe WITH KEY cf = lt_fe-cf

CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP

LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex

ENDLOOP

ENDFORM buscar_field_exit

amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf

DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c

SEARCH p_cf FOR c_bte

IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ELSE

SEARCH p_cf FOR c_bte1

CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ENDIF

IF l_tipo IS NOT INITIAL

PERFORM visualizar_bte USING l_tipol_linea

ELSECALL TRANSACTION FIBFENDIF

ENDFORM fibf

amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT

EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM breakpoint

amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_badi

amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE

i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_bte

amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X TIPO X X c_text_05CF X c_text_04

ENDFORM construir_catalogo_FDEX

amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc

DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

CHECK lt_break[] IS NOT INITIAL

IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix

MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF

IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix

MOVEti_badi-linea TO l_lineti_badi-programa TO l_program

READ TABLE lt_break INTO wa_break

WITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF

IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix

MOVEti_bte-linea TO l_lineti_bte-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF

ENDFORM cargar_break

amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

DATAl_tabix TYPE sy-tabix

l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

SELECT SINGLE FROM d010incWHERE include = p_programa

IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF

MOVEp_linea TO l_linep_programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM asignar_break

amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit

IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF

PERFORM get_objects Get Objects

ENDFORM buscar_user_exit

amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects

DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area

DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix

SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog

IF sy-subrc = 0

SORT ti_tadir BY obj_name devclass

SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass

IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF

- Get UserExit namesLOOP AT ti_jtab

SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E

APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area

l_fname = ti_final-member

CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include

LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP

CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP

ENDFORM get_objects

amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X

ENDFORM construir_catalogo_uexit

amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------

FORM visualizar_ampliacion

DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF

SELECT SINGLE FROM modsapWHERE member EQ l_member

IF sy-subrc IS INITIAL

Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member

ENDIF

ENDFORM visualizar_ampliacion

amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea

RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs

REFRESH r_event r_procs

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event

SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs

SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE

ENDFORM visualizar_bte

amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE

----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c

DATAl_linea(500) TYPE c

DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

MOVE lt_fields-value TO l_linea

PERFORM visualizar_bte USING p_tipol_linea

ENDFORM cargar_bte

amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface

DATAl_linea(500) TYPE c

DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE

InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF

ENDFORM visualizar_interface

amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones

CHECK p_sust IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922

ENDFORM buscar_sustituciones

amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST

ENDFORM construir_catalogo_sust

amp---------------------------------------------------------------------

amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones

ENDFORM TOP_OF_PAGE_SUST

amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4

CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_sust

amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones

CHECK p_val IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931

ENDFORM buscar_validaciones

amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID

ENDFORM construir_catalogo_val

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones

ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2

CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_val

amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto

DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF

SELECT SINGLE FROM modsapWHERE name EQ l_name

IF sy-subrc IS INITIAL

MOVE l_name TO l_member

SELECT SINGLE FROM modactWHERE member EQ l_member

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF

ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF

ENDFORM visualizar_proyecto

amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel

APPEND ti_enh

ENDIFENDIFENDIF

ENDFORM buscar_punto_ampliacioacuten

amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_enh

amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh

DATA l_obj_name TYPE enhobj-obj_name

DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name

CHECK p_enh IS NOT INITIAL

IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF

REFRESH lt_obj_name

LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP

SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name

ENDFORM buscar_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X

ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME

ENDFORM construir_catalogo_enhobj

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENHOBJ

amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM bi_se19

amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro

CLEAR ti_bdcdatati_bdcdata-program = program

ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata

ENDFORM BDC_DYNPRO

amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval

CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata

ENDFORM BDC_FIELD

amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa

DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)

CHECK ti_gb31t[] IS NOT INITIAL

DO

Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2

IF l_exit EQ XEXITENDIF

CHECK l_exit IS INITIAL

Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND

CHECK l_boolpool IS NOT INITIAL

MOVE l_boolpool TO l_repid

Visualizo el programaPERFORM visualizar_linea USING l_repid01

ENDDO

ENDFORM visualizar_programa

amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope

STATICS l_flag TYPE c

DATA l_tit(65) TYPE c

CHECK l_flag IS INITIAL

l_flag = X

WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline

4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM texto_tope

amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf

DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off

CHECK l_off IS NOT INITIAL

ADD 7 TO l_offl_cf = 500 - l_off

SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_enhspotname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1

invalid_object_type = 2OTHERS = 3

ENDFORM bi_se18

amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit

DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE

DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE

MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE

MOVE lt_fields-value TO l_nameENDIF

Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_

LOOP AT lt_tfdir

CLEARl_group l_include l_namespace l_str_area

l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl

IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl

CHECK sy-subrc IS INITIAL

Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP

CHECK l_flag IS INITIAL

La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value

ENDFORM visualizar_fm_exit

amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter

tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten

ENDFORM def_text_parameter

amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones

Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt

Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt

Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt

icon_create RESULT name text infoicon_create

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 3: buscar_ampliaciones FOROSAP

linea(10) TYPE n cf LIKE rssource-linecf(500)nivel(2) TYPE nbreak LIKE icon-idsel(1)END OF ti_user_exit

DATA BEGIN OF ti_badi OCCURS 0programa LIKE sy-repidtipo(4)linea(10) TYPE n cf LIKE rssource-linecf(500)nivel(2) TYPE nbreak LIKE icon-idsel(1)END OF ti_badi

DATA BEGIN OF ti_bte OCCURS 0programa LIKE sy-repidtipo(4)linea(10) TYPE n cf LIKE rssource-linecf(500)nivel(2) TYPE nbreak LIKE icon-idsel(1)END OF ti_bte

DATA BEGIN OF ti_enh OCCURS 0programa LIKE sy-repidtipo(4)linea(10) TYPE n cf LIKE rssource-linecf(500)nivel(2) TYPE nbreak LIKE icon-idsel(1)END OF ti_enh

DATA BEGIN OF ti_enhobj OCCURS 0enhname LIKE enhobj-enhnameversion LIKE enhobj-versionobj_type LIKE enhobj-obj_typeobj_name LIKE enhobj-obj_namesel(1)END OF ti_enhobj

DATA BEGIN OF ti_fdex OCCURS 0tipo(4) cf LIKE rssource-linecf(500)sel(1)END OF ti_fdex

DATAti_tadir TYPE STANDARD TABLE OF x_tadir WITH HEADER LINE

ti_jtab TYPE STANDARD TABLE OF x_slog WITH HEADER LINE

DATA BEGIN OF ti_final OCCURS 0name LIKE modsap-namemember LIKE modsap-memberinclude LIKE rs38l-include (15) Include namestext LIKE tftit-stextprograma LIKE rs38l-includesel(1)END OF ti_final

DATA BEGIN OF ti_sust OCCURS 0substid LIKE gb922-substidsubseqnr LIKE gb922-subseqnrconseqnr LIKE gb922-conseqnrsubstab LIKE gb922-substabsubsfield LIKE gb922-subsfieldsubsval LIKE gb922-subsvalexitsubst LIKE gb922-exitsubstsel(1)END OF ti_sust

DATA BEGIN OF ti_val OCCURS 0valid LIKE gb931-validvalseqnr LIKE gb931-valseqnrcondid LIKE gb931-condidcheckid LIKE gb931-checkidsel(1)END OF ti_val

DATA BEGIN OF ti_bdcdata OCCURS 0INCLUDE STRUCTURE bdcdataDATA END OF ti_bdcdata

DATA ti_gb31t TYPE TABLE OF gb31t WITH HEADER LINE

DATA BEGIN OF ti_cimp OCCURS 0enhname LIKE enhobj-enhnameobj_type LIKE enhobj-obj_typeobj_name LIKE enhobj-obj_nameelemusage LIKE enhobj-elemusageenhinclude(40) like ENHINCINX-ENHINCLUDEEND OF ti_cimp

---------------------------------------------------------------------- VARIABLE GLOBALES----------------------------------------------------------------------DATAfunctxt TYPE smp_dyntxtw_tini LIKE sy-timlovg_caracter TYPE cvg_palavra(50) TYPE cvg_inicial LIKE sy-indexvg_conta_aspa TYPE nvg_pname LIKE tfdir-pnamevg_texto(50) TYPE cvg_contador LIKE sy-tfillvg_nivel(2) TYPE n

vg_ini_contagem TYPE c INDICA QUE DEBE SER INICIADO EL CONTADORvg_conta_espaco TYPE n TOTAL DE ESPACIOS ( MAacuteXIMO 2 )

---------------------------------------------------------------------- DEFINICION DE Estructuras y tablas para ALV (FM)----------------------------------------------------------------------DATAwa_cat TYPE slis_fieldcat_alv WA cataacutelogoti_cat TYPE slis_t_fieldcat_alv TI cataacutelogowa_layout TYPE slis_layout_alv WA opciones listati_header TYPE slis_t_listheader TI cabecera listawa_header TYPE slis_listheader WA cabecera listawa_events TYPE slis_alv_event WA eventos listati_events TYPE slis_t_event TI eventos listawa_sort TYPE slis_sortinfo_alv WA sortti_sort TYPE slis_t_sortinfo_alv TI sortwa_print TYPE slis_print_alv WA print

---------------------------------------------------------------------- PARAMETROS----------------------------------------------------------------------

- DATOS OBLIGATORIOSSELECTION-SCREEN BEGIN OF BLOCK bl01 WITH FRAME TITLE tit1

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text2POSITION 20PARAMETERS p_tcode LIKE tstc-tcode TransaccioacutenSELECTION-SCREEN END OF LINE

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text1POSITION 20PARAMETERS p_prog LIKE sy-repid ProgramaSELECTION-SCREEN END OF LINE

SELECTION-SCREEN END OF BLOCK bl01

SELECTION-SCREEN BEGIN OF BLOCK bl02 WITH FRAME TITLE tit2 SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text7POSITION 20PARAMETERS p_ue AS CHECKBOX User-exit

Boton de Exits en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(45) btn USER-COMMAND extVISIBLE LENGTH 12

Boton de Proyectos de Exits en la DYNPROSELECTION-SCREEN PUSHBUTTON 38(45) ext1 USER-COMMAND ext1VISIBLE LENGTH 12

Boton de User-Exits en la DYNPROSELECTION-SCREEN PUSHBUTTON 51(45) ext2 USER-COMMAND ext2VISIBLE LENGTH 12

SELECTION-SCREEN END OF LINE

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text8POSITION 20PARAMETERS p_badi AS CHECKBOX Badis Boton de Interface en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(60) badi USER-COMMAND badiVISIBLE LENGTH 25SELECTION-SCREEN END OF LINE

SELECTION-SCREEN BEGIN OF LINEPOSITION 25PARAMETERS p_handl AS CHECKBOX DEFAULT XCL_EXITHANDLER=gtGET_INSTANCESELECTION-SCREEN COMMENT 30(40) text12SELECTION-SCREEN END OF LINE

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text9POSITION 20PARAMETERS p_bte AS CHECKBOX Bte Boton de Tx FIBF en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(60) bte1 USER-COMMAND bte1VISIBLE LENGTH 1 Boton de Tx Evento en la DYNPROSELECTION-SCREEN PUSHBUTTON 29(60) bte2 USER-COMMAND bte2VISIBLE LENGTH 10 Boton de Tx Proceso en la DYNPROSELECTION-SCREEN PUSHBUTTON 40(60) bte3 USER-COMMAND bte3VISIBLE LENGTH 10

SELECTION-SCREEN END OF LINE

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(19) text14POSITION 20PARAMETERS p_enh AS CHECKBOX Punto de ampliacioacuten

Boton de Tx SENH en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(60) senh USER-COMMAND senhVISIBLE LENGTH 1

Boton de Customer Implementation en la DYNPROSELECTION-SCREEN PUSHBUTTON 29(60) cimp USER-COMMAND cimpVISIBLE LENGTH 24

SELECTION-SCREEN END OF LINE

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text10POSITION 20PARAMETERS p_sust AS CHECKBOX Sustitucioacuten

Boton de Sustitucioacuten en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(45) btn1 USER-COMMAND obbVISIBLE LENGTH 12

Boton de programa sustitucioacuten en la DYNPROSELECTION-SCREEN PUSHBUTTON 38(45) sust USER-COMMAND sustVISIBLE LENGTH 15

SELECTION-SCREEN END OF LINE

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text13POSITION 20PARAMETERS p_val AS CHECKBOX Validacioacuten

Boton de Validacioacuten en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(45) ob28 USER-COMMAND ob28VISIBLE LENGTH 12

Boton de programa sustitucioacuten en la DYNPROSELECTION-SCREEN PUSHBUTTON 38(45) val USER-COMMAND valVISIBLE LENGTH 15

SELECTION-SCREEN END OF LINE

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text11POSITION 20PARAMETERS p_fdex AS CHECKBOX Field-exit

Boton de Field-exit en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(60) btn2 USER-COMMAND fdexVISIBLE LENGTH 28

SELECTION-SCREEN END OF LINE

SELECTION-SCREEN END OF BLOCK bl02

- DATOS OPCIONALESSELECTION-SCREEN BEGIN OF BLOCK bl03 WITH FRAME TITLE tit3

SELECTION-SCREEN BEGIN OF LINE Boton de ALL en la DYNPROSELECTION-SCREEN PUSHBUTTON 18(60) all USER-COMMAND allVISIBLE LENGTH 1 Boton de DAL en la DYNPROSELECTION-SCREEN PUSHBUTTON 21(60) dal USER-COMMAND dalVISIBLE LENGTH 1SELECTION-SCREEN END OF LINE

SELECTION-SCREEN ULINE

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text3POSITION 20PARAMETERS p_incl AS CHECKBOX DEFAULT X IncludesSELECTION-SCREEN END OF LINE

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text4POSITION 20PARAMETERS p_func AS CHECKBOX DEFAULT X Funciones

SELECTION-SCREEN END OF LINE

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text5POSITION 20PARAMETERS p_submit AS CHECKBOX DEFAULT X SubmitSELECTION-SCREEN END OF LINE

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text6POSITION 20PARAMETERS p_nivel(2) TYPE n DEFAULT 04 NivelSELECTION-SCREEN END OF LINE

SELECTION-SCREEN END OF BLOCK bl03

Botoacuten de Marcar todo en el STATUS GUISELECTION-SCREEN FUNCTION KEY 1 Botoacuten de Desmarcar todo en el STATUS GUISELECTION-SCREEN FUNCTION KEY 2 Botoacuten de Breakpoint en el STATUS GUISELECTION-SCREEN FUNCTION KEY 3

----------------------------------------------------------------------- DEFINICIOacuteN DE MACROS-----------------------------------------------------------------------DEFINE icon_create Creo para el botoacuten indicado el icono y los textos correspondientes

call function ICON_CREATEexportingname = amp2text = amp3info = amp4importingresult = amp1exceptionsothers = 0

END-OF-DEFINITION icon_create

----------------------------------------------------------------------- INICIALIZACIOacuteN DE VARIABLES-----------------------------------------------------------------------INITIALIZATION

PERFORM def_text_parameter

PERFORM def_botones

CLEAR ti_gb31tREFRESH ti_gb31t

Obtengo ValidacioacutenSustitucioacutenEventosTextoSELECT INTO TABLE ti_gb31tFROM gb31tWHERE spras EQ sy-langu

----------------------------------------------------------------------- AT SELECTION-SCREEN-----------------------------------------------------------------------

AT SELECTION-SCREEN

CASE sscrfields-ucommWHEN FC01MOVE X TO p_ue p_badi p_bte p_sust p_val p_fdex p_enhWHEN FC02CLEAR p_ue p_badi p_bte p_sust p_val p_fdex p_enhWHEN FC03PERFORM breakpointWHEN EXTPERFORM visualizar_ampliacionWHEN EXT1PERFORM visualizar_proyectoWHEN EXT2PERFORM visualizar_fm_exitWHEN BADIPERFORM visualizar_interfaceWHEN OBBCALL TRANSACTION OBBHWHEN OB28CALL TRANSACTION OB28WHEN SUST OR VALPERFORM visualizar_programaWHEN FDEXSUBMIT rsmodprf AND RETURNWHEN BTE1CALL TRANSACTION FIBFWHEN BTE2PERFORM cargar_bte USING EWHEN BTE3PERFORM cargar_bte USING PWHEN SENHSUBMIT sapmsenh VIA SELECTION-SCREENAND RETURNWHEN CIMPPERFORM visualizar_imp_enhWHEN ALLMOVE X TO p_incl p_func p_submitWHEN DALCLEAR p_incl p_func p_submitWHEN OTHERS Do Nothing ENDCASE

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_prog

PERFORM repid_f4

---------------------------------------------------------------------- INICIO----------------------------------------------------------------------START-OF-SELECTION

GET TIME FIELD w_tini

- CONSISTENCIAS DE LOS PARAMETROSPERFORM consisti_parametros

- INICIALIZA TABLAPERFORM inicializa_tabela

- VERIFICA SI EN EL PROGRAMA EXISTE ALGUN INCLUDE FUNCION O SUBMITPERFORM verifica_include_funcao_submit

- ANALISA LOS INCLUDES Y BUSCA POR USER-EXIT BADIS Y BTEPERFORM busca_user_exit_badi_bte

- ANALISA LOS INCLUDES Y BUSCA LOS FIELD-EXITSPERFORM buscar_field_exit

- OBTENGO LOS EXITs DE LA TRANSACCIOacuteNPERFORM buscar_user_exit

- OBTENGO LAS PUNTOS DE AMPLIACIOacuteNPERFORM buscar_enh

- OBTENGO LAS SUSTITUCIONESPERFORM buscar_sustituciones

- OBTENGO LAS VALIDACIONESPERFORM buscar_validaciones

- CARGO LOS BREAKPOINTSPERFORM cargar_break

- VISUALIZA LAS AMPLIACIONES ENCONTRADASPERFORM exibe_user_exit

---------------------------------------------------------------------- FIN----------------------------------------------------------------------END-OF-SELECTION

amp---------------------------------------------------------------------amp Form BUSCA_USER_EXIT_BADI_BTEamp--------------------------------------------------------------------- Busca EXITs BADIs y BTE en el coacutedigo fuente----------------------------------------------------------------------FORM busca_user_exit_badi_bte

- VERIFICA SI EN LOS INCLUDES SELECIONADOS EXISTEN EXITSLOOP AT ti_includes

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

- BORRA LA TABLA INTERNAREFRESH ti_programa

- REALIZA LECTURA DE INCLUDE ALMACENANDO EN TABLA INTERNAREAD REPORT ti_includes-nome INTO ti_programa

LOOP AT ti_programa

IF p_ue EQ XPERFORM buscar_exitPERFORM busca_enhancementsENDIF

IF p_badi EQ XPERFORM buscar_badiENDIF

IF p_bte EQ XPERFORM buscar_bteENDIF

IF p_enh EQ XPERFORM buscar_punto_ampliacionENDIF

ENDLOOPENDLOOP

ENDFORM BUSCA_USER_EXIT_BADI_BTE

amp---------------------------------------------------------------------amp Form BUSCA_ENHANCEMENTSamp--------------------------------------------------------------------- Busca las llamadas a los USER-EXIT----------------------------------------------------------------------FORM busca_enhancements

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE EN ALGUN ENHANCEMENTSEARCH ti_programa-cf FOR c_enhance- SE ENCONTRO EL ENHANCEMENT Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentarioCLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF

ENDFORM BUSCA_ENHANCEMENTS

amp---------------------------------------------------------------------amp Form EXIBE_USER_EXITamp--------------------------------------------------------------------- Muestra los datos----------------------------------------------------------------------FORM exibe_user_exit

PERFORM armar_alv

PERFORM mostrar_listado

ENDFORM EXIBE_USER_EXIT

amp---------------------------------------------------------------------amp Form PROCURA_INCLUDEamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_include

CLEAR vg_palavra

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN INCLUDESEARCH ti_programa-cf FOR c_include- SE ENCONTRO EN EL INCLUDE Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN STRUCTURESEARCH ti_programa-cf FOR c_struct

IF sy-subrc IS INITIALEXITENDIF

- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DEL INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF NOT vg_caracter IS INITIAL- VERIFICA SI NO ES FIN DE COMANDOIF vg_caracter EQ c_pontoEXITENDIF- ARMA PALABRACONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACIONTRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_includeCLEAR vg_palavraENDIFENDIFENDDO- GRABA NOMBRE DEL INCLUDE PARA FUTURA BUSQUEDA POR USER EXITREAD TABLE ti_includes WITH KEY nome = vg_palavraIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_palavra TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIF

ENDIF

ENDFORM PROCURA_INCLUDE

amp---------------------------------------------------------------------amp Form PROCURA_FUNCAOamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_funcao

CLEAR vg_conta_aspavg_palavra

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA FUNCIONSEARCH ti_programa-cf FOR c_funcao_2- SE ENCONTRO UNA FUNCION Y LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DE LA INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF NOT vg_caracter IS INITIAL- VERIFICA SI NO ES FIN DE COMANDOIF vg_caracter EQ c_aspaADD 1 TO vg_conta_aspaIF vg_conta_aspa EQ 2EXITENDIFENDIF- ARMA PALABRACONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACIONTRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_funcao_1CLEAR vg_palavraENDIFENDIFENDDO- BUSCA NOMBRE DE LA FUNCION PARA FUTURA BUSQUEDA POR USER EXITCLEAR vg_pnameSELECT SINGLE pnameINTO vg_pnameFROM tfdirWHERE funcname EQ vg_palavraIF sy-subrc EQ 0

READ TABLE ti_includes WITH KEY nome = vg_pnameIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_pname TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIF

ENDIF

ENDIF

ENDFORM PROCURA_FUNCAO

amp---------------------------------------------------------------------amp Form VERIFICA_INCLUDE_FUNCAO_SUBMITamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM verifica_include_funcao_submit

CHECK p_ue IS NOT INITIAL OR p_badi IS NOT INITIALOR p_bte IS NOT INITIAL OR p_enh IS NOT INITIAL

LOOP AT ti_includes

ADD 1 TO vg_contadorDESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfillMOVE ti_includes-nivel TO vg_nivelADD 1 TO vg_nivel

- BORRA TABLA INTERNAREFRESH ti_programa

- REALIZA LECTURA DE INCLUDEFUNCION ALMACENANDO EN TABLA INTERNAREAD REPORT ti_includes-nome INTO ti_programa

LOOP AT ti_programa

- PROCURA POR INCLUDESIF p_incl EQ c_xPERFORM procura_includeENDIF- PROCURA POR FUNCIONIF p_func EQ c_xPERFORM procura_funcaoENDIF- PROCURA POR SUBMITIF p_submit EQ c_xPERFORM procura_submitENDIF

ENDLOOP

ENDLOOP

ENDFORM VERIFICA_INCLUDE_FUNCAO_SUBMIT

amp---------------------------------------------------------------------amp Form EVITAR_TIME_OUTamp--------------------------------------------------------------------- Evito el TIME OUT visualizando un mensaje----------------------------------------------------------------------FORM evitar_time_out USING p_tfill LIKE sy-tfill

DATAvl_total(10) TYPE n

vl_atual(10) TYPE nl_tout LIKE sy-timlol_time(10) TYPE c

GET TIME FIELD l_tout

l_tout = l_tout - w_tini

MOVEp_tfill TO vl_totalvg_contador TO vl_atual

SHIFT vl_total LEFT DELETING LEADING 0SHIFT vl_atual LEFT DELETING LEADING 0WRITE l_tout TO l_time

CONCATENATE Tpo l_time Total vl_total Actual vl_atualINTO vg_textoSEPARATED BY space

CALL FUNCTION SAPGUI_PROGRESS_INDICATOREXPORTINGtext = vg_texto

ENDFORM EVITAR_TIME_OUT

amp---------------------------------------------------------------------amp Form PROCURA_SUBMITamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_submit

CLEAR vg_conta_espaco vg_palavra vg_ini_contagem

- VERIFICA SI LA LINEA DEL PROGRAMA EXISTE ALGUN INCLUDESEARCH ti_programa-cf FOR c_submit- SE ENCONTRO EN EL INCLUDE Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DEL INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF vg_ini_contagem EQ c_x AND vg_caracter IS INITIALADD 1 TO vg_conta_espacoENDIF

IF NOT vg_caracter IS INITIALMOVE c_x TO vg_ini_contagemIF vg_caracter EQ c_pontoEXITENDIF- ARMA PALABRAIF vg_conta_espaco LT 2CONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACION

TRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_submitCLEAR vg_palavraENDIFELSEEXITENDIFENDIFENDDO- BUSCA NOMBRE DE LA FUNCION PARA FUTURA BUSQUEDA POR USER EXITREAD TABLE ti_includes WITH KEY nome = vg_palavraIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_palavra TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIFENDIF

ENDFORM PROCURA_SUBMIT

amp---------------------------------------------------------------------amp Form CONSISTI_PARAMETROSamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM consisti_parametros

IF p_nivel IS INITIALMOVE 1 TO p_nivelENDIF

IF p_prog IS INITIAL AND p_tcode IS INITIAL- EL NOMBRE DEL PROGRAMA Y EL NOMBRE DE LA TRANSACCION NO PUEDEN SER- NULOS UNO DE ELLOS DEBE SER INFORMADOMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e01STOPENDIF

IF NOT p_prog IS INITIAL AND NOT p_tcode IS INITIAL- SE SOLICITA AL USUARIO QUE INFORME NOMBRE DE PROGRAMA O TRANSACCIONMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e02STOPENDIF

IF p_ue IS INITIAL AND p_badi IS INITIAL AND p_bte IS INITIALAND p_sust IS INITIAL AND p_val IS INITIAL AND p_fdex IS INITIALAND p_enh IS INITIAL- SE SOLICITA AL USUARIO QUE INFORME UN TIPO DE MEJORAMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e03STOPENDIF

ENDFORM CONSISTI_PARAMETROS

amp---------------------------------------------------------------------

amp Form INICIALIZA_TABELAamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM inicializa_tabela

DATAe_tstc TYPE tstcl_tcode TYPE sy-tcode

REFRESH ti_includes

IF NOT p_prog IS INITIAL

MOVE p_prog TO ti_includes-nome0 TO ti_includes-nivelAPPEND ti_includes

- BUSCO EL PROGRAMAREAD REPORT ti_includes-nome INTO ti_programa

IF sy-subrc EQ 0REFRESH ti_programaELSE- EL PROGRAMA NO EXISTEMESSAGE s893(pz) WITH El programa p_prog no existeSTOPENDIF

ELSEIF NOT p_tcode IS INITIAL

SELECT SINGLE FROM tstcWHERE tcode EQ p_tcode

IF sy-subrc EQ 0

IF tstc-pgmna IS NOT INITIALMOVE tstc-pgmna TO ti_includes-nome0 TO ti_includes-nivelAPPEND ti_includesELSE Se trata de una transaccioacuten de paraacutemetros Obtengo la transaccioacuten asociadaCALL FUNCTION RS_TRANSACTION_SINGLE_GETEXPORTINGparameter_tcode = p_tcodeIMPORTINGtcode = l_tcode

SELECT SINGLE INTO e_tstcFROM tstcWHERE tcode EQ l_tcode

IF sy-subrc EQ 0MOVE e_tstc-pgmna TO ti_includes-nome0 TO ti_includes-nivel

APPEND ti_includesELSE- LA TRANSACCIOacuteN NO EXISTEMESSAGE s893(pz) WITH La transaccioacuten p_tcode no existeENDIFENDIFELSE- LA TRANSACCIOacuteN NO EXISTEMESSAGE s893(pz) WITH La transaccioacuten p_tcode no existeSTOPENDIFENDIF

ENDFORM INICIALIZA_TABELA

amp---------------------------------------------------------------------amp Form armar_alvamp--------------------------------------------------------------------- Armo el ALV----------------------------------------------------------------------FORM armar_alv

DATAl_repid TYPE sy-repid

MOVE sy-repid TO l_repid

CALL FUNCTION REUSE_ALV_BLOCK_LIST_INITEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMAND

IF p_ue IS NOT INITIALPERFORM construir_catalogo_exitPERFORM definir_layout USING TI_USER_EXITCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGEPERFORM sort TABLES ti_sortUSING TI_USER_EXIT

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_USER_EXITit_events = ti_eventsit_sort = ti_sorti_text = User-exitTABLESt_outtab = ti_user_exitEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

PERFORM construir_catalogo_uexitPERFORM definir_layout USING TI_FINAL

CHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_UEXITPERFORM sort TABLES ti_sortUSING TI_FINAL

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FINALit_events = ti_eventsit_sort = ti_sorti_text = User-exit TxCMODTABLESt_outtab = ti_finalEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_badi IS NOT INITIALPERFORM construir_catalogo_badiPERFORM definir_layout USING TI_BADICHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BADIPERFORM sort TABLES ti_sortUSING TI_BADI

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_BADIit_events = ti_eventsit_sort = ti_sorti_text = BadisTABLESt_outtab = ti_badiEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_bte IS NOT INITIALPERFORM construir_catalogo_btePERFORM definir_layout USING TI_BTECHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BTEPERFORM sort TABLES ti_sortUSING TI_BTE

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layout

it_fieldcat = ti_cati_tabname = TI_BTEit_events = ti_eventsit_sort = ti_sorti_text = BTETABLESt_outtab = ti_bteEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_enh IS NOT INITIALPERFORM construir_catalogo_enhPERFORM definir_layout USING TI_ENHCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHPERFORM sort TABLES ti_sortUSING TI_ENH

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHit_events = ti_eventsit_sort = ti_sorti_text = ENHTABLESt_outtab = ti_enhEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

PERFORM construir_catalogo_enhobjPERFORM definir_layout USING TI_ENHOBJCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHOBJPERFORM sort TABLES ti_sortUSING TI_ENHOBJ

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHOBJit_events = ti_eventsit_sort = ti_sorti_text = ENHOBJTABLESt_outtab = ti_enhobjEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_sust IS NOT INITIALPERFORM construir_catalogo_sustPERFORM definir_layout USING TI_SUSTCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_SUSTPERFORM sort TABLES ti_sortUSING TI_SUST

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_SUSTit_events = ti_eventsit_sort = ti_sorti_text = SustitucionesTABLESt_outtab = ti_sustEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_val IS NOT INITIALPERFORM construir_catalogo_valPERFORM definir_layout USING TI_VALCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_VALPERFORM sort TABLES ti_sortUSING TI_VAL

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_VALit_events = ti_eventsit_sort = ti_sorti_text = ValidacionesTABLESt_outtab = ti_valEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_fdex IS NOT INITIALPERFORM construir_catalogo_fdexPERFORM definir_layout USING TI_FDEXCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_FDEX

PERFORM sort TABLES ti_sortUSING TI_FDEX

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FDEXit_events = ti_eventsit_sort = ti_sorti_text = Field-exitTABLESt_outtab = ti_fdexEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

ENDFORM armar_alv

amp---------------------------------------------------------------------amp Form construir_catalogo_EXITamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_exit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_USER_EXITi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03

CF X c_text_04

ENDFORM construir_catalogo_EXIT

amp---------------------------------------------------------------------amp Form asignar_campo_a_catalogoamp--------------------------------------------------------------------- Asignar campo al catalogo ALV----------------------------------------------------------------------FORM asignar_campo_a_catalogo TABLES pt_cat STRUCTURE wa_catUSING p_fieldname LIKE wa_cat-fieldnamep_key LIKE wa_cat-keyp_col_pos TYPE cp_fix_column LIKE wa_cat-fix_columnp_hotspot LIKE wa_cat-hotspotp_do_sum LIKE wa_cat-do_sump_input LIKE wa_cat-inputp_checkbox LIKE wa_cat-checkboxp_no_out LIKE wa_cat-no_outp_icon LIKE wa_cat-iconp_reptext_ddic LIKE wa_cat-reptext_ddic

STATICS l_col_pos LIKE sy-cucol

Asignar atributos de campo en el catalogo de cabecera ALVCLEAR wa_catREAD TABLE pt_cat INTO wa_catWITH KEY fieldname = p_fieldname

CHECK sy-subrc EQ 0

IF NOT p_reptext_ddic IS INITIALwa_cat-seltext_l = wa_cat-seltext_m =wa_cat-seltext_s = wa_cat-reptext_ddic = p_reptext_ddicENDIF

IF p_col_pos EQ X Inicializo el conteo para ordenar las columnasl_col_pos = 1ELSEADD 1 TO l_col_posENDIF

wa_cat-fieldname = p_fieldnamewa_cat-key = p_keywa_cat-col_pos = l_col_poswa_cat-fix_column = p_fix_columnwa_cat-hotspot = p_hotspotwa_cat-do_sum = p_do_sumwa_cat-edit = wa_cat-input = p_inputwa_cat-checkbox = p_checkboxwa_cat-no_out = p_no_outwa_cat-icon = p_icon

MODIFY pt_cat FROM wa_cat INDEX sy-tabix

ENDFORM asignar_campo_a_catalogo

amp---------------------------------------------------------------------amp Form definir_layoutamp--------------------------------------------------------------------- Definir atributos del layout de reporte----------------------------------------------------------------------FORM definir_layout USING p_table TYPE slis_layout_alv-box_tabnameCHANGING p_layout TYPE slis_layout_alv

CLEAR p_layout

IF p_table NE TI_CIMP Marco el campo para la seleccioacutenp_layout-box_fieldname = SELp_layout-box_tabname = p_tableENDIFp_layout-zebra = Xp_layout-colwidth_optimize = Xp_layout-no_vline = p_layout-no_colhead = p_layout-lights_condense = Xp_layout-detail_popup = Xp_layout-detail_initial_lines = Xp_layout-flexible_key = p_layout-key_hotspot = p_layout-confirmation_prompt = X

ENDFORM definir_layout

amp---------------------------------------------------------------------amp Form construir_eventosamp--------------------------------------------------------------------- Asignar eventos soportados----------------------------------------------------------------------FORM construir_eventos USING p_form LIKE wa_events-formDATAl_type(1) TYPE n

REFRESH ti_eventsCLEAR wa_events

ALV Simple Block appendl_type = 2

Buscar secciones para eventosCALL FUNCTION REUSE_ALV_EVENTS_GETEXPORTINGi_list_type = l_typeIMPORTINGet_events = ti_events

Leer evento TOP_OF_PAGEREAD TABLE ti_events WITH KEY name = slis_ev_top_of_pageINTO wa_events Asignar Rutina FORM TOP_OF_PAGE a eventoIF sy-subrc = 0MOVE p_form TO wa_events-formMODIFY ti_events FROM wa_events INDEX sy-tabixENDIF

ENDFORM construir_eventos

amp---------------------------------------------------------------------amp Form top_of_pageamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_user_exitWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUser-exit

ENDFORM top_of_page

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_UEXITamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_uexit

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_finalWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUSER-EXITs TxSMOD

ENDFORM TOP_OF_PAGE_UEXIT

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_FDEXamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_fdex

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_fdexWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incFIELD-EXITs

ENDFORM TOP_OF_PAGE_FDEX

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BADIamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_badi

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_badiWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBADIs

ENDFORM TOP_OF_PAGE_BADI

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BTEamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_bte

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_bteWRITE sy-tfill TO l_tfill_cant

CONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBTEs

ENDFORM TOP_OF_PAGE_BTE

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enh

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_enhWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENH

amp---------------------------------------------------------------------amp Form sortamp--------------------------------------------------------------------- Creo el sort del ALV (FM)---------------------------------------------------------------------- --gtPT_sort Tabla --gtP_tabname Nombre de la tabla----------------------------------------------------------------------FORM sort TABLES pt_sortUSING p_tabname TYPE any

CLEAR pt_sort wa_sortREFRESH pt_sort

CASE p_tabnameWHEN TI_SUST

wa_sort-fieldname = SUBSTIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = SUBSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = CONSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN TI_VAL

wa_sort-fieldname = VALIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = VALSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN TI_ENHOBJ

wa_sort-fieldname = ENHNAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = VERSIONwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN OTHERS

IF p_tabname NE TI_FINAL

wa_sort-fieldname = TIPOwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

IF p_tabname NE TI_FDEX

wa_sort-fieldname = NIVELwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = PROGRAMAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = LINEAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

ENDIF

ELSE

wa_sort-fieldname = NAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = MEMBERwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sortENDIFENDCASE

ENDFORM sort

amp---------------------------------------------------------------------amp Form mostrar_listadoamp--------------------------------------------------------------------- Mostrar listado ALV----------------------------------------------------------------------FORM mostrar_listado

wa_print-reserve_lines = 2

CALL FUNCTION REUSE_ALV_BLOCK_LIST_DISPLAY

EXPORTINGis_print = wa_printEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM mostrar_listado

amp---------------------------------------------------------------------amp Form user_commandamp--------------------------------------------------------------------- Evaluar acciones del usuario----------------------------------------------------------------------FORM user_command USING ucomm LIKE sy-ucommsfields TYPE slis_selfield

DATA l_break TYPE c

Rescatar el registro seleccionadoCASE sfields-tabnameWHEN TI_USER_EXITREAD TABLE ti_user_exit INDEX sfields-tabindexWHEN TI_BADIREAD TABLE ti_badi INDEX sfields-tabindexWHEN TI_BTEREAD TABLE ti_bte INDEX sfields-tabindexWHEN TI_ENHREAD TABLE ti_enh INDEX sfields-tabindexWHEN TI_ENHOBJREAD TABLE ti_enhobj INDEX sfields-tabindexWHEN TI_FDEXREAD TABLE ti_fdex INDEX sfields-tabindexWHEN TI_FINALREAD TABLE ti_final INDEX sfields-tabindexWHEN TI_SUSTREAD TABLE ti_sust INDEX sfields-tabindexWHEN TI_VALREAD TABLE ti_val INDEX sfields-tabindexWHEN TI_CIMPREAD TABLE ti_cimp INDEX sfields-tabindexENDCASE

Seleccion de opcionCASE ucomm DOUBLE CLICKWHEN ampIC1 Evaluar valor de campo seleccionadoCHECK NOT sfields-value IS INITIAL

CASE sfields-tabnameWHEN TI_USER_EXIT USER-EXITIF ti_user_exit-tipo EQ sfields-value(4)SEARCH ti_user_exit-cf FOR c_enhanceCHECK sy-subrc EQ 0PERFORM visualizar_exit USING ti_user_exit-programati_user_exit-cf

ELSEIF ti_user_exit-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_user_exit-programati_user_exit-lineaMOVE X TO l_breakELSEIF ti_user_exit-break EQ sfields-value(4)OR ti_user_exit-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_user_exit-programati_user_exit-lineati_user_exit-breakMOVE X TO l_breakENDIF

WHEN TI_FINAL USER-EXIT Tx CMODIF ti_final-name EQ sfields-valueCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = ti_final-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSEIF ti_final-include EQ sfields-valuePERFORM visualizar_linea USING ti_final-programa1MOVE X TO l_breakENDIF

WHEN TI_BADI BadiIF ti_badi-tipo EQ sfields-value(4)PERFORM visualizar_badi USING ti_badi-cfELSEIF ti_badi-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_badi-programati_badi-lineaMOVE X TO l_breakELSEIF ti_badi-break EQ sfields-value(4)OR ti_badi-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_badi-programati_badi-lineati_badi-breakMOVE X TO l_breakENDIF

WHEN TI_BTE BTEIF ti_bte-tipo EQ sfields-value(4)PERFORM fibf USING ti_bte-cfELSEIF ti_bte-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_bte-programati_bte-lineaMOVE X TO l_breakELSEIF ti_bte-break EQ sfields-value(4)OR ti_bte-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_bte-programati_bte-linea

ti_bte-breakMOVE X TO l_breakENDIF

WHEN TI_ENH Punto de ampliacioacutenIF ti_enh-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_enh-programati_enh-lineaMOVE X TO l_breakELSEIF ti_enh-tipo EQ sfields-value(4)PERFORM bi_se18 USING ti_enh-cfENDIF

WHEN TI_ENHOBJ Punto de ampliacioacutenIF ti_enhobj-enhname EQ sfields-value(30)PERFORM bi_se19 USING ti_enhobj-enhnameENDIF

WHEN TI_SUST SustitucionesIF ti_sust-substid EQ sfields-value(7) ORti_sust-subseqnr EQ sfields-value(3)PERFORM visualizar_sust USING ti_sust-substidti_sust-subseqnrENDIF

WHEN TI_VAL ValidacionesIF ti_val-valid EQ sfields-value(7) ORti_val-valseqnr EQ sfields-value(3)PERFORM visualizar_val USING ti_val-validti_val-valseqnrENDIF

WHEN TI_FDEX Field-exitIF ti_fdex-tipo EQ sfields-valueSUBMIT rsmodprf AND RETURNELSEIF ti_fdex-cf(60) EQ sfields-value Visualizo el field-exitCALL FUNCTION RS_FUNCTION_SHOWEXPORTINGfuncname = ti_fdex-cf

CALL FUNCTION RS_NAVIGATION_MONITORENDIF

WHEN TI_CIMP Customer implementation

CASE sfields-fieldnameWHEN ENHNAMEPERFORM bi_se19 USING ti_cimp-enhnameWHEN ENHINCLUDEPERFORM visualizar_enh_cf USING ti_cimp-enhinclude

WHEN OTHERS DO NOTHING ENDCASE

WHEN OTHERS DO NOTHING ENDCASE

WHEN OTHERS DO NOTHING ENDCASE

IF l_break IS NOT INITIAL AND sfields-tabname NE TI_CIMPWAIT UP TO 1 SECONDSPERFORM cargar_breakENDIFsfields-refresh = X

ENDFORM user_command

amp---------------------------------------------------------------------amp Form visualizar_lineaamp--------------------------------------------------------------------- Visualizo la linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_linea USING p_programa TYPE sy-repidp_linea

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_programaobject_type = c_typeposition = p_lineaEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM visualizar_linea

amp---------------------------------------------------------------------amp Form buscar_exitamp--------------------------------------------------------------------- Buscar USER-EXIT----------------------------------------------------------------------FORM buscar_exit

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN USER-EXITSEARCH ti_programa-cf FOR c_user_exit- SE ENCONTRO UN USER-EXIT Y SE VERIFICA SI LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS PERFORMSEARCH ti_programa-cf FOR c_performCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LAS ASIGNACIONESSEARCH ti_programa-cf FOR c_igualCHECK sy-subrc NE 0

CLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INIacuteCIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF

ENDFORM buscar_exit

amp---------------------------------------------------------------------amp Form buscar_badiamp--------------------------------------------------------------------- Buscar BADI----------------------------------------------------------------------FORM buscar_badi

DATAl_subrc LIKE sy-subrc

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BADISEARCH ti_programa-cf FOR c_badi- SE ENCONTRO UNA BADI Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

SEARCH ti_programa-cf FOR c_includeIF sy-subrc NE 0CLEAR l_subrcSEARCH ti_programa-cf FOR c_methodIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_funcao_2IF sy-subrc NE 0SEARCH ti_programa-cf FOR c_performIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_type_refIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_formMOVE 4 TO l_subrcENDIFENDIFENDIFENDIF

IF l_subrc EQ 0CLEAR ti_badi

- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIFELSECHECK p_handl IS NOT INITIAL- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA INSTANCIA DE- UNA BADISEARCH ti_programa-cf FOR c_handler- SE ENCONTRO UNA INSTANCIA DE IMPLEMENACIOacuteN Y SE VERIFICA SI LA LINEA- NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

SEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0CLEAR ti_badi- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIF

ENDFORM buscar_badi

amp---------------------------------------------------------------------amp Form buscar_bteamp--------------------------------------------------------------------- Buscar BTE----------------------------------------------------------------------FORM buscar_bte

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OPEN_FI_PERFORM

- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endform

CHECK sy-subrc NE 0

CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte1- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OUTBOUND_CALL

- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0

CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF

ENDFORM buscar_bte

amp---------------------------------------------------------------------amp Form repid_f4amp--------------------------------------------------------------------- Ejecuto el F4 para buscar programas----------------------------------------------------------------------FORM repid_f4

CALL FUNCTION REPOSITORY_INFO_SYSTEM_F4EXPORTINGobject_type = PROGobject_name = p_progsuppress_selection = XIMPORTINGobject_name_selected = p_progEXCEPTIONS

cancel = 1wrong_type = 2OTHERS = 3

ENDFORM repid_f4

amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf

DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

SEARCH p_cf FOR 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 INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

READ TABLE lt_cf INDEX 4

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

CHECK sy-subrc IS INITIAL

Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten

textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer

CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4

IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF

WHEN OTHERS Do Nothing ENDCASE

ENDFORM visualizar_badi

amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf

DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

CLEAR d010inc modsap modact

Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid

IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF

SEARCH p_cf FOR c_enhance

CHECK sy-subrc IS INITIAL

REFRESH lt_cf

l_cf = 500 - sy-fdpos

MOVE p_cf+sy-fdpos(l_cf) TO l_linea

SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3

TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS

Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _

Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit

CHECK sy-subrc IS INITIAL

Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM

modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3

ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname

CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ENDIF

ENDFORM visualizar_exit

amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit

DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo

DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe

DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE

CHECK p_fdex IS NOT INITIAL

CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe

MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex

IF p_prog IS NOT INITIAL

MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF

Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog

LOOP AT lt_d020s

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

REFRESH lt_d021s

Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4

Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X

SEARCH lt_d021s-fnam FOR -

IF sy-subrc IS INITIAL

MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum

Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname

APPEND lt_campo

ENDIF

ENDLOOPENDLOOP

CHECK lt_campo[] IS NOT INITIAL

SORT lt_campo BY repid dnum tabname fieldname

DELETE ADJACENT DUPLICATES FROM lt_campo

Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname

SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l

LOOP AT lt_dd03l

CLEAR tddir tddirs

SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname

CHECK sy-subrc IS INITIAL

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog

CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF

Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf

IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF

READ TABLE lt_fe WITH KEY cf = lt_fe-cf

CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP

LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex

ENDLOOP

ENDFORM buscar_field_exit

amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf

DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c

SEARCH p_cf FOR c_bte

IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ELSE

SEARCH p_cf FOR c_bte1

CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ENDIF

IF l_tipo IS NOT INITIAL

PERFORM visualizar_bte USING l_tipol_linea

ELSECALL TRANSACTION FIBFENDIF

ENDFORM fibf

amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT

EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM breakpoint

amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_badi

amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE

i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_bte

amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X TIPO X X c_text_05CF X c_text_04

ENDFORM construir_catalogo_FDEX

amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc

DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

CHECK lt_break[] IS NOT INITIAL

IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix

MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF

IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix

MOVEti_badi-linea TO l_lineti_badi-programa TO l_program

READ TABLE lt_break INTO wa_break

WITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF

IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix

MOVEti_bte-linea TO l_lineti_bte-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF

ENDFORM cargar_break

amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

DATAl_tabix TYPE sy-tabix

l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

SELECT SINGLE FROM d010incWHERE include = p_programa

IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF

MOVEp_linea TO l_linep_programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM asignar_break

amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit

IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF

PERFORM get_objects Get Objects

ENDFORM buscar_user_exit

amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects

DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area

DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix

SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog

IF sy-subrc = 0

SORT ti_tadir BY obj_name devclass

SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass

IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF

- Get UserExit namesLOOP AT ti_jtab

SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E

APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area

l_fname = ti_final-member

CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include

LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP

CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP

ENDFORM get_objects

amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X

ENDFORM construir_catalogo_uexit

amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------

FORM visualizar_ampliacion

DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF

SELECT SINGLE FROM modsapWHERE member EQ l_member

IF sy-subrc IS INITIAL

Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member

ENDIF

ENDFORM visualizar_ampliacion

amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea

RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs

REFRESH r_event r_procs

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event

SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs

SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE

ENDFORM visualizar_bte

amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE

----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c

DATAl_linea(500) TYPE c

DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

MOVE lt_fields-value TO l_linea

PERFORM visualizar_bte USING p_tipol_linea

ENDFORM cargar_bte

amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface

DATAl_linea(500) TYPE c

DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE

InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF

ENDFORM visualizar_interface

amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones

CHECK p_sust IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922

ENDFORM buscar_sustituciones

amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST

ENDFORM construir_catalogo_sust

amp---------------------------------------------------------------------

amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones

ENDFORM TOP_OF_PAGE_SUST

amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4

CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_sust

amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones

CHECK p_val IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931

ENDFORM buscar_validaciones

amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID

ENDFORM construir_catalogo_val

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones

ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2

CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_val

amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto

DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF

SELECT SINGLE FROM modsapWHERE name EQ l_name

IF sy-subrc IS INITIAL

MOVE l_name TO l_member

SELECT SINGLE FROM modactWHERE member EQ l_member

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF

ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF

ENDFORM visualizar_proyecto

amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel

APPEND ti_enh

ENDIFENDIFENDIF

ENDFORM buscar_punto_ampliacioacuten

amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_enh

amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh

DATA l_obj_name TYPE enhobj-obj_name

DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name

CHECK p_enh IS NOT INITIAL

IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF

REFRESH lt_obj_name

LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP

SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name

ENDFORM buscar_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X

ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME

ENDFORM construir_catalogo_enhobj

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENHOBJ

amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM bi_se19

amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro

CLEAR ti_bdcdatati_bdcdata-program = program

ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata

ENDFORM BDC_DYNPRO

amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval

CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata

ENDFORM BDC_FIELD

amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa

DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)

CHECK ti_gb31t[] IS NOT INITIAL

DO

Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2

IF l_exit EQ XEXITENDIF

CHECK l_exit IS INITIAL

Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND

CHECK l_boolpool IS NOT INITIAL

MOVE l_boolpool TO l_repid

Visualizo el programaPERFORM visualizar_linea USING l_repid01

ENDDO

ENDFORM visualizar_programa

amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope

STATICS l_flag TYPE c

DATA l_tit(65) TYPE c

CHECK l_flag IS INITIAL

l_flag = X

WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline

4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM texto_tope

amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf

DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off

CHECK l_off IS NOT INITIAL

ADD 7 TO l_offl_cf = 500 - l_off

SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_enhspotname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1

invalid_object_type = 2OTHERS = 3

ENDFORM bi_se18

amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit

DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE

DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE

MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE

MOVE lt_fields-value TO l_nameENDIF

Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_

LOOP AT lt_tfdir

CLEARl_group l_include l_namespace l_str_area

l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl

IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl

CHECK sy-subrc IS INITIAL

Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP

CHECK l_flag IS INITIAL

La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value

ENDFORM visualizar_fm_exit

amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter

tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten

ENDFORM def_text_parameter

amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones

Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt

Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt

Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt

icon_create RESULT name text infoicon_create

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 4: buscar_ampliaciones FOROSAP

ti_jtab TYPE STANDARD TABLE OF x_slog WITH HEADER LINE

DATA BEGIN OF ti_final OCCURS 0name LIKE modsap-namemember LIKE modsap-memberinclude LIKE rs38l-include (15) Include namestext LIKE tftit-stextprograma LIKE rs38l-includesel(1)END OF ti_final

DATA BEGIN OF ti_sust OCCURS 0substid LIKE gb922-substidsubseqnr LIKE gb922-subseqnrconseqnr LIKE gb922-conseqnrsubstab LIKE gb922-substabsubsfield LIKE gb922-subsfieldsubsval LIKE gb922-subsvalexitsubst LIKE gb922-exitsubstsel(1)END OF ti_sust

DATA BEGIN OF ti_val OCCURS 0valid LIKE gb931-validvalseqnr LIKE gb931-valseqnrcondid LIKE gb931-condidcheckid LIKE gb931-checkidsel(1)END OF ti_val

DATA BEGIN OF ti_bdcdata OCCURS 0INCLUDE STRUCTURE bdcdataDATA END OF ti_bdcdata

DATA ti_gb31t TYPE TABLE OF gb31t WITH HEADER LINE

DATA BEGIN OF ti_cimp OCCURS 0enhname LIKE enhobj-enhnameobj_type LIKE enhobj-obj_typeobj_name LIKE enhobj-obj_nameelemusage LIKE enhobj-elemusageenhinclude(40) like ENHINCINX-ENHINCLUDEEND OF ti_cimp

---------------------------------------------------------------------- VARIABLE GLOBALES----------------------------------------------------------------------DATAfunctxt TYPE smp_dyntxtw_tini LIKE sy-timlovg_caracter TYPE cvg_palavra(50) TYPE cvg_inicial LIKE sy-indexvg_conta_aspa TYPE nvg_pname LIKE tfdir-pnamevg_texto(50) TYPE cvg_contador LIKE sy-tfillvg_nivel(2) TYPE n

vg_ini_contagem TYPE c INDICA QUE DEBE SER INICIADO EL CONTADORvg_conta_espaco TYPE n TOTAL DE ESPACIOS ( MAacuteXIMO 2 )

---------------------------------------------------------------------- DEFINICION DE Estructuras y tablas para ALV (FM)----------------------------------------------------------------------DATAwa_cat TYPE slis_fieldcat_alv WA cataacutelogoti_cat TYPE slis_t_fieldcat_alv TI cataacutelogowa_layout TYPE slis_layout_alv WA opciones listati_header TYPE slis_t_listheader TI cabecera listawa_header TYPE slis_listheader WA cabecera listawa_events TYPE slis_alv_event WA eventos listati_events TYPE slis_t_event TI eventos listawa_sort TYPE slis_sortinfo_alv WA sortti_sort TYPE slis_t_sortinfo_alv TI sortwa_print TYPE slis_print_alv WA print

---------------------------------------------------------------------- PARAMETROS----------------------------------------------------------------------

- DATOS OBLIGATORIOSSELECTION-SCREEN BEGIN OF BLOCK bl01 WITH FRAME TITLE tit1

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text2POSITION 20PARAMETERS p_tcode LIKE tstc-tcode TransaccioacutenSELECTION-SCREEN END OF LINE

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text1POSITION 20PARAMETERS p_prog LIKE sy-repid ProgramaSELECTION-SCREEN END OF LINE

SELECTION-SCREEN END OF BLOCK bl01

SELECTION-SCREEN BEGIN OF BLOCK bl02 WITH FRAME TITLE tit2 SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text7POSITION 20PARAMETERS p_ue AS CHECKBOX User-exit

Boton de Exits en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(45) btn USER-COMMAND extVISIBLE LENGTH 12

Boton de Proyectos de Exits en la DYNPROSELECTION-SCREEN PUSHBUTTON 38(45) ext1 USER-COMMAND ext1VISIBLE LENGTH 12

Boton de User-Exits en la DYNPROSELECTION-SCREEN PUSHBUTTON 51(45) ext2 USER-COMMAND ext2VISIBLE LENGTH 12

SELECTION-SCREEN END OF LINE

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text8POSITION 20PARAMETERS p_badi AS CHECKBOX Badis Boton de Interface en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(60) badi USER-COMMAND badiVISIBLE LENGTH 25SELECTION-SCREEN END OF LINE

SELECTION-SCREEN BEGIN OF LINEPOSITION 25PARAMETERS p_handl AS CHECKBOX DEFAULT XCL_EXITHANDLER=gtGET_INSTANCESELECTION-SCREEN COMMENT 30(40) text12SELECTION-SCREEN END OF LINE

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text9POSITION 20PARAMETERS p_bte AS CHECKBOX Bte Boton de Tx FIBF en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(60) bte1 USER-COMMAND bte1VISIBLE LENGTH 1 Boton de Tx Evento en la DYNPROSELECTION-SCREEN PUSHBUTTON 29(60) bte2 USER-COMMAND bte2VISIBLE LENGTH 10 Boton de Tx Proceso en la DYNPROSELECTION-SCREEN PUSHBUTTON 40(60) bte3 USER-COMMAND bte3VISIBLE LENGTH 10

SELECTION-SCREEN END OF LINE

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(19) text14POSITION 20PARAMETERS p_enh AS CHECKBOX Punto de ampliacioacuten

Boton de Tx SENH en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(60) senh USER-COMMAND senhVISIBLE LENGTH 1

Boton de Customer Implementation en la DYNPROSELECTION-SCREEN PUSHBUTTON 29(60) cimp USER-COMMAND cimpVISIBLE LENGTH 24

SELECTION-SCREEN END OF LINE

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text10POSITION 20PARAMETERS p_sust AS CHECKBOX Sustitucioacuten

Boton de Sustitucioacuten en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(45) btn1 USER-COMMAND obbVISIBLE LENGTH 12

Boton de programa sustitucioacuten en la DYNPROSELECTION-SCREEN PUSHBUTTON 38(45) sust USER-COMMAND sustVISIBLE LENGTH 15

SELECTION-SCREEN END OF LINE

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text13POSITION 20PARAMETERS p_val AS CHECKBOX Validacioacuten

Boton de Validacioacuten en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(45) ob28 USER-COMMAND ob28VISIBLE LENGTH 12

Boton de programa sustitucioacuten en la DYNPROSELECTION-SCREEN PUSHBUTTON 38(45) val USER-COMMAND valVISIBLE LENGTH 15

SELECTION-SCREEN END OF LINE

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text11POSITION 20PARAMETERS p_fdex AS CHECKBOX Field-exit

Boton de Field-exit en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(60) btn2 USER-COMMAND fdexVISIBLE LENGTH 28

SELECTION-SCREEN END OF LINE

SELECTION-SCREEN END OF BLOCK bl02

- DATOS OPCIONALESSELECTION-SCREEN BEGIN OF BLOCK bl03 WITH FRAME TITLE tit3

SELECTION-SCREEN BEGIN OF LINE Boton de ALL en la DYNPROSELECTION-SCREEN PUSHBUTTON 18(60) all USER-COMMAND allVISIBLE LENGTH 1 Boton de DAL en la DYNPROSELECTION-SCREEN PUSHBUTTON 21(60) dal USER-COMMAND dalVISIBLE LENGTH 1SELECTION-SCREEN END OF LINE

SELECTION-SCREEN ULINE

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text3POSITION 20PARAMETERS p_incl AS CHECKBOX DEFAULT X IncludesSELECTION-SCREEN END OF LINE

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text4POSITION 20PARAMETERS p_func AS CHECKBOX DEFAULT X Funciones

SELECTION-SCREEN END OF LINE

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text5POSITION 20PARAMETERS p_submit AS CHECKBOX DEFAULT X SubmitSELECTION-SCREEN END OF LINE

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text6POSITION 20PARAMETERS p_nivel(2) TYPE n DEFAULT 04 NivelSELECTION-SCREEN END OF LINE

SELECTION-SCREEN END OF BLOCK bl03

Botoacuten de Marcar todo en el STATUS GUISELECTION-SCREEN FUNCTION KEY 1 Botoacuten de Desmarcar todo en el STATUS GUISELECTION-SCREEN FUNCTION KEY 2 Botoacuten de Breakpoint en el STATUS GUISELECTION-SCREEN FUNCTION KEY 3

----------------------------------------------------------------------- DEFINICIOacuteN DE MACROS-----------------------------------------------------------------------DEFINE icon_create Creo para el botoacuten indicado el icono y los textos correspondientes

call function ICON_CREATEexportingname = amp2text = amp3info = amp4importingresult = amp1exceptionsothers = 0

END-OF-DEFINITION icon_create

----------------------------------------------------------------------- INICIALIZACIOacuteN DE VARIABLES-----------------------------------------------------------------------INITIALIZATION

PERFORM def_text_parameter

PERFORM def_botones

CLEAR ti_gb31tREFRESH ti_gb31t

Obtengo ValidacioacutenSustitucioacutenEventosTextoSELECT INTO TABLE ti_gb31tFROM gb31tWHERE spras EQ sy-langu

----------------------------------------------------------------------- AT SELECTION-SCREEN-----------------------------------------------------------------------

AT SELECTION-SCREEN

CASE sscrfields-ucommWHEN FC01MOVE X TO p_ue p_badi p_bte p_sust p_val p_fdex p_enhWHEN FC02CLEAR p_ue p_badi p_bte p_sust p_val p_fdex p_enhWHEN FC03PERFORM breakpointWHEN EXTPERFORM visualizar_ampliacionWHEN EXT1PERFORM visualizar_proyectoWHEN EXT2PERFORM visualizar_fm_exitWHEN BADIPERFORM visualizar_interfaceWHEN OBBCALL TRANSACTION OBBHWHEN OB28CALL TRANSACTION OB28WHEN SUST OR VALPERFORM visualizar_programaWHEN FDEXSUBMIT rsmodprf AND RETURNWHEN BTE1CALL TRANSACTION FIBFWHEN BTE2PERFORM cargar_bte USING EWHEN BTE3PERFORM cargar_bte USING PWHEN SENHSUBMIT sapmsenh VIA SELECTION-SCREENAND RETURNWHEN CIMPPERFORM visualizar_imp_enhWHEN ALLMOVE X TO p_incl p_func p_submitWHEN DALCLEAR p_incl p_func p_submitWHEN OTHERS Do Nothing ENDCASE

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_prog

PERFORM repid_f4

---------------------------------------------------------------------- INICIO----------------------------------------------------------------------START-OF-SELECTION

GET TIME FIELD w_tini

- CONSISTENCIAS DE LOS PARAMETROSPERFORM consisti_parametros

- INICIALIZA TABLAPERFORM inicializa_tabela

- VERIFICA SI EN EL PROGRAMA EXISTE ALGUN INCLUDE FUNCION O SUBMITPERFORM verifica_include_funcao_submit

- ANALISA LOS INCLUDES Y BUSCA POR USER-EXIT BADIS Y BTEPERFORM busca_user_exit_badi_bte

- ANALISA LOS INCLUDES Y BUSCA LOS FIELD-EXITSPERFORM buscar_field_exit

- OBTENGO LOS EXITs DE LA TRANSACCIOacuteNPERFORM buscar_user_exit

- OBTENGO LAS PUNTOS DE AMPLIACIOacuteNPERFORM buscar_enh

- OBTENGO LAS SUSTITUCIONESPERFORM buscar_sustituciones

- OBTENGO LAS VALIDACIONESPERFORM buscar_validaciones

- CARGO LOS BREAKPOINTSPERFORM cargar_break

- VISUALIZA LAS AMPLIACIONES ENCONTRADASPERFORM exibe_user_exit

---------------------------------------------------------------------- FIN----------------------------------------------------------------------END-OF-SELECTION

amp---------------------------------------------------------------------amp Form BUSCA_USER_EXIT_BADI_BTEamp--------------------------------------------------------------------- Busca EXITs BADIs y BTE en el coacutedigo fuente----------------------------------------------------------------------FORM busca_user_exit_badi_bte

- VERIFICA SI EN LOS INCLUDES SELECIONADOS EXISTEN EXITSLOOP AT ti_includes

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

- BORRA LA TABLA INTERNAREFRESH ti_programa

- REALIZA LECTURA DE INCLUDE ALMACENANDO EN TABLA INTERNAREAD REPORT ti_includes-nome INTO ti_programa

LOOP AT ti_programa

IF p_ue EQ XPERFORM buscar_exitPERFORM busca_enhancementsENDIF

IF p_badi EQ XPERFORM buscar_badiENDIF

IF p_bte EQ XPERFORM buscar_bteENDIF

IF p_enh EQ XPERFORM buscar_punto_ampliacionENDIF

ENDLOOPENDLOOP

ENDFORM BUSCA_USER_EXIT_BADI_BTE

amp---------------------------------------------------------------------amp Form BUSCA_ENHANCEMENTSamp--------------------------------------------------------------------- Busca las llamadas a los USER-EXIT----------------------------------------------------------------------FORM busca_enhancements

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE EN ALGUN ENHANCEMENTSEARCH ti_programa-cf FOR c_enhance- SE ENCONTRO EL ENHANCEMENT Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentarioCLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF

ENDFORM BUSCA_ENHANCEMENTS

amp---------------------------------------------------------------------amp Form EXIBE_USER_EXITamp--------------------------------------------------------------------- Muestra los datos----------------------------------------------------------------------FORM exibe_user_exit

PERFORM armar_alv

PERFORM mostrar_listado

ENDFORM EXIBE_USER_EXIT

amp---------------------------------------------------------------------amp Form PROCURA_INCLUDEamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_include

CLEAR vg_palavra

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN INCLUDESEARCH ti_programa-cf FOR c_include- SE ENCONTRO EN EL INCLUDE Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN STRUCTURESEARCH ti_programa-cf FOR c_struct

IF sy-subrc IS INITIALEXITENDIF

- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DEL INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF NOT vg_caracter IS INITIAL- VERIFICA SI NO ES FIN DE COMANDOIF vg_caracter EQ c_pontoEXITENDIF- ARMA PALABRACONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACIONTRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_includeCLEAR vg_palavraENDIFENDIFENDDO- GRABA NOMBRE DEL INCLUDE PARA FUTURA BUSQUEDA POR USER EXITREAD TABLE ti_includes WITH KEY nome = vg_palavraIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_palavra TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIF

ENDIF

ENDFORM PROCURA_INCLUDE

amp---------------------------------------------------------------------amp Form PROCURA_FUNCAOamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_funcao

CLEAR vg_conta_aspavg_palavra

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA FUNCIONSEARCH ti_programa-cf FOR c_funcao_2- SE ENCONTRO UNA FUNCION Y LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DE LA INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF NOT vg_caracter IS INITIAL- VERIFICA SI NO ES FIN DE COMANDOIF vg_caracter EQ c_aspaADD 1 TO vg_conta_aspaIF vg_conta_aspa EQ 2EXITENDIFENDIF- ARMA PALABRACONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACIONTRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_funcao_1CLEAR vg_palavraENDIFENDIFENDDO- BUSCA NOMBRE DE LA FUNCION PARA FUTURA BUSQUEDA POR USER EXITCLEAR vg_pnameSELECT SINGLE pnameINTO vg_pnameFROM tfdirWHERE funcname EQ vg_palavraIF sy-subrc EQ 0

READ TABLE ti_includes WITH KEY nome = vg_pnameIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_pname TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIF

ENDIF

ENDIF

ENDFORM PROCURA_FUNCAO

amp---------------------------------------------------------------------amp Form VERIFICA_INCLUDE_FUNCAO_SUBMITamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM verifica_include_funcao_submit

CHECK p_ue IS NOT INITIAL OR p_badi IS NOT INITIALOR p_bte IS NOT INITIAL OR p_enh IS NOT INITIAL

LOOP AT ti_includes

ADD 1 TO vg_contadorDESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfillMOVE ti_includes-nivel TO vg_nivelADD 1 TO vg_nivel

- BORRA TABLA INTERNAREFRESH ti_programa

- REALIZA LECTURA DE INCLUDEFUNCION ALMACENANDO EN TABLA INTERNAREAD REPORT ti_includes-nome INTO ti_programa

LOOP AT ti_programa

- PROCURA POR INCLUDESIF p_incl EQ c_xPERFORM procura_includeENDIF- PROCURA POR FUNCIONIF p_func EQ c_xPERFORM procura_funcaoENDIF- PROCURA POR SUBMITIF p_submit EQ c_xPERFORM procura_submitENDIF

ENDLOOP

ENDLOOP

ENDFORM VERIFICA_INCLUDE_FUNCAO_SUBMIT

amp---------------------------------------------------------------------amp Form EVITAR_TIME_OUTamp--------------------------------------------------------------------- Evito el TIME OUT visualizando un mensaje----------------------------------------------------------------------FORM evitar_time_out USING p_tfill LIKE sy-tfill

DATAvl_total(10) TYPE n

vl_atual(10) TYPE nl_tout LIKE sy-timlol_time(10) TYPE c

GET TIME FIELD l_tout

l_tout = l_tout - w_tini

MOVEp_tfill TO vl_totalvg_contador TO vl_atual

SHIFT vl_total LEFT DELETING LEADING 0SHIFT vl_atual LEFT DELETING LEADING 0WRITE l_tout TO l_time

CONCATENATE Tpo l_time Total vl_total Actual vl_atualINTO vg_textoSEPARATED BY space

CALL FUNCTION SAPGUI_PROGRESS_INDICATOREXPORTINGtext = vg_texto

ENDFORM EVITAR_TIME_OUT

amp---------------------------------------------------------------------amp Form PROCURA_SUBMITamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_submit

CLEAR vg_conta_espaco vg_palavra vg_ini_contagem

- VERIFICA SI LA LINEA DEL PROGRAMA EXISTE ALGUN INCLUDESEARCH ti_programa-cf FOR c_submit- SE ENCONTRO EN EL INCLUDE Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DEL INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF vg_ini_contagem EQ c_x AND vg_caracter IS INITIALADD 1 TO vg_conta_espacoENDIF

IF NOT vg_caracter IS INITIALMOVE c_x TO vg_ini_contagemIF vg_caracter EQ c_pontoEXITENDIF- ARMA PALABRAIF vg_conta_espaco LT 2CONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACION

TRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_submitCLEAR vg_palavraENDIFELSEEXITENDIFENDIFENDDO- BUSCA NOMBRE DE LA FUNCION PARA FUTURA BUSQUEDA POR USER EXITREAD TABLE ti_includes WITH KEY nome = vg_palavraIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_palavra TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIFENDIF

ENDFORM PROCURA_SUBMIT

amp---------------------------------------------------------------------amp Form CONSISTI_PARAMETROSamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM consisti_parametros

IF p_nivel IS INITIALMOVE 1 TO p_nivelENDIF

IF p_prog IS INITIAL AND p_tcode IS INITIAL- EL NOMBRE DEL PROGRAMA Y EL NOMBRE DE LA TRANSACCION NO PUEDEN SER- NULOS UNO DE ELLOS DEBE SER INFORMADOMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e01STOPENDIF

IF NOT p_prog IS INITIAL AND NOT p_tcode IS INITIAL- SE SOLICITA AL USUARIO QUE INFORME NOMBRE DE PROGRAMA O TRANSACCIONMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e02STOPENDIF

IF p_ue IS INITIAL AND p_badi IS INITIAL AND p_bte IS INITIALAND p_sust IS INITIAL AND p_val IS INITIAL AND p_fdex IS INITIALAND p_enh IS INITIAL- SE SOLICITA AL USUARIO QUE INFORME UN TIPO DE MEJORAMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e03STOPENDIF

ENDFORM CONSISTI_PARAMETROS

amp---------------------------------------------------------------------

amp Form INICIALIZA_TABELAamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM inicializa_tabela

DATAe_tstc TYPE tstcl_tcode TYPE sy-tcode

REFRESH ti_includes

IF NOT p_prog IS INITIAL

MOVE p_prog TO ti_includes-nome0 TO ti_includes-nivelAPPEND ti_includes

- BUSCO EL PROGRAMAREAD REPORT ti_includes-nome INTO ti_programa

IF sy-subrc EQ 0REFRESH ti_programaELSE- EL PROGRAMA NO EXISTEMESSAGE s893(pz) WITH El programa p_prog no existeSTOPENDIF

ELSEIF NOT p_tcode IS INITIAL

SELECT SINGLE FROM tstcWHERE tcode EQ p_tcode

IF sy-subrc EQ 0

IF tstc-pgmna IS NOT INITIALMOVE tstc-pgmna TO ti_includes-nome0 TO ti_includes-nivelAPPEND ti_includesELSE Se trata de una transaccioacuten de paraacutemetros Obtengo la transaccioacuten asociadaCALL FUNCTION RS_TRANSACTION_SINGLE_GETEXPORTINGparameter_tcode = p_tcodeIMPORTINGtcode = l_tcode

SELECT SINGLE INTO e_tstcFROM tstcWHERE tcode EQ l_tcode

IF sy-subrc EQ 0MOVE e_tstc-pgmna TO ti_includes-nome0 TO ti_includes-nivel

APPEND ti_includesELSE- LA TRANSACCIOacuteN NO EXISTEMESSAGE s893(pz) WITH La transaccioacuten p_tcode no existeENDIFENDIFELSE- LA TRANSACCIOacuteN NO EXISTEMESSAGE s893(pz) WITH La transaccioacuten p_tcode no existeSTOPENDIFENDIF

ENDFORM INICIALIZA_TABELA

amp---------------------------------------------------------------------amp Form armar_alvamp--------------------------------------------------------------------- Armo el ALV----------------------------------------------------------------------FORM armar_alv

DATAl_repid TYPE sy-repid

MOVE sy-repid TO l_repid

CALL FUNCTION REUSE_ALV_BLOCK_LIST_INITEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMAND

IF p_ue IS NOT INITIALPERFORM construir_catalogo_exitPERFORM definir_layout USING TI_USER_EXITCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGEPERFORM sort TABLES ti_sortUSING TI_USER_EXIT

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_USER_EXITit_events = ti_eventsit_sort = ti_sorti_text = User-exitTABLESt_outtab = ti_user_exitEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

PERFORM construir_catalogo_uexitPERFORM definir_layout USING TI_FINAL

CHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_UEXITPERFORM sort TABLES ti_sortUSING TI_FINAL

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FINALit_events = ti_eventsit_sort = ti_sorti_text = User-exit TxCMODTABLESt_outtab = ti_finalEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_badi IS NOT INITIALPERFORM construir_catalogo_badiPERFORM definir_layout USING TI_BADICHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BADIPERFORM sort TABLES ti_sortUSING TI_BADI

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_BADIit_events = ti_eventsit_sort = ti_sorti_text = BadisTABLESt_outtab = ti_badiEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_bte IS NOT INITIALPERFORM construir_catalogo_btePERFORM definir_layout USING TI_BTECHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BTEPERFORM sort TABLES ti_sortUSING TI_BTE

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layout

it_fieldcat = ti_cati_tabname = TI_BTEit_events = ti_eventsit_sort = ti_sorti_text = BTETABLESt_outtab = ti_bteEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_enh IS NOT INITIALPERFORM construir_catalogo_enhPERFORM definir_layout USING TI_ENHCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHPERFORM sort TABLES ti_sortUSING TI_ENH

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHit_events = ti_eventsit_sort = ti_sorti_text = ENHTABLESt_outtab = ti_enhEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

PERFORM construir_catalogo_enhobjPERFORM definir_layout USING TI_ENHOBJCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHOBJPERFORM sort TABLES ti_sortUSING TI_ENHOBJ

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHOBJit_events = ti_eventsit_sort = ti_sorti_text = ENHOBJTABLESt_outtab = ti_enhobjEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_sust IS NOT INITIALPERFORM construir_catalogo_sustPERFORM definir_layout USING TI_SUSTCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_SUSTPERFORM sort TABLES ti_sortUSING TI_SUST

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_SUSTit_events = ti_eventsit_sort = ti_sorti_text = SustitucionesTABLESt_outtab = ti_sustEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_val IS NOT INITIALPERFORM construir_catalogo_valPERFORM definir_layout USING TI_VALCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_VALPERFORM sort TABLES ti_sortUSING TI_VAL

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_VALit_events = ti_eventsit_sort = ti_sorti_text = ValidacionesTABLESt_outtab = ti_valEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_fdex IS NOT INITIALPERFORM construir_catalogo_fdexPERFORM definir_layout USING TI_FDEXCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_FDEX

PERFORM sort TABLES ti_sortUSING TI_FDEX

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FDEXit_events = ti_eventsit_sort = ti_sorti_text = Field-exitTABLESt_outtab = ti_fdexEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

ENDFORM armar_alv

amp---------------------------------------------------------------------amp Form construir_catalogo_EXITamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_exit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_USER_EXITi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03

CF X c_text_04

ENDFORM construir_catalogo_EXIT

amp---------------------------------------------------------------------amp Form asignar_campo_a_catalogoamp--------------------------------------------------------------------- Asignar campo al catalogo ALV----------------------------------------------------------------------FORM asignar_campo_a_catalogo TABLES pt_cat STRUCTURE wa_catUSING p_fieldname LIKE wa_cat-fieldnamep_key LIKE wa_cat-keyp_col_pos TYPE cp_fix_column LIKE wa_cat-fix_columnp_hotspot LIKE wa_cat-hotspotp_do_sum LIKE wa_cat-do_sump_input LIKE wa_cat-inputp_checkbox LIKE wa_cat-checkboxp_no_out LIKE wa_cat-no_outp_icon LIKE wa_cat-iconp_reptext_ddic LIKE wa_cat-reptext_ddic

STATICS l_col_pos LIKE sy-cucol

Asignar atributos de campo en el catalogo de cabecera ALVCLEAR wa_catREAD TABLE pt_cat INTO wa_catWITH KEY fieldname = p_fieldname

CHECK sy-subrc EQ 0

IF NOT p_reptext_ddic IS INITIALwa_cat-seltext_l = wa_cat-seltext_m =wa_cat-seltext_s = wa_cat-reptext_ddic = p_reptext_ddicENDIF

IF p_col_pos EQ X Inicializo el conteo para ordenar las columnasl_col_pos = 1ELSEADD 1 TO l_col_posENDIF

wa_cat-fieldname = p_fieldnamewa_cat-key = p_keywa_cat-col_pos = l_col_poswa_cat-fix_column = p_fix_columnwa_cat-hotspot = p_hotspotwa_cat-do_sum = p_do_sumwa_cat-edit = wa_cat-input = p_inputwa_cat-checkbox = p_checkboxwa_cat-no_out = p_no_outwa_cat-icon = p_icon

MODIFY pt_cat FROM wa_cat INDEX sy-tabix

ENDFORM asignar_campo_a_catalogo

amp---------------------------------------------------------------------amp Form definir_layoutamp--------------------------------------------------------------------- Definir atributos del layout de reporte----------------------------------------------------------------------FORM definir_layout USING p_table TYPE slis_layout_alv-box_tabnameCHANGING p_layout TYPE slis_layout_alv

CLEAR p_layout

IF p_table NE TI_CIMP Marco el campo para la seleccioacutenp_layout-box_fieldname = SELp_layout-box_tabname = p_tableENDIFp_layout-zebra = Xp_layout-colwidth_optimize = Xp_layout-no_vline = p_layout-no_colhead = p_layout-lights_condense = Xp_layout-detail_popup = Xp_layout-detail_initial_lines = Xp_layout-flexible_key = p_layout-key_hotspot = p_layout-confirmation_prompt = X

ENDFORM definir_layout

amp---------------------------------------------------------------------amp Form construir_eventosamp--------------------------------------------------------------------- Asignar eventos soportados----------------------------------------------------------------------FORM construir_eventos USING p_form LIKE wa_events-formDATAl_type(1) TYPE n

REFRESH ti_eventsCLEAR wa_events

ALV Simple Block appendl_type = 2

Buscar secciones para eventosCALL FUNCTION REUSE_ALV_EVENTS_GETEXPORTINGi_list_type = l_typeIMPORTINGet_events = ti_events

Leer evento TOP_OF_PAGEREAD TABLE ti_events WITH KEY name = slis_ev_top_of_pageINTO wa_events Asignar Rutina FORM TOP_OF_PAGE a eventoIF sy-subrc = 0MOVE p_form TO wa_events-formMODIFY ti_events FROM wa_events INDEX sy-tabixENDIF

ENDFORM construir_eventos

amp---------------------------------------------------------------------amp Form top_of_pageamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_user_exitWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUser-exit

ENDFORM top_of_page

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_UEXITamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_uexit

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_finalWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUSER-EXITs TxSMOD

ENDFORM TOP_OF_PAGE_UEXIT

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_FDEXamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_fdex

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_fdexWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incFIELD-EXITs

ENDFORM TOP_OF_PAGE_FDEX

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BADIamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_badi

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_badiWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBADIs

ENDFORM TOP_OF_PAGE_BADI

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BTEamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_bte

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_bteWRITE sy-tfill TO l_tfill_cant

CONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBTEs

ENDFORM TOP_OF_PAGE_BTE

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enh

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_enhWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENH

amp---------------------------------------------------------------------amp Form sortamp--------------------------------------------------------------------- Creo el sort del ALV (FM)---------------------------------------------------------------------- --gtPT_sort Tabla --gtP_tabname Nombre de la tabla----------------------------------------------------------------------FORM sort TABLES pt_sortUSING p_tabname TYPE any

CLEAR pt_sort wa_sortREFRESH pt_sort

CASE p_tabnameWHEN TI_SUST

wa_sort-fieldname = SUBSTIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = SUBSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = CONSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN TI_VAL

wa_sort-fieldname = VALIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = VALSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN TI_ENHOBJ

wa_sort-fieldname = ENHNAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = VERSIONwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN OTHERS

IF p_tabname NE TI_FINAL

wa_sort-fieldname = TIPOwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

IF p_tabname NE TI_FDEX

wa_sort-fieldname = NIVELwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = PROGRAMAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = LINEAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

ENDIF

ELSE

wa_sort-fieldname = NAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = MEMBERwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sortENDIFENDCASE

ENDFORM sort

amp---------------------------------------------------------------------amp Form mostrar_listadoamp--------------------------------------------------------------------- Mostrar listado ALV----------------------------------------------------------------------FORM mostrar_listado

wa_print-reserve_lines = 2

CALL FUNCTION REUSE_ALV_BLOCK_LIST_DISPLAY

EXPORTINGis_print = wa_printEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM mostrar_listado

amp---------------------------------------------------------------------amp Form user_commandamp--------------------------------------------------------------------- Evaluar acciones del usuario----------------------------------------------------------------------FORM user_command USING ucomm LIKE sy-ucommsfields TYPE slis_selfield

DATA l_break TYPE c

Rescatar el registro seleccionadoCASE sfields-tabnameWHEN TI_USER_EXITREAD TABLE ti_user_exit INDEX sfields-tabindexWHEN TI_BADIREAD TABLE ti_badi INDEX sfields-tabindexWHEN TI_BTEREAD TABLE ti_bte INDEX sfields-tabindexWHEN TI_ENHREAD TABLE ti_enh INDEX sfields-tabindexWHEN TI_ENHOBJREAD TABLE ti_enhobj INDEX sfields-tabindexWHEN TI_FDEXREAD TABLE ti_fdex INDEX sfields-tabindexWHEN TI_FINALREAD TABLE ti_final INDEX sfields-tabindexWHEN TI_SUSTREAD TABLE ti_sust INDEX sfields-tabindexWHEN TI_VALREAD TABLE ti_val INDEX sfields-tabindexWHEN TI_CIMPREAD TABLE ti_cimp INDEX sfields-tabindexENDCASE

Seleccion de opcionCASE ucomm DOUBLE CLICKWHEN ampIC1 Evaluar valor de campo seleccionadoCHECK NOT sfields-value IS INITIAL

CASE sfields-tabnameWHEN TI_USER_EXIT USER-EXITIF ti_user_exit-tipo EQ sfields-value(4)SEARCH ti_user_exit-cf FOR c_enhanceCHECK sy-subrc EQ 0PERFORM visualizar_exit USING ti_user_exit-programati_user_exit-cf

ELSEIF ti_user_exit-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_user_exit-programati_user_exit-lineaMOVE X TO l_breakELSEIF ti_user_exit-break EQ sfields-value(4)OR ti_user_exit-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_user_exit-programati_user_exit-lineati_user_exit-breakMOVE X TO l_breakENDIF

WHEN TI_FINAL USER-EXIT Tx CMODIF ti_final-name EQ sfields-valueCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = ti_final-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSEIF ti_final-include EQ sfields-valuePERFORM visualizar_linea USING ti_final-programa1MOVE X TO l_breakENDIF

WHEN TI_BADI BadiIF ti_badi-tipo EQ sfields-value(4)PERFORM visualizar_badi USING ti_badi-cfELSEIF ti_badi-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_badi-programati_badi-lineaMOVE X TO l_breakELSEIF ti_badi-break EQ sfields-value(4)OR ti_badi-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_badi-programati_badi-lineati_badi-breakMOVE X TO l_breakENDIF

WHEN TI_BTE BTEIF ti_bte-tipo EQ sfields-value(4)PERFORM fibf USING ti_bte-cfELSEIF ti_bte-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_bte-programati_bte-lineaMOVE X TO l_breakELSEIF ti_bte-break EQ sfields-value(4)OR ti_bte-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_bte-programati_bte-linea

ti_bte-breakMOVE X TO l_breakENDIF

WHEN TI_ENH Punto de ampliacioacutenIF ti_enh-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_enh-programati_enh-lineaMOVE X TO l_breakELSEIF ti_enh-tipo EQ sfields-value(4)PERFORM bi_se18 USING ti_enh-cfENDIF

WHEN TI_ENHOBJ Punto de ampliacioacutenIF ti_enhobj-enhname EQ sfields-value(30)PERFORM bi_se19 USING ti_enhobj-enhnameENDIF

WHEN TI_SUST SustitucionesIF ti_sust-substid EQ sfields-value(7) ORti_sust-subseqnr EQ sfields-value(3)PERFORM visualizar_sust USING ti_sust-substidti_sust-subseqnrENDIF

WHEN TI_VAL ValidacionesIF ti_val-valid EQ sfields-value(7) ORti_val-valseqnr EQ sfields-value(3)PERFORM visualizar_val USING ti_val-validti_val-valseqnrENDIF

WHEN TI_FDEX Field-exitIF ti_fdex-tipo EQ sfields-valueSUBMIT rsmodprf AND RETURNELSEIF ti_fdex-cf(60) EQ sfields-value Visualizo el field-exitCALL FUNCTION RS_FUNCTION_SHOWEXPORTINGfuncname = ti_fdex-cf

CALL FUNCTION RS_NAVIGATION_MONITORENDIF

WHEN TI_CIMP Customer implementation

CASE sfields-fieldnameWHEN ENHNAMEPERFORM bi_se19 USING ti_cimp-enhnameWHEN ENHINCLUDEPERFORM visualizar_enh_cf USING ti_cimp-enhinclude

WHEN OTHERS DO NOTHING ENDCASE

WHEN OTHERS DO NOTHING ENDCASE

WHEN OTHERS DO NOTHING ENDCASE

IF l_break IS NOT INITIAL AND sfields-tabname NE TI_CIMPWAIT UP TO 1 SECONDSPERFORM cargar_breakENDIFsfields-refresh = X

ENDFORM user_command

amp---------------------------------------------------------------------amp Form visualizar_lineaamp--------------------------------------------------------------------- Visualizo la linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_linea USING p_programa TYPE sy-repidp_linea

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_programaobject_type = c_typeposition = p_lineaEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM visualizar_linea

amp---------------------------------------------------------------------amp Form buscar_exitamp--------------------------------------------------------------------- Buscar USER-EXIT----------------------------------------------------------------------FORM buscar_exit

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN USER-EXITSEARCH ti_programa-cf FOR c_user_exit- SE ENCONTRO UN USER-EXIT Y SE VERIFICA SI LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS PERFORMSEARCH ti_programa-cf FOR c_performCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LAS ASIGNACIONESSEARCH ti_programa-cf FOR c_igualCHECK sy-subrc NE 0

CLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INIacuteCIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF

ENDFORM buscar_exit

amp---------------------------------------------------------------------amp Form buscar_badiamp--------------------------------------------------------------------- Buscar BADI----------------------------------------------------------------------FORM buscar_badi

DATAl_subrc LIKE sy-subrc

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BADISEARCH ti_programa-cf FOR c_badi- SE ENCONTRO UNA BADI Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

SEARCH ti_programa-cf FOR c_includeIF sy-subrc NE 0CLEAR l_subrcSEARCH ti_programa-cf FOR c_methodIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_funcao_2IF sy-subrc NE 0SEARCH ti_programa-cf FOR c_performIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_type_refIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_formMOVE 4 TO l_subrcENDIFENDIFENDIFENDIF

IF l_subrc EQ 0CLEAR ti_badi

- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIFELSECHECK p_handl IS NOT INITIAL- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA INSTANCIA DE- UNA BADISEARCH ti_programa-cf FOR c_handler- SE ENCONTRO UNA INSTANCIA DE IMPLEMENACIOacuteN Y SE VERIFICA SI LA LINEA- NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

SEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0CLEAR ti_badi- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIF

ENDFORM buscar_badi

amp---------------------------------------------------------------------amp Form buscar_bteamp--------------------------------------------------------------------- Buscar BTE----------------------------------------------------------------------FORM buscar_bte

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OPEN_FI_PERFORM

- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endform

CHECK sy-subrc NE 0

CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte1- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OUTBOUND_CALL

- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0

CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF

ENDFORM buscar_bte

amp---------------------------------------------------------------------amp Form repid_f4amp--------------------------------------------------------------------- Ejecuto el F4 para buscar programas----------------------------------------------------------------------FORM repid_f4

CALL FUNCTION REPOSITORY_INFO_SYSTEM_F4EXPORTINGobject_type = PROGobject_name = p_progsuppress_selection = XIMPORTINGobject_name_selected = p_progEXCEPTIONS

cancel = 1wrong_type = 2OTHERS = 3

ENDFORM repid_f4

amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf

DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

SEARCH p_cf FOR 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 INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

READ TABLE lt_cf INDEX 4

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

CHECK sy-subrc IS INITIAL

Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten

textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer

CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4

IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF

WHEN OTHERS Do Nothing ENDCASE

ENDFORM visualizar_badi

amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf

DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

CLEAR d010inc modsap modact

Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid

IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF

SEARCH p_cf FOR c_enhance

CHECK sy-subrc IS INITIAL

REFRESH lt_cf

l_cf = 500 - sy-fdpos

MOVE p_cf+sy-fdpos(l_cf) TO l_linea

SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3

TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS

Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _

Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit

CHECK sy-subrc IS INITIAL

Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM

modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3

ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname

CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ENDIF

ENDFORM visualizar_exit

amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit

DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo

DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe

DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE

CHECK p_fdex IS NOT INITIAL

CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe

MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex

IF p_prog IS NOT INITIAL

MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF

Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog

LOOP AT lt_d020s

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

REFRESH lt_d021s

Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4

Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X

SEARCH lt_d021s-fnam FOR -

IF sy-subrc IS INITIAL

MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum

Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname

APPEND lt_campo

ENDIF

ENDLOOPENDLOOP

CHECK lt_campo[] IS NOT INITIAL

SORT lt_campo BY repid dnum tabname fieldname

DELETE ADJACENT DUPLICATES FROM lt_campo

Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname

SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l

LOOP AT lt_dd03l

CLEAR tddir tddirs

SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname

CHECK sy-subrc IS INITIAL

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog

CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF

Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf

IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF

READ TABLE lt_fe WITH KEY cf = lt_fe-cf

CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP

LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex

ENDLOOP

ENDFORM buscar_field_exit

amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf

DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c

SEARCH p_cf FOR c_bte

IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ELSE

SEARCH p_cf FOR c_bte1

CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ENDIF

IF l_tipo IS NOT INITIAL

PERFORM visualizar_bte USING l_tipol_linea

ELSECALL TRANSACTION FIBFENDIF

ENDFORM fibf

amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT

EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM breakpoint

amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_badi

amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE

i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_bte

amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X TIPO X X c_text_05CF X c_text_04

ENDFORM construir_catalogo_FDEX

amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc

DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

CHECK lt_break[] IS NOT INITIAL

IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix

MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF

IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix

MOVEti_badi-linea TO l_lineti_badi-programa TO l_program

READ TABLE lt_break INTO wa_break

WITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF

IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix

MOVEti_bte-linea TO l_lineti_bte-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF

ENDFORM cargar_break

amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

DATAl_tabix TYPE sy-tabix

l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

SELECT SINGLE FROM d010incWHERE include = p_programa

IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF

MOVEp_linea TO l_linep_programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM asignar_break

amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit

IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF

PERFORM get_objects Get Objects

ENDFORM buscar_user_exit

amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects

DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area

DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix

SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog

IF sy-subrc = 0

SORT ti_tadir BY obj_name devclass

SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass

IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF

- Get UserExit namesLOOP AT ti_jtab

SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E

APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area

l_fname = ti_final-member

CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include

LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP

CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP

ENDFORM get_objects

amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X

ENDFORM construir_catalogo_uexit

amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------

FORM visualizar_ampliacion

DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF

SELECT SINGLE FROM modsapWHERE member EQ l_member

IF sy-subrc IS INITIAL

Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member

ENDIF

ENDFORM visualizar_ampliacion

amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea

RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs

REFRESH r_event r_procs

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event

SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs

SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE

ENDFORM visualizar_bte

amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE

----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c

DATAl_linea(500) TYPE c

DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

MOVE lt_fields-value TO l_linea

PERFORM visualizar_bte USING p_tipol_linea

ENDFORM cargar_bte

amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface

DATAl_linea(500) TYPE c

DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE

InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF

ENDFORM visualizar_interface

amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones

CHECK p_sust IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922

ENDFORM buscar_sustituciones

amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST

ENDFORM construir_catalogo_sust

amp---------------------------------------------------------------------

amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones

ENDFORM TOP_OF_PAGE_SUST

amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4

CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_sust

amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones

CHECK p_val IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931

ENDFORM buscar_validaciones

amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID

ENDFORM construir_catalogo_val

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones

ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2

CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_val

amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto

DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF

SELECT SINGLE FROM modsapWHERE name EQ l_name

IF sy-subrc IS INITIAL

MOVE l_name TO l_member

SELECT SINGLE FROM modactWHERE member EQ l_member

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF

ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF

ENDFORM visualizar_proyecto

amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel

APPEND ti_enh

ENDIFENDIFENDIF

ENDFORM buscar_punto_ampliacioacuten

amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_enh

amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh

DATA l_obj_name TYPE enhobj-obj_name

DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name

CHECK p_enh IS NOT INITIAL

IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF

REFRESH lt_obj_name

LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP

SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name

ENDFORM buscar_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X

ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME

ENDFORM construir_catalogo_enhobj

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENHOBJ

amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM bi_se19

amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro

CLEAR ti_bdcdatati_bdcdata-program = program

ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata

ENDFORM BDC_DYNPRO

amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval

CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata

ENDFORM BDC_FIELD

amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa

DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)

CHECK ti_gb31t[] IS NOT INITIAL

DO

Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2

IF l_exit EQ XEXITENDIF

CHECK l_exit IS INITIAL

Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND

CHECK l_boolpool IS NOT INITIAL

MOVE l_boolpool TO l_repid

Visualizo el programaPERFORM visualizar_linea USING l_repid01

ENDDO

ENDFORM visualizar_programa

amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope

STATICS l_flag TYPE c

DATA l_tit(65) TYPE c

CHECK l_flag IS INITIAL

l_flag = X

WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline

4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM texto_tope

amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf

DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off

CHECK l_off IS NOT INITIAL

ADD 7 TO l_offl_cf = 500 - l_off

SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_enhspotname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1

invalid_object_type = 2OTHERS = 3

ENDFORM bi_se18

amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit

DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE

DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE

MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE

MOVE lt_fields-value TO l_nameENDIF

Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_

LOOP AT lt_tfdir

CLEARl_group l_include l_namespace l_str_area

l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl

IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl

CHECK sy-subrc IS INITIAL

Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP

CHECK l_flag IS INITIAL

La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value

ENDFORM visualizar_fm_exit

amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter

tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten

ENDFORM def_text_parameter

amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones

Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt

Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt

Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt

icon_create RESULT name text infoicon_create

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 5: buscar_ampliaciones FOROSAP

vg_ini_contagem TYPE c INDICA QUE DEBE SER INICIADO EL CONTADORvg_conta_espaco TYPE n TOTAL DE ESPACIOS ( MAacuteXIMO 2 )

---------------------------------------------------------------------- DEFINICION DE Estructuras y tablas para ALV (FM)----------------------------------------------------------------------DATAwa_cat TYPE slis_fieldcat_alv WA cataacutelogoti_cat TYPE slis_t_fieldcat_alv TI cataacutelogowa_layout TYPE slis_layout_alv WA opciones listati_header TYPE slis_t_listheader TI cabecera listawa_header TYPE slis_listheader WA cabecera listawa_events TYPE slis_alv_event WA eventos listati_events TYPE slis_t_event TI eventos listawa_sort TYPE slis_sortinfo_alv WA sortti_sort TYPE slis_t_sortinfo_alv TI sortwa_print TYPE slis_print_alv WA print

---------------------------------------------------------------------- PARAMETROS----------------------------------------------------------------------

- DATOS OBLIGATORIOSSELECTION-SCREEN BEGIN OF BLOCK bl01 WITH FRAME TITLE tit1

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text2POSITION 20PARAMETERS p_tcode LIKE tstc-tcode TransaccioacutenSELECTION-SCREEN END OF LINE

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text1POSITION 20PARAMETERS p_prog LIKE sy-repid ProgramaSELECTION-SCREEN END OF LINE

SELECTION-SCREEN END OF BLOCK bl01

SELECTION-SCREEN BEGIN OF BLOCK bl02 WITH FRAME TITLE tit2 SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text7POSITION 20PARAMETERS p_ue AS CHECKBOX User-exit

Boton de Exits en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(45) btn USER-COMMAND extVISIBLE LENGTH 12

Boton de Proyectos de Exits en la DYNPROSELECTION-SCREEN PUSHBUTTON 38(45) ext1 USER-COMMAND ext1VISIBLE LENGTH 12

Boton de User-Exits en la DYNPROSELECTION-SCREEN PUSHBUTTON 51(45) ext2 USER-COMMAND ext2VISIBLE LENGTH 12

SELECTION-SCREEN END OF LINE

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text8POSITION 20PARAMETERS p_badi AS CHECKBOX Badis Boton de Interface en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(60) badi USER-COMMAND badiVISIBLE LENGTH 25SELECTION-SCREEN END OF LINE

SELECTION-SCREEN BEGIN OF LINEPOSITION 25PARAMETERS p_handl AS CHECKBOX DEFAULT XCL_EXITHANDLER=gtGET_INSTANCESELECTION-SCREEN COMMENT 30(40) text12SELECTION-SCREEN END OF LINE

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text9POSITION 20PARAMETERS p_bte AS CHECKBOX Bte Boton de Tx FIBF en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(60) bte1 USER-COMMAND bte1VISIBLE LENGTH 1 Boton de Tx Evento en la DYNPROSELECTION-SCREEN PUSHBUTTON 29(60) bte2 USER-COMMAND bte2VISIBLE LENGTH 10 Boton de Tx Proceso en la DYNPROSELECTION-SCREEN PUSHBUTTON 40(60) bte3 USER-COMMAND bte3VISIBLE LENGTH 10

SELECTION-SCREEN END OF LINE

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(19) text14POSITION 20PARAMETERS p_enh AS CHECKBOX Punto de ampliacioacuten

Boton de Tx SENH en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(60) senh USER-COMMAND senhVISIBLE LENGTH 1

Boton de Customer Implementation en la DYNPROSELECTION-SCREEN PUSHBUTTON 29(60) cimp USER-COMMAND cimpVISIBLE LENGTH 24

SELECTION-SCREEN END OF LINE

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text10POSITION 20PARAMETERS p_sust AS CHECKBOX Sustitucioacuten

Boton de Sustitucioacuten en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(45) btn1 USER-COMMAND obbVISIBLE LENGTH 12

Boton de programa sustitucioacuten en la DYNPROSELECTION-SCREEN PUSHBUTTON 38(45) sust USER-COMMAND sustVISIBLE LENGTH 15

SELECTION-SCREEN END OF LINE

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text13POSITION 20PARAMETERS p_val AS CHECKBOX Validacioacuten

Boton de Validacioacuten en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(45) ob28 USER-COMMAND ob28VISIBLE LENGTH 12

Boton de programa sustitucioacuten en la DYNPROSELECTION-SCREEN PUSHBUTTON 38(45) val USER-COMMAND valVISIBLE LENGTH 15

SELECTION-SCREEN END OF LINE

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text11POSITION 20PARAMETERS p_fdex AS CHECKBOX Field-exit

Boton de Field-exit en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(60) btn2 USER-COMMAND fdexVISIBLE LENGTH 28

SELECTION-SCREEN END OF LINE

SELECTION-SCREEN END OF BLOCK bl02

- DATOS OPCIONALESSELECTION-SCREEN BEGIN OF BLOCK bl03 WITH FRAME TITLE tit3

SELECTION-SCREEN BEGIN OF LINE Boton de ALL en la DYNPROSELECTION-SCREEN PUSHBUTTON 18(60) all USER-COMMAND allVISIBLE LENGTH 1 Boton de DAL en la DYNPROSELECTION-SCREEN PUSHBUTTON 21(60) dal USER-COMMAND dalVISIBLE LENGTH 1SELECTION-SCREEN END OF LINE

SELECTION-SCREEN ULINE

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text3POSITION 20PARAMETERS p_incl AS CHECKBOX DEFAULT X IncludesSELECTION-SCREEN END OF LINE

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text4POSITION 20PARAMETERS p_func AS CHECKBOX DEFAULT X Funciones

SELECTION-SCREEN END OF LINE

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text5POSITION 20PARAMETERS p_submit AS CHECKBOX DEFAULT X SubmitSELECTION-SCREEN END OF LINE

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text6POSITION 20PARAMETERS p_nivel(2) TYPE n DEFAULT 04 NivelSELECTION-SCREEN END OF LINE

SELECTION-SCREEN END OF BLOCK bl03

Botoacuten de Marcar todo en el STATUS GUISELECTION-SCREEN FUNCTION KEY 1 Botoacuten de Desmarcar todo en el STATUS GUISELECTION-SCREEN FUNCTION KEY 2 Botoacuten de Breakpoint en el STATUS GUISELECTION-SCREEN FUNCTION KEY 3

----------------------------------------------------------------------- DEFINICIOacuteN DE MACROS-----------------------------------------------------------------------DEFINE icon_create Creo para el botoacuten indicado el icono y los textos correspondientes

call function ICON_CREATEexportingname = amp2text = amp3info = amp4importingresult = amp1exceptionsothers = 0

END-OF-DEFINITION icon_create

----------------------------------------------------------------------- INICIALIZACIOacuteN DE VARIABLES-----------------------------------------------------------------------INITIALIZATION

PERFORM def_text_parameter

PERFORM def_botones

CLEAR ti_gb31tREFRESH ti_gb31t

Obtengo ValidacioacutenSustitucioacutenEventosTextoSELECT INTO TABLE ti_gb31tFROM gb31tWHERE spras EQ sy-langu

----------------------------------------------------------------------- AT SELECTION-SCREEN-----------------------------------------------------------------------

AT SELECTION-SCREEN

CASE sscrfields-ucommWHEN FC01MOVE X TO p_ue p_badi p_bte p_sust p_val p_fdex p_enhWHEN FC02CLEAR p_ue p_badi p_bte p_sust p_val p_fdex p_enhWHEN FC03PERFORM breakpointWHEN EXTPERFORM visualizar_ampliacionWHEN EXT1PERFORM visualizar_proyectoWHEN EXT2PERFORM visualizar_fm_exitWHEN BADIPERFORM visualizar_interfaceWHEN OBBCALL TRANSACTION OBBHWHEN OB28CALL TRANSACTION OB28WHEN SUST OR VALPERFORM visualizar_programaWHEN FDEXSUBMIT rsmodprf AND RETURNWHEN BTE1CALL TRANSACTION FIBFWHEN BTE2PERFORM cargar_bte USING EWHEN BTE3PERFORM cargar_bte USING PWHEN SENHSUBMIT sapmsenh VIA SELECTION-SCREENAND RETURNWHEN CIMPPERFORM visualizar_imp_enhWHEN ALLMOVE X TO p_incl p_func p_submitWHEN DALCLEAR p_incl p_func p_submitWHEN OTHERS Do Nothing ENDCASE

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_prog

PERFORM repid_f4

---------------------------------------------------------------------- INICIO----------------------------------------------------------------------START-OF-SELECTION

GET TIME FIELD w_tini

- CONSISTENCIAS DE LOS PARAMETROSPERFORM consisti_parametros

- INICIALIZA TABLAPERFORM inicializa_tabela

- VERIFICA SI EN EL PROGRAMA EXISTE ALGUN INCLUDE FUNCION O SUBMITPERFORM verifica_include_funcao_submit

- ANALISA LOS INCLUDES Y BUSCA POR USER-EXIT BADIS Y BTEPERFORM busca_user_exit_badi_bte

- ANALISA LOS INCLUDES Y BUSCA LOS FIELD-EXITSPERFORM buscar_field_exit

- OBTENGO LOS EXITs DE LA TRANSACCIOacuteNPERFORM buscar_user_exit

- OBTENGO LAS PUNTOS DE AMPLIACIOacuteNPERFORM buscar_enh

- OBTENGO LAS SUSTITUCIONESPERFORM buscar_sustituciones

- OBTENGO LAS VALIDACIONESPERFORM buscar_validaciones

- CARGO LOS BREAKPOINTSPERFORM cargar_break

- VISUALIZA LAS AMPLIACIONES ENCONTRADASPERFORM exibe_user_exit

---------------------------------------------------------------------- FIN----------------------------------------------------------------------END-OF-SELECTION

amp---------------------------------------------------------------------amp Form BUSCA_USER_EXIT_BADI_BTEamp--------------------------------------------------------------------- Busca EXITs BADIs y BTE en el coacutedigo fuente----------------------------------------------------------------------FORM busca_user_exit_badi_bte

- VERIFICA SI EN LOS INCLUDES SELECIONADOS EXISTEN EXITSLOOP AT ti_includes

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

- BORRA LA TABLA INTERNAREFRESH ti_programa

- REALIZA LECTURA DE INCLUDE ALMACENANDO EN TABLA INTERNAREAD REPORT ti_includes-nome INTO ti_programa

LOOP AT ti_programa

IF p_ue EQ XPERFORM buscar_exitPERFORM busca_enhancementsENDIF

IF p_badi EQ XPERFORM buscar_badiENDIF

IF p_bte EQ XPERFORM buscar_bteENDIF

IF p_enh EQ XPERFORM buscar_punto_ampliacionENDIF

ENDLOOPENDLOOP

ENDFORM BUSCA_USER_EXIT_BADI_BTE

amp---------------------------------------------------------------------amp Form BUSCA_ENHANCEMENTSamp--------------------------------------------------------------------- Busca las llamadas a los USER-EXIT----------------------------------------------------------------------FORM busca_enhancements

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE EN ALGUN ENHANCEMENTSEARCH ti_programa-cf FOR c_enhance- SE ENCONTRO EL ENHANCEMENT Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentarioCLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF

ENDFORM BUSCA_ENHANCEMENTS

amp---------------------------------------------------------------------amp Form EXIBE_USER_EXITamp--------------------------------------------------------------------- Muestra los datos----------------------------------------------------------------------FORM exibe_user_exit

PERFORM armar_alv

PERFORM mostrar_listado

ENDFORM EXIBE_USER_EXIT

amp---------------------------------------------------------------------amp Form PROCURA_INCLUDEamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_include

CLEAR vg_palavra

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN INCLUDESEARCH ti_programa-cf FOR c_include- SE ENCONTRO EN EL INCLUDE Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN STRUCTURESEARCH ti_programa-cf FOR c_struct

IF sy-subrc IS INITIALEXITENDIF

- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DEL INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF NOT vg_caracter IS INITIAL- VERIFICA SI NO ES FIN DE COMANDOIF vg_caracter EQ c_pontoEXITENDIF- ARMA PALABRACONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACIONTRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_includeCLEAR vg_palavraENDIFENDIFENDDO- GRABA NOMBRE DEL INCLUDE PARA FUTURA BUSQUEDA POR USER EXITREAD TABLE ti_includes WITH KEY nome = vg_palavraIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_palavra TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIF

ENDIF

ENDFORM PROCURA_INCLUDE

amp---------------------------------------------------------------------amp Form PROCURA_FUNCAOamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_funcao

CLEAR vg_conta_aspavg_palavra

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA FUNCIONSEARCH ti_programa-cf FOR c_funcao_2- SE ENCONTRO UNA FUNCION Y LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DE LA INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF NOT vg_caracter IS INITIAL- VERIFICA SI NO ES FIN DE COMANDOIF vg_caracter EQ c_aspaADD 1 TO vg_conta_aspaIF vg_conta_aspa EQ 2EXITENDIFENDIF- ARMA PALABRACONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACIONTRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_funcao_1CLEAR vg_palavraENDIFENDIFENDDO- BUSCA NOMBRE DE LA FUNCION PARA FUTURA BUSQUEDA POR USER EXITCLEAR vg_pnameSELECT SINGLE pnameINTO vg_pnameFROM tfdirWHERE funcname EQ vg_palavraIF sy-subrc EQ 0

READ TABLE ti_includes WITH KEY nome = vg_pnameIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_pname TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIF

ENDIF

ENDIF

ENDFORM PROCURA_FUNCAO

amp---------------------------------------------------------------------amp Form VERIFICA_INCLUDE_FUNCAO_SUBMITamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM verifica_include_funcao_submit

CHECK p_ue IS NOT INITIAL OR p_badi IS NOT INITIALOR p_bte IS NOT INITIAL OR p_enh IS NOT INITIAL

LOOP AT ti_includes

ADD 1 TO vg_contadorDESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfillMOVE ti_includes-nivel TO vg_nivelADD 1 TO vg_nivel

- BORRA TABLA INTERNAREFRESH ti_programa

- REALIZA LECTURA DE INCLUDEFUNCION ALMACENANDO EN TABLA INTERNAREAD REPORT ti_includes-nome INTO ti_programa

LOOP AT ti_programa

- PROCURA POR INCLUDESIF p_incl EQ c_xPERFORM procura_includeENDIF- PROCURA POR FUNCIONIF p_func EQ c_xPERFORM procura_funcaoENDIF- PROCURA POR SUBMITIF p_submit EQ c_xPERFORM procura_submitENDIF

ENDLOOP

ENDLOOP

ENDFORM VERIFICA_INCLUDE_FUNCAO_SUBMIT

amp---------------------------------------------------------------------amp Form EVITAR_TIME_OUTamp--------------------------------------------------------------------- Evito el TIME OUT visualizando un mensaje----------------------------------------------------------------------FORM evitar_time_out USING p_tfill LIKE sy-tfill

DATAvl_total(10) TYPE n

vl_atual(10) TYPE nl_tout LIKE sy-timlol_time(10) TYPE c

GET TIME FIELD l_tout

l_tout = l_tout - w_tini

MOVEp_tfill TO vl_totalvg_contador TO vl_atual

SHIFT vl_total LEFT DELETING LEADING 0SHIFT vl_atual LEFT DELETING LEADING 0WRITE l_tout TO l_time

CONCATENATE Tpo l_time Total vl_total Actual vl_atualINTO vg_textoSEPARATED BY space

CALL FUNCTION SAPGUI_PROGRESS_INDICATOREXPORTINGtext = vg_texto

ENDFORM EVITAR_TIME_OUT

amp---------------------------------------------------------------------amp Form PROCURA_SUBMITamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_submit

CLEAR vg_conta_espaco vg_palavra vg_ini_contagem

- VERIFICA SI LA LINEA DEL PROGRAMA EXISTE ALGUN INCLUDESEARCH ti_programa-cf FOR c_submit- SE ENCONTRO EN EL INCLUDE Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DEL INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF vg_ini_contagem EQ c_x AND vg_caracter IS INITIALADD 1 TO vg_conta_espacoENDIF

IF NOT vg_caracter IS INITIALMOVE c_x TO vg_ini_contagemIF vg_caracter EQ c_pontoEXITENDIF- ARMA PALABRAIF vg_conta_espaco LT 2CONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACION

TRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_submitCLEAR vg_palavraENDIFELSEEXITENDIFENDIFENDDO- BUSCA NOMBRE DE LA FUNCION PARA FUTURA BUSQUEDA POR USER EXITREAD TABLE ti_includes WITH KEY nome = vg_palavraIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_palavra TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIFENDIF

ENDFORM PROCURA_SUBMIT

amp---------------------------------------------------------------------amp Form CONSISTI_PARAMETROSamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM consisti_parametros

IF p_nivel IS INITIALMOVE 1 TO p_nivelENDIF

IF p_prog IS INITIAL AND p_tcode IS INITIAL- EL NOMBRE DEL PROGRAMA Y EL NOMBRE DE LA TRANSACCION NO PUEDEN SER- NULOS UNO DE ELLOS DEBE SER INFORMADOMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e01STOPENDIF

IF NOT p_prog IS INITIAL AND NOT p_tcode IS INITIAL- SE SOLICITA AL USUARIO QUE INFORME NOMBRE DE PROGRAMA O TRANSACCIONMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e02STOPENDIF

IF p_ue IS INITIAL AND p_badi IS INITIAL AND p_bte IS INITIALAND p_sust IS INITIAL AND p_val IS INITIAL AND p_fdex IS INITIALAND p_enh IS INITIAL- SE SOLICITA AL USUARIO QUE INFORME UN TIPO DE MEJORAMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e03STOPENDIF

ENDFORM CONSISTI_PARAMETROS

amp---------------------------------------------------------------------

amp Form INICIALIZA_TABELAamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM inicializa_tabela

DATAe_tstc TYPE tstcl_tcode TYPE sy-tcode

REFRESH ti_includes

IF NOT p_prog IS INITIAL

MOVE p_prog TO ti_includes-nome0 TO ti_includes-nivelAPPEND ti_includes

- BUSCO EL PROGRAMAREAD REPORT ti_includes-nome INTO ti_programa

IF sy-subrc EQ 0REFRESH ti_programaELSE- EL PROGRAMA NO EXISTEMESSAGE s893(pz) WITH El programa p_prog no existeSTOPENDIF

ELSEIF NOT p_tcode IS INITIAL

SELECT SINGLE FROM tstcWHERE tcode EQ p_tcode

IF sy-subrc EQ 0

IF tstc-pgmna IS NOT INITIALMOVE tstc-pgmna TO ti_includes-nome0 TO ti_includes-nivelAPPEND ti_includesELSE Se trata de una transaccioacuten de paraacutemetros Obtengo la transaccioacuten asociadaCALL FUNCTION RS_TRANSACTION_SINGLE_GETEXPORTINGparameter_tcode = p_tcodeIMPORTINGtcode = l_tcode

SELECT SINGLE INTO e_tstcFROM tstcWHERE tcode EQ l_tcode

IF sy-subrc EQ 0MOVE e_tstc-pgmna TO ti_includes-nome0 TO ti_includes-nivel

APPEND ti_includesELSE- LA TRANSACCIOacuteN NO EXISTEMESSAGE s893(pz) WITH La transaccioacuten p_tcode no existeENDIFENDIFELSE- LA TRANSACCIOacuteN NO EXISTEMESSAGE s893(pz) WITH La transaccioacuten p_tcode no existeSTOPENDIFENDIF

ENDFORM INICIALIZA_TABELA

amp---------------------------------------------------------------------amp Form armar_alvamp--------------------------------------------------------------------- Armo el ALV----------------------------------------------------------------------FORM armar_alv

DATAl_repid TYPE sy-repid

MOVE sy-repid TO l_repid

CALL FUNCTION REUSE_ALV_BLOCK_LIST_INITEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMAND

IF p_ue IS NOT INITIALPERFORM construir_catalogo_exitPERFORM definir_layout USING TI_USER_EXITCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGEPERFORM sort TABLES ti_sortUSING TI_USER_EXIT

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_USER_EXITit_events = ti_eventsit_sort = ti_sorti_text = User-exitTABLESt_outtab = ti_user_exitEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

PERFORM construir_catalogo_uexitPERFORM definir_layout USING TI_FINAL

CHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_UEXITPERFORM sort TABLES ti_sortUSING TI_FINAL

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FINALit_events = ti_eventsit_sort = ti_sorti_text = User-exit TxCMODTABLESt_outtab = ti_finalEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_badi IS NOT INITIALPERFORM construir_catalogo_badiPERFORM definir_layout USING TI_BADICHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BADIPERFORM sort TABLES ti_sortUSING TI_BADI

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_BADIit_events = ti_eventsit_sort = ti_sorti_text = BadisTABLESt_outtab = ti_badiEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_bte IS NOT INITIALPERFORM construir_catalogo_btePERFORM definir_layout USING TI_BTECHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BTEPERFORM sort TABLES ti_sortUSING TI_BTE

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layout

it_fieldcat = ti_cati_tabname = TI_BTEit_events = ti_eventsit_sort = ti_sorti_text = BTETABLESt_outtab = ti_bteEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_enh IS NOT INITIALPERFORM construir_catalogo_enhPERFORM definir_layout USING TI_ENHCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHPERFORM sort TABLES ti_sortUSING TI_ENH

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHit_events = ti_eventsit_sort = ti_sorti_text = ENHTABLESt_outtab = ti_enhEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

PERFORM construir_catalogo_enhobjPERFORM definir_layout USING TI_ENHOBJCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHOBJPERFORM sort TABLES ti_sortUSING TI_ENHOBJ

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHOBJit_events = ti_eventsit_sort = ti_sorti_text = ENHOBJTABLESt_outtab = ti_enhobjEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_sust IS NOT INITIALPERFORM construir_catalogo_sustPERFORM definir_layout USING TI_SUSTCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_SUSTPERFORM sort TABLES ti_sortUSING TI_SUST

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_SUSTit_events = ti_eventsit_sort = ti_sorti_text = SustitucionesTABLESt_outtab = ti_sustEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_val IS NOT INITIALPERFORM construir_catalogo_valPERFORM definir_layout USING TI_VALCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_VALPERFORM sort TABLES ti_sortUSING TI_VAL

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_VALit_events = ti_eventsit_sort = ti_sorti_text = ValidacionesTABLESt_outtab = ti_valEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_fdex IS NOT INITIALPERFORM construir_catalogo_fdexPERFORM definir_layout USING TI_FDEXCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_FDEX

PERFORM sort TABLES ti_sortUSING TI_FDEX

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FDEXit_events = ti_eventsit_sort = ti_sorti_text = Field-exitTABLESt_outtab = ti_fdexEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

ENDFORM armar_alv

amp---------------------------------------------------------------------amp Form construir_catalogo_EXITamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_exit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_USER_EXITi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03

CF X c_text_04

ENDFORM construir_catalogo_EXIT

amp---------------------------------------------------------------------amp Form asignar_campo_a_catalogoamp--------------------------------------------------------------------- Asignar campo al catalogo ALV----------------------------------------------------------------------FORM asignar_campo_a_catalogo TABLES pt_cat STRUCTURE wa_catUSING p_fieldname LIKE wa_cat-fieldnamep_key LIKE wa_cat-keyp_col_pos TYPE cp_fix_column LIKE wa_cat-fix_columnp_hotspot LIKE wa_cat-hotspotp_do_sum LIKE wa_cat-do_sump_input LIKE wa_cat-inputp_checkbox LIKE wa_cat-checkboxp_no_out LIKE wa_cat-no_outp_icon LIKE wa_cat-iconp_reptext_ddic LIKE wa_cat-reptext_ddic

STATICS l_col_pos LIKE sy-cucol

Asignar atributos de campo en el catalogo de cabecera ALVCLEAR wa_catREAD TABLE pt_cat INTO wa_catWITH KEY fieldname = p_fieldname

CHECK sy-subrc EQ 0

IF NOT p_reptext_ddic IS INITIALwa_cat-seltext_l = wa_cat-seltext_m =wa_cat-seltext_s = wa_cat-reptext_ddic = p_reptext_ddicENDIF

IF p_col_pos EQ X Inicializo el conteo para ordenar las columnasl_col_pos = 1ELSEADD 1 TO l_col_posENDIF

wa_cat-fieldname = p_fieldnamewa_cat-key = p_keywa_cat-col_pos = l_col_poswa_cat-fix_column = p_fix_columnwa_cat-hotspot = p_hotspotwa_cat-do_sum = p_do_sumwa_cat-edit = wa_cat-input = p_inputwa_cat-checkbox = p_checkboxwa_cat-no_out = p_no_outwa_cat-icon = p_icon

MODIFY pt_cat FROM wa_cat INDEX sy-tabix

ENDFORM asignar_campo_a_catalogo

amp---------------------------------------------------------------------amp Form definir_layoutamp--------------------------------------------------------------------- Definir atributos del layout de reporte----------------------------------------------------------------------FORM definir_layout USING p_table TYPE slis_layout_alv-box_tabnameCHANGING p_layout TYPE slis_layout_alv

CLEAR p_layout

IF p_table NE TI_CIMP Marco el campo para la seleccioacutenp_layout-box_fieldname = SELp_layout-box_tabname = p_tableENDIFp_layout-zebra = Xp_layout-colwidth_optimize = Xp_layout-no_vline = p_layout-no_colhead = p_layout-lights_condense = Xp_layout-detail_popup = Xp_layout-detail_initial_lines = Xp_layout-flexible_key = p_layout-key_hotspot = p_layout-confirmation_prompt = X

ENDFORM definir_layout

amp---------------------------------------------------------------------amp Form construir_eventosamp--------------------------------------------------------------------- Asignar eventos soportados----------------------------------------------------------------------FORM construir_eventos USING p_form LIKE wa_events-formDATAl_type(1) TYPE n

REFRESH ti_eventsCLEAR wa_events

ALV Simple Block appendl_type = 2

Buscar secciones para eventosCALL FUNCTION REUSE_ALV_EVENTS_GETEXPORTINGi_list_type = l_typeIMPORTINGet_events = ti_events

Leer evento TOP_OF_PAGEREAD TABLE ti_events WITH KEY name = slis_ev_top_of_pageINTO wa_events Asignar Rutina FORM TOP_OF_PAGE a eventoIF sy-subrc = 0MOVE p_form TO wa_events-formMODIFY ti_events FROM wa_events INDEX sy-tabixENDIF

ENDFORM construir_eventos

amp---------------------------------------------------------------------amp Form top_of_pageamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_user_exitWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUser-exit

ENDFORM top_of_page

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_UEXITamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_uexit

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_finalWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUSER-EXITs TxSMOD

ENDFORM TOP_OF_PAGE_UEXIT

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_FDEXamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_fdex

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_fdexWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incFIELD-EXITs

ENDFORM TOP_OF_PAGE_FDEX

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BADIamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_badi

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_badiWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBADIs

ENDFORM TOP_OF_PAGE_BADI

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BTEamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_bte

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_bteWRITE sy-tfill TO l_tfill_cant

CONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBTEs

ENDFORM TOP_OF_PAGE_BTE

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enh

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_enhWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENH

amp---------------------------------------------------------------------amp Form sortamp--------------------------------------------------------------------- Creo el sort del ALV (FM)---------------------------------------------------------------------- --gtPT_sort Tabla --gtP_tabname Nombre de la tabla----------------------------------------------------------------------FORM sort TABLES pt_sortUSING p_tabname TYPE any

CLEAR pt_sort wa_sortREFRESH pt_sort

CASE p_tabnameWHEN TI_SUST

wa_sort-fieldname = SUBSTIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = SUBSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = CONSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN TI_VAL

wa_sort-fieldname = VALIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = VALSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN TI_ENHOBJ

wa_sort-fieldname = ENHNAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = VERSIONwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN OTHERS

IF p_tabname NE TI_FINAL

wa_sort-fieldname = TIPOwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

IF p_tabname NE TI_FDEX

wa_sort-fieldname = NIVELwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = PROGRAMAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = LINEAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

ENDIF

ELSE

wa_sort-fieldname = NAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = MEMBERwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sortENDIFENDCASE

ENDFORM sort

amp---------------------------------------------------------------------amp Form mostrar_listadoamp--------------------------------------------------------------------- Mostrar listado ALV----------------------------------------------------------------------FORM mostrar_listado

wa_print-reserve_lines = 2

CALL FUNCTION REUSE_ALV_BLOCK_LIST_DISPLAY

EXPORTINGis_print = wa_printEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM mostrar_listado

amp---------------------------------------------------------------------amp Form user_commandamp--------------------------------------------------------------------- Evaluar acciones del usuario----------------------------------------------------------------------FORM user_command USING ucomm LIKE sy-ucommsfields TYPE slis_selfield

DATA l_break TYPE c

Rescatar el registro seleccionadoCASE sfields-tabnameWHEN TI_USER_EXITREAD TABLE ti_user_exit INDEX sfields-tabindexWHEN TI_BADIREAD TABLE ti_badi INDEX sfields-tabindexWHEN TI_BTEREAD TABLE ti_bte INDEX sfields-tabindexWHEN TI_ENHREAD TABLE ti_enh INDEX sfields-tabindexWHEN TI_ENHOBJREAD TABLE ti_enhobj INDEX sfields-tabindexWHEN TI_FDEXREAD TABLE ti_fdex INDEX sfields-tabindexWHEN TI_FINALREAD TABLE ti_final INDEX sfields-tabindexWHEN TI_SUSTREAD TABLE ti_sust INDEX sfields-tabindexWHEN TI_VALREAD TABLE ti_val INDEX sfields-tabindexWHEN TI_CIMPREAD TABLE ti_cimp INDEX sfields-tabindexENDCASE

Seleccion de opcionCASE ucomm DOUBLE CLICKWHEN ampIC1 Evaluar valor de campo seleccionadoCHECK NOT sfields-value IS INITIAL

CASE sfields-tabnameWHEN TI_USER_EXIT USER-EXITIF ti_user_exit-tipo EQ sfields-value(4)SEARCH ti_user_exit-cf FOR c_enhanceCHECK sy-subrc EQ 0PERFORM visualizar_exit USING ti_user_exit-programati_user_exit-cf

ELSEIF ti_user_exit-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_user_exit-programati_user_exit-lineaMOVE X TO l_breakELSEIF ti_user_exit-break EQ sfields-value(4)OR ti_user_exit-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_user_exit-programati_user_exit-lineati_user_exit-breakMOVE X TO l_breakENDIF

WHEN TI_FINAL USER-EXIT Tx CMODIF ti_final-name EQ sfields-valueCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = ti_final-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSEIF ti_final-include EQ sfields-valuePERFORM visualizar_linea USING ti_final-programa1MOVE X TO l_breakENDIF

WHEN TI_BADI BadiIF ti_badi-tipo EQ sfields-value(4)PERFORM visualizar_badi USING ti_badi-cfELSEIF ti_badi-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_badi-programati_badi-lineaMOVE X TO l_breakELSEIF ti_badi-break EQ sfields-value(4)OR ti_badi-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_badi-programati_badi-lineati_badi-breakMOVE X TO l_breakENDIF

WHEN TI_BTE BTEIF ti_bte-tipo EQ sfields-value(4)PERFORM fibf USING ti_bte-cfELSEIF ti_bte-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_bte-programati_bte-lineaMOVE X TO l_breakELSEIF ti_bte-break EQ sfields-value(4)OR ti_bte-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_bte-programati_bte-linea

ti_bte-breakMOVE X TO l_breakENDIF

WHEN TI_ENH Punto de ampliacioacutenIF ti_enh-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_enh-programati_enh-lineaMOVE X TO l_breakELSEIF ti_enh-tipo EQ sfields-value(4)PERFORM bi_se18 USING ti_enh-cfENDIF

WHEN TI_ENHOBJ Punto de ampliacioacutenIF ti_enhobj-enhname EQ sfields-value(30)PERFORM bi_se19 USING ti_enhobj-enhnameENDIF

WHEN TI_SUST SustitucionesIF ti_sust-substid EQ sfields-value(7) ORti_sust-subseqnr EQ sfields-value(3)PERFORM visualizar_sust USING ti_sust-substidti_sust-subseqnrENDIF

WHEN TI_VAL ValidacionesIF ti_val-valid EQ sfields-value(7) ORti_val-valseqnr EQ sfields-value(3)PERFORM visualizar_val USING ti_val-validti_val-valseqnrENDIF

WHEN TI_FDEX Field-exitIF ti_fdex-tipo EQ sfields-valueSUBMIT rsmodprf AND RETURNELSEIF ti_fdex-cf(60) EQ sfields-value Visualizo el field-exitCALL FUNCTION RS_FUNCTION_SHOWEXPORTINGfuncname = ti_fdex-cf

CALL FUNCTION RS_NAVIGATION_MONITORENDIF

WHEN TI_CIMP Customer implementation

CASE sfields-fieldnameWHEN ENHNAMEPERFORM bi_se19 USING ti_cimp-enhnameWHEN ENHINCLUDEPERFORM visualizar_enh_cf USING ti_cimp-enhinclude

WHEN OTHERS DO NOTHING ENDCASE

WHEN OTHERS DO NOTHING ENDCASE

WHEN OTHERS DO NOTHING ENDCASE

IF l_break IS NOT INITIAL AND sfields-tabname NE TI_CIMPWAIT UP TO 1 SECONDSPERFORM cargar_breakENDIFsfields-refresh = X

ENDFORM user_command

amp---------------------------------------------------------------------amp Form visualizar_lineaamp--------------------------------------------------------------------- Visualizo la linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_linea USING p_programa TYPE sy-repidp_linea

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_programaobject_type = c_typeposition = p_lineaEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM visualizar_linea

amp---------------------------------------------------------------------amp Form buscar_exitamp--------------------------------------------------------------------- Buscar USER-EXIT----------------------------------------------------------------------FORM buscar_exit

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN USER-EXITSEARCH ti_programa-cf FOR c_user_exit- SE ENCONTRO UN USER-EXIT Y SE VERIFICA SI LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS PERFORMSEARCH ti_programa-cf FOR c_performCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LAS ASIGNACIONESSEARCH ti_programa-cf FOR c_igualCHECK sy-subrc NE 0

CLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INIacuteCIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF

ENDFORM buscar_exit

amp---------------------------------------------------------------------amp Form buscar_badiamp--------------------------------------------------------------------- Buscar BADI----------------------------------------------------------------------FORM buscar_badi

DATAl_subrc LIKE sy-subrc

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BADISEARCH ti_programa-cf FOR c_badi- SE ENCONTRO UNA BADI Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

SEARCH ti_programa-cf FOR c_includeIF sy-subrc NE 0CLEAR l_subrcSEARCH ti_programa-cf FOR c_methodIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_funcao_2IF sy-subrc NE 0SEARCH ti_programa-cf FOR c_performIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_type_refIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_formMOVE 4 TO l_subrcENDIFENDIFENDIFENDIF

IF l_subrc EQ 0CLEAR ti_badi

- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIFELSECHECK p_handl IS NOT INITIAL- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA INSTANCIA DE- UNA BADISEARCH ti_programa-cf FOR c_handler- SE ENCONTRO UNA INSTANCIA DE IMPLEMENACIOacuteN Y SE VERIFICA SI LA LINEA- NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

SEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0CLEAR ti_badi- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIF

ENDFORM buscar_badi

amp---------------------------------------------------------------------amp Form buscar_bteamp--------------------------------------------------------------------- Buscar BTE----------------------------------------------------------------------FORM buscar_bte

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OPEN_FI_PERFORM

- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endform

CHECK sy-subrc NE 0

CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte1- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OUTBOUND_CALL

- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0

CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF

ENDFORM buscar_bte

amp---------------------------------------------------------------------amp Form repid_f4amp--------------------------------------------------------------------- Ejecuto el F4 para buscar programas----------------------------------------------------------------------FORM repid_f4

CALL FUNCTION REPOSITORY_INFO_SYSTEM_F4EXPORTINGobject_type = PROGobject_name = p_progsuppress_selection = XIMPORTINGobject_name_selected = p_progEXCEPTIONS

cancel = 1wrong_type = 2OTHERS = 3

ENDFORM repid_f4

amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf

DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

SEARCH p_cf FOR 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 INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

READ TABLE lt_cf INDEX 4

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

CHECK sy-subrc IS INITIAL

Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten

textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer

CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4

IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF

WHEN OTHERS Do Nothing ENDCASE

ENDFORM visualizar_badi

amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf

DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

CLEAR d010inc modsap modact

Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid

IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF

SEARCH p_cf FOR c_enhance

CHECK sy-subrc IS INITIAL

REFRESH lt_cf

l_cf = 500 - sy-fdpos

MOVE p_cf+sy-fdpos(l_cf) TO l_linea

SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3

TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS

Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _

Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit

CHECK sy-subrc IS INITIAL

Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM

modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3

ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname

CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ENDIF

ENDFORM visualizar_exit

amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit

DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo

DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe

DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE

CHECK p_fdex IS NOT INITIAL

CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe

MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex

IF p_prog IS NOT INITIAL

MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF

Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog

LOOP AT lt_d020s

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

REFRESH lt_d021s

Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4

Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X

SEARCH lt_d021s-fnam FOR -

IF sy-subrc IS INITIAL

MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum

Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname

APPEND lt_campo

ENDIF

ENDLOOPENDLOOP

CHECK lt_campo[] IS NOT INITIAL

SORT lt_campo BY repid dnum tabname fieldname

DELETE ADJACENT DUPLICATES FROM lt_campo

Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname

SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l

LOOP AT lt_dd03l

CLEAR tddir tddirs

SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname

CHECK sy-subrc IS INITIAL

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog

CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF

Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf

IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF

READ TABLE lt_fe WITH KEY cf = lt_fe-cf

CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP

LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex

ENDLOOP

ENDFORM buscar_field_exit

amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf

DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c

SEARCH p_cf FOR c_bte

IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ELSE

SEARCH p_cf FOR c_bte1

CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ENDIF

IF l_tipo IS NOT INITIAL

PERFORM visualizar_bte USING l_tipol_linea

ELSECALL TRANSACTION FIBFENDIF

ENDFORM fibf

amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT

EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM breakpoint

amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_badi

amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE

i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_bte

amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X TIPO X X c_text_05CF X c_text_04

ENDFORM construir_catalogo_FDEX

amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc

DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

CHECK lt_break[] IS NOT INITIAL

IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix

MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF

IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix

MOVEti_badi-linea TO l_lineti_badi-programa TO l_program

READ TABLE lt_break INTO wa_break

WITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF

IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix

MOVEti_bte-linea TO l_lineti_bte-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF

ENDFORM cargar_break

amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

DATAl_tabix TYPE sy-tabix

l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

SELECT SINGLE FROM d010incWHERE include = p_programa

IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF

MOVEp_linea TO l_linep_programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM asignar_break

amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit

IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF

PERFORM get_objects Get Objects

ENDFORM buscar_user_exit

amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects

DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area

DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix

SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog

IF sy-subrc = 0

SORT ti_tadir BY obj_name devclass

SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass

IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF

- Get UserExit namesLOOP AT ti_jtab

SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E

APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area

l_fname = ti_final-member

CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include

LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP

CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP

ENDFORM get_objects

amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X

ENDFORM construir_catalogo_uexit

amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------

FORM visualizar_ampliacion

DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF

SELECT SINGLE FROM modsapWHERE member EQ l_member

IF sy-subrc IS INITIAL

Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member

ENDIF

ENDFORM visualizar_ampliacion

amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea

RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs

REFRESH r_event r_procs

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event

SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs

SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE

ENDFORM visualizar_bte

amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE

----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c

DATAl_linea(500) TYPE c

DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

MOVE lt_fields-value TO l_linea

PERFORM visualizar_bte USING p_tipol_linea

ENDFORM cargar_bte

amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface

DATAl_linea(500) TYPE c

DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE

InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF

ENDFORM visualizar_interface

amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones

CHECK p_sust IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922

ENDFORM buscar_sustituciones

amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST

ENDFORM construir_catalogo_sust

amp---------------------------------------------------------------------

amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones

ENDFORM TOP_OF_PAGE_SUST

amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4

CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_sust

amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones

CHECK p_val IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931

ENDFORM buscar_validaciones

amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID

ENDFORM construir_catalogo_val

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones

ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2

CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_val

amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto

DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF

SELECT SINGLE FROM modsapWHERE name EQ l_name

IF sy-subrc IS INITIAL

MOVE l_name TO l_member

SELECT SINGLE FROM modactWHERE member EQ l_member

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF

ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF

ENDFORM visualizar_proyecto

amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel

APPEND ti_enh

ENDIFENDIFENDIF

ENDFORM buscar_punto_ampliacioacuten

amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_enh

amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh

DATA l_obj_name TYPE enhobj-obj_name

DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name

CHECK p_enh IS NOT INITIAL

IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF

REFRESH lt_obj_name

LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP

SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name

ENDFORM buscar_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X

ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME

ENDFORM construir_catalogo_enhobj

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENHOBJ

amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM bi_se19

amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro

CLEAR ti_bdcdatati_bdcdata-program = program

ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata

ENDFORM BDC_DYNPRO

amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval

CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata

ENDFORM BDC_FIELD

amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa

DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)

CHECK ti_gb31t[] IS NOT INITIAL

DO

Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2

IF l_exit EQ XEXITENDIF

CHECK l_exit IS INITIAL

Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND

CHECK l_boolpool IS NOT INITIAL

MOVE l_boolpool TO l_repid

Visualizo el programaPERFORM visualizar_linea USING l_repid01

ENDDO

ENDFORM visualizar_programa

amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope

STATICS l_flag TYPE c

DATA l_tit(65) TYPE c

CHECK l_flag IS INITIAL

l_flag = X

WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline

4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM texto_tope

amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf

DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off

CHECK l_off IS NOT INITIAL

ADD 7 TO l_offl_cf = 500 - l_off

SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_enhspotname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1

invalid_object_type = 2OTHERS = 3

ENDFORM bi_se18

amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit

DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE

DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE

MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE

MOVE lt_fields-value TO l_nameENDIF

Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_

LOOP AT lt_tfdir

CLEARl_group l_include l_namespace l_str_area

l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl

IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl

CHECK sy-subrc IS INITIAL

Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP

CHECK l_flag IS INITIAL

La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value

ENDFORM visualizar_fm_exit

amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter

tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten

ENDFORM def_text_parameter

amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones

Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt

Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt

Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt

icon_create RESULT name text infoicon_create

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 6: buscar_ampliaciones FOROSAP

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text8POSITION 20PARAMETERS p_badi AS CHECKBOX Badis Boton de Interface en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(60) badi USER-COMMAND badiVISIBLE LENGTH 25SELECTION-SCREEN END OF LINE

SELECTION-SCREEN BEGIN OF LINEPOSITION 25PARAMETERS p_handl AS CHECKBOX DEFAULT XCL_EXITHANDLER=gtGET_INSTANCESELECTION-SCREEN COMMENT 30(40) text12SELECTION-SCREEN END OF LINE

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text9POSITION 20PARAMETERS p_bte AS CHECKBOX Bte Boton de Tx FIBF en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(60) bte1 USER-COMMAND bte1VISIBLE LENGTH 1 Boton de Tx Evento en la DYNPROSELECTION-SCREEN PUSHBUTTON 29(60) bte2 USER-COMMAND bte2VISIBLE LENGTH 10 Boton de Tx Proceso en la DYNPROSELECTION-SCREEN PUSHBUTTON 40(60) bte3 USER-COMMAND bte3VISIBLE LENGTH 10

SELECTION-SCREEN END OF LINE

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(19) text14POSITION 20PARAMETERS p_enh AS CHECKBOX Punto de ampliacioacuten

Boton de Tx SENH en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(60) senh USER-COMMAND senhVISIBLE LENGTH 1

Boton de Customer Implementation en la DYNPROSELECTION-SCREEN PUSHBUTTON 29(60) cimp USER-COMMAND cimpVISIBLE LENGTH 24

SELECTION-SCREEN END OF LINE

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text10POSITION 20PARAMETERS p_sust AS CHECKBOX Sustitucioacuten

Boton de Sustitucioacuten en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(45) btn1 USER-COMMAND obbVISIBLE LENGTH 12

Boton de programa sustitucioacuten en la DYNPROSELECTION-SCREEN PUSHBUTTON 38(45) sust USER-COMMAND sustVISIBLE LENGTH 15

SELECTION-SCREEN END OF LINE

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text13POSITION 20PARAMETERS p_val AS CHECKBOX Validacioacuten

Boton de Validacioacuten en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(45) ob28 USER-COMMAND ob28VISIBLE LENGTH 12

Boton de programa sustitucioacuten en la DYNPROSELECTION-SCREEN PUSHBUTTON 38(45) val USER-COMMAND valVISIBLE LENGTH 15

SELECTION-SCREEN END OF LINE

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text11POSITION 20PARAMETERS p_fdex AS CHECKBOX Field-exit

Boton de Field-exit en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(60) btn2 USER-COMMAND fdexVISIBLE LENGTH 28

SELECTION-SCREEN END OF LINE

SELECTION-SCREEN END OF BLOCK bl02

- DATOS OPCIONALESSELECTION-SCREEN BEGIN OF BLOCK bl03 WITH FRAME TITLE tit3

SELECTION-SCREEN BEGIN OF LINE Boton de ALL en la DYNPROSELECTION-SCREEN PUSHBUTTON 18(60) all USER-COMMAND allVISIBLE LENGTH 1 Boton de DAL en la DYNPROSELECTION-SCREEN PUSHBUTTON 21(60) dal USER-COMMAND dalVISIBLE LENGTH 1SELECTION-SCREEN END OF LINE

SELECTION-SCREEN ULINE

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text3POSITION 20PARAMETERS p_incl AS CHECKBOX DEFAULT X IncludesSELECTION-SCREEN END OF LINE

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text4POSITION 20PARAMETERS p_func AS CHECKBOX DEFAULT X Funciones

SELECTION-SCREEN END OF LINE

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text5POSITION 20PARAMETERS p_submit AS CHECKBOX DEFAULT X SubmitSELECTION-SCREEN END OF LINE

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text6POSITION 20PARAMETERS p_nivel(2) TYPE n DEFAULT 04 NivelSELECTION-SCREEN END OF LINE

SELECTION-SCREEN END OF BLOCK bl03

Botoacuten de Marcar todo en el STATUS GUISELECTION-SCREEN FUNCTION KEY 1 Botoacuten de Desmarcar todo en el STATUS GUISELECTION-SCREEN FUNCTION KEY 2 Botoacuten de Breakpoint en el STATUS GUISELECTION-SCREEN FUNCTION KEY 3

----------------------------------------------------------------------- DEFINICIOacuteN DE MACROS-----------------------------------------------------------------------DEFINE icon_create Creo para el botoacuten indicado el icono y los textos correspondientes

call function ICON_CREATEexportingname = amp2text = amp3info = amp4importingresult = amp1exceptionsothers = 0

END-OF-DEFINITION icon_create

----------------------------------------------------------------------- INICIALIZACIOacuteN DE VARIABLES-----------------------------------------------------------------------INITIALIZATION

PERFORM def_text_parameter

PERFORM def_botones

CLEAR ti_gb31tREFRESH ti_gb31t

Obtengo ValidacioacutenSustitucioacutenEventosTextoSELECT INTO TABLE ti_gb31tFROM gb31tWHERE spras EQ sy-langu

----------------------------------------------------------------------- AT SELECTION-SCREEN-----------------------------------------------------------------------

AT SELECTION-SCREEN

CASE sscrfields-ucommWHEN FC01MOVE X TO p_ue p_badi p_bte p_sust p_val p_fdex p_enhWHEN FC02CLEAR p_ue p_badi p_bte p_sust p_val p_fdex p_enhWHEN FC03PERFORM breakpointWHEN EXTPERFORM visualizar_ampliacionWHEN EXT1PERFORM visualizar_proyectoWHEN EXT2PERFORM visualizar_fm_exitWHEN BADIPERFORM visualizar_interfaceWHEN OBBCALL TRANSACTION OBBHWHEN OB28CALL TRANSACTION OB28WHEN SUST OR VALPERFORM visualizar_programaWHEN FDEXSUBMIT rsmodprf AND RETURNWHEN BTE1CALL TRANSACTION FIBFWHEN BTE2PERFORM cargar_bte USING EWHEN BTE3PERFORM cargar_bte USING PWHEN SENHSUBMIT sapmsenh VIA SELECTION-SCREENAND RETURNWHEN CIMPPERFORM visualizar_imp_enhWHEN ALLMOVE X TO p_incl p_func p_submitWHEN DALCLEAR p_incl p_func p_submitWHEN OTHERS Do Nothing ENDCASE

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_prog

PERFORM repid_f4

---------------------------------------------------------------------- INICIO----------------------------------------------------------------------START-OF-SELECTION

GET TIME FIELD w_tini

- CONSISTENCIAS DE LOS PARAMETROSPERFORM consisti_parametros

- INICIALIZA TABLAPERFORM inicializa_tabela

- VERIFICA SI EN EL PROGRAMA EXISTE ALGUN INCLUDE FUNCION O SUBMITPERFORM verifica_include_funcao_submit

- ANALISA LOS INCLUDES Y BUSCA POR USER-EXIT BADIS Y BTEPERFORM busca_user_exit_badi_bte

- ANALISA LOS INCLUDES Y BUSCA LOS FIELD-EXITSPERFORM buscar_field_exit

- OBTENGO LOS EXITs DE LA TRANSACCIOacuteNPERFORM buscar_user_exit

- OBTENGO LAS PUNTOS DE AMPLIACIOacuteNPERFORM buscar_enh

- OBTENGO LAS SUSTITUCIONESPERFORM buscar_sustituciones

- OBTENGO LAS VALIDACIONESPERFORM buscar_validaciones

- CARGO LOS BREAKPOINTSPERFORM cargar_break

- VISUALIZA LAS AMPLIACIONES ENCONTRADASPERFORM exibe_user_exit

---------------------------------------------------------------------- FIN----------------------------------------------------------------------END-OF-SELECTION

amp---------------------------------------------------------------------amp Form BUSCA_USER_EXIT_BADI_BTEamp--------------------------------------------------------------------- Busca EXITs BADIs y BTE en el coacutedigo fuente----------------------------------------------------------------------FORM busca_user_exit_badi_bte

- VERIFICA SI EN LOS INCLUDES SELECIONADOS EXISTEN EXITSLOOP AT ti_includes

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

- BORRA LA TABLA INTERNAREFRESH ti_programa

- REALIZA LECTURA DE INCLUDE ALMACENANDO EN TABLA INTERNAREAD REPORT ti_includes-nome INTO ti_programa

LOOP AT ti_programa

IF p_ue EQ XPERFORM buscar_exitPERFORM busca_enhancementsENDIF

IF p_badi EQ XPERFORM buscar_badiENDIF

IF p_bte EQ XPERFORM buscar_bteENDIF

IF p_enh EQ XPERFORM buscar_punto_ampliacionENDIF

ENDLOOPENDLOOP

ENDFORM BUSCA_USER_EXIT_BADI_BTE

amp---------------------------------------------------------------------amp Form BUSCA_ENHANCEMENTSamp--------------------------------------------------------------------- Busca las llamadas a los USER-EXIT----------------------------------------------------------------------FORM busca_enhancements

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE EN ALGUN ENHANCEMENTSEARCH ti_programa-cf FOR c_enhance- SE ENCONTRO EL ENHANCEMENT Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentarioCLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF

ENDFORM BUSCA_ENHANCEMENTS

amp---------------------------------------------------------------------amp Form EXIBE_USER_EXITamp--------------------------------------------------------------------- Muestra los datos----------------------------------------------------------------------FORM exibe_user_exit

PERFORM armar_alv

PERFORM mostrar_listado

ENDFORM EXIBE_USER_EXIT

amp---------------------------------------------------------------------amp Form PROCURA_INCLUDEamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_include

CLEAR vg_palavra

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN INCLUDESEARCH ti_programa-cf FOR c_include- SE ENCONTRO EN EL INCLUDE Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN STRUCTURESEARCH ti_programa-cf FOR c_struct

IF sy-subrc IS INITIALEXITENDIF

- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DEL INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF NOT vg_caracter IS INITIAL- VERIFICA SI NO ES FIN DE COMANDOIF vg_caracter EQ c_pontoEXITENDIF- ARMA PALABRACONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACIONTRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_includeCLEAR vg_palavraENDIFENDIFENDDO- GRABA NOMBRE DEL INCLUDE PARA FUTURA BUSQUEDA POR USER EXITREAD TABLE ti_includes WITH KEY nome = vg_palavraIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_palavra TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIF

ENDIF

ENDFORM PROCURA_INCLUDE

amp---------------------------------------------------------------------amp Form PROCURA_FUNCAOamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_funcao

CLEAR vg_conta_aspavg_palavra

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA FUNCIONSEARCH ti_programa-cf FOR c_funcao_2- SE ENCONTRO UNA FUNCION Y LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DE LA INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF NOT vg_caracter IS INITIAL- VERIFICA SI NO ES FIN DE COMANDOIF vg_caracter EQ c_aspaADD 1 TO vg_conta_aspaIF vg_conta_aspa EQ 2EXITENDIFENDIF- ARMA PALABRACONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACIONTRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_funcao_1CLEAR vg_palavraENDIFENDIFENDDO- BUSCA NOMBRE DE LA FUNCION PARA FUTURA BUSQUEDA POR USER EXITCLEAR vg_pnameSELECT SINGLE pnameINTO vg_pnameFROM tfdirWHERE funcname EQ vg_palavraIF sy-subrc EQ 0

READ TABLE ti_includes WITH KEY nome = vg_pnameIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_pname TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIF

ENDIF

ENDIF

ENDFORM PROCURA_FUNCAO

amp---------------------------------------------------------------------amp Form VERIFICA_INCLUDE_FUNCAO_SUBMITamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM verifica_include_funcao_submit

CHECK p_ue IS NOT INITIAL OR p_badi IS NOT INITIALOR p_bte IS NOT INITIAL OR p_enh IS NOT INITIAL

LOOP AT ti_includes

ADD 1 TO vg_contadorDESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfillMOVE ti_includes-nivel TO vg_nivelADD 1 TO vg_nivel

- BORRA TABLA INTERNAREFRESH ti_programa

- REALIZA LECTURA DE INCLUDEFUNCION ALMACENANDO EN TABLA INTERNAREAD REPORT ti_includes-nome INTO ti_programa

LOOP AT ti_programa

- PROCURA POR INCLUDESIF p_incl EQ c_xPERFORM procura_includeENDIF- PROCURA POR FUNCIONIF p_func EQ c_xPERFORM procura_funcaoENDIF- PROCURA POR SUBMITIF p_submit EQ c_xPERFORM procura_submitENDIF

ENDLOOP

ENDLOOP

ENDFORM VERIFICA_INCLUDE_FUNCAO_SUBMIT

amp---------------------------------------------------------------------amp Form EVITAR_TIME_OUTamp--------------------------------------------------------------------- Evito el TIME OUT visualizando un mensaje----------------------------------------------------------------------FORM evitar_time_out USING p_tfill LIKE sy-tfill

DATAvl_total(10) TYPE n

vl_atual(10) TYPE nl_tout LIKE sy-timlol_time(10) TYPE c

GET TIME FIELD l_tout

l_tout = l_tout - w_tini

MOVEp_tfill TO vl_totalvg_contador TO vl_atual

SHIFT vl_total LEFT DELETING LEADING 0SHIFT vl_atual LEFT DELETING LEADING 0WRITE l_tout TO l_time

CONCATENATE Tpo l_time Total vl_total Actual vl_atualINTO vg_textoSEPARATED BY space

CALL FUNCTION SAPGUI_PROGRESS_INDICATOREXPORTINGtext = vg_texto

ENDFORM EVITAR_TIME_OUT

amp---------------------------------------------------------------------amp Form PROCURA_SUBMITamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_submit

CLEAR vg_conta_espaco vg_palavra vg_ini_contagem

- VERIFICA SI LA LINEA DEL PROGRAMA EXISTE ALGUN INCLUDESEARCH ti_programa-cf FOR c_submit- SE ENCONTRO EN EL INCLUDE Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DEL INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF vg_ini_contagem EQ c_x AND vg_caracter IS INITIALADD 1 TO vg_conta_espacoENDIF

IF NOT vg_caracter IS INITIALMOVE c_x TO vg_ini_contagemIF vg_caracter EQ c_pontoEXITENDIF- ARMA PALABRAIF vg_conta_espaco LT 2CONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACION

TRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_submitCLEAR vg_palavraENDIFELSEEXITENDIFENDIFENDDO- BUSCA NOMBRE DE LA FUNCION PARA FUTURA BUSQUEDA POR USER EXITREAD TABLE ti_includes WITH KEY nome = vg_palavraIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_palavra TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIFENDIF

ENDFORM PROCURA_SUBMIT

amp---------------------------------------------------------------------amp Form CONSISTI_PARAMETROSamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM consisti_parametros

IF p_nivel IS INITIALMOVE 1 TO p_nivelENDIF

IF p_prog IS INITIAL AND p_tcode IS INITIAL- EL NOMBRE DEL PROGRAMA Y EL NOMBRE DE LA TRANSACCION NO PUEDEN SER- NULOS UNO DE ELLOS DEBE SER INFORMADOMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e01STOPENDIF

IF NOT p_prog IS INITIAL AND NOT p_tcode IS INITIAL- SE SOLICITA AL USUARIO QUE INFORME NOMBRE DE PROGRAMA O TRANSACCIONMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e02STOPENDIF

IF p_ue IS INITIAL AND p_badi IS INITIAL AND p_bte IS INITIALAND p_sust IS INITIAL AND p_val IS INITIAL AND p_fdex IS INITIALAND p_enh IS INITIAL- SE SOLICITA AL USUARIO QUE INFORME UN TIPO DE MEJORAMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e03STOPENDIF

ENDFORM CONSISTI_PARAMETROS

amp---------------------------------------------------------------------

amp Form INICIALIZA_TABELAamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM inicializa_tabela

DATAe_tstc TYPE tstcl_tcode TYPE sy-tcode

REFRESH ti_includes

IF NOT p_prog IS INITIAL

MOVE p_prog TO ti_includes-nome0 TO ti_includes-nivelAPPEND ti_includes

- BUSCO EL PROGRAMAREAD REPORT ti_includes-nome INTO ti_programa

IF sy-subrc EQ 0REFRESH ti_programaELSE- EL PROGRAMA NO EXISTEMESSAGE s893(pz) WITH El programa p_prog no existeSTOPENDIF

ELSEIF NOT p_tcode IS INITIAL

SELECT SINGLE FROM tstcWHERE tcode EQ p_tcode

IF sy-subrc EQ 0

IF tstc-pgmna IS NOT INITIALMOVE tstc-pgmna TO ti_includes-nome0 TO ti_includes-nivelAPPEND ti_includesELSE Se trata de una transaccioacuten de paraacutemetros Obtengo la transaccioacuten asociadaCALL FUNCTION RS_TRANSACTION_SINGLE_GETEXPORTINGparameter_tcode = p_tcodeIMPORTINGtcode = l_tcode

SELECT SINGLE INTO e_tstcFROM tstcWHERE tcode EQ l_tcode

IF sy-subrc EQ 0MOVE e_tstc-pgmna TO ti_includes-nome0 TO ti_includes-nivel

APPEND ti_includesELSE- LA TRANSACCIOacuteN NO EXISTEMESSAGE s893(pz) WITH La transaccioacuten p_tcode no existeENDIFENDIFELSE- LA TRANSACCIOacuteN NO EXISTEMESSAGE s893(pz) WITH La transaccioacuten p_tcode no existeSTOPENDIFENDIF

ENDFORM INICIALIZA_TABELA

amp---------------------------------------------------------------------amp Form armar_alvamp--------------------------------------------------------------------- Armo el ALV----------------------------------------------------------------------FORM armar_alv

DATAl_repid TYPE sy-repid

MOVE sy-repid TO l_repid

CALL FUNCTION REUSE_ALV_BLOCK_LIST_INITEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMAND

IF p_ue IS NOT INITIALPERFORM construir_catalogo_exitPERFORM definir_layout USING TI_USER_EXITCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGEPERFORM sort TABLES ti_sortUSING TI_USER_EXIT

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_USER_EXITit_events = ti_eventsit_sort = ti_sorti_text = User-exitTABLESt_outtab = ti_user_exitEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

PERFORM construir_catalogo_uexitPERFORM definir_layout USING TI_FINAL

CHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_UEXITPERFORM sort TABLES ti_sortUSING TI_FINAL

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FINALit_events = ti_eventsit_sort = ti_sorti_text = User-exit TxCMODTABLESt_outtab = ti_finalEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_badi IS NOT INITIALPERFORM construir_catalogo_badiPERFORM definir_layout USING TI_BADICHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BADIPERFORM sort TABLES ti_sortUSING TI_BADI

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_BADIit_events = ti_eventsit_sort = ti_sorti_text = BadisTABLESt_outtab = ti_badiEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_bte IS NOT INITIALPERFORM construir_catalogo_btePERFORM definir_layout USING TI_BTECHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BTEPERFORM sort TABLES ti_sortUSING TI_BTE

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layout

it_fieldcat = ti_cati_tabname = TI_BTEit_events = ti_eventsit_sort = ti_sorti_text = BTETABLESt_outtab = ti_bteEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_enh IS NOT INITIALPERFORM construir_catalogo_enhPERFORM definir_layout USING TI_ENHCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHPERFORM sort TABLES ti_sortUSING TI_ENH

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHit_events = ti_eventsit_sort = ti_sorti_text = ENHTABLESt_outtab = ti_enhEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

PERFORM construir_catalogo_enhobjPERFORM definir_layout USING TI_ENHOBJCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHOBJPERFORM sort TABLES ti_sortUSING TI_ENHOBJ

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHOBJit_events = ti_eventsit_sort = ti_sorti_text = ENHOBJTABLESt_outtab = ti_enhobjEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_sust IS NOT INITIALPERFORM construir_catalogo_sustPERFORM definir_layout USING TI_SUSTCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_SUSTPERFORM sort TABLES ti_sortUSING TI_SUST

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_SUSTit_events = ti_eventsit_sort = ti_sorti_text = SustitucionesTABLESt_outtab = ti_sustEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_val IS NOT INITIALPERFORM construir_catalogo_valPERFORM definir_layout USING TI_VALCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_VALPERFORM sort TABLES ti_sortUSING TI_VAL

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_VALit_events = ti_eventsit_sort = ti_sorti_text = ValidacionesTABLESt_outtab = ti_valEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_fdex IS NOT INITIALPERFORM construir_catalogo_fdexPERFORM definir_layout USING TI_FDEXCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_FDEX

PERFORM sort TABLES ti_sortUSING TI_FDEX

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FDEXit_events = ti_eventsit_sort = ti_sorti_text = Field-exitTABLESt_outtab = ti_fdexEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

ENDFORM armar_alv

amp---------------------------------------------------------------------amp Form construir_catalogo_EXITamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_exit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_USER_EXITi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03

CF X c_text_04

ENDFORM construir_catalogo_EXIT

amp---------------------------------------------------------------------amp Form asignar_campo_a_catalogoamp--------------------------------------------------------------------- Asignar campo al catalogo ALV----------------------------------------------------------------------FORM asignar_campo_a_catalogo TABLES pt_cat STRUCTURE wa_catUSING p_fieldname LIKE wa_cat-fieldnamep_key LIKE wa_cat-keyp_col_pos TYPE cp_fix_column LIKE wa_cat-fix_columnp_hotspot LIKE wa_cat-hotspotp_do_sum LIKE wa_cat-do_sump_input LIKE wa_cat-inputp_checkbox LIKE wa_cat-checkboxp_no_out LIKE wa_cat-no_outp_icon LIKE wa_cat-iconp_reptext_ddic LIKE wa_cat-reptext_ddic

STATICS l_col_pos LIKE sy-cucol

Asignar atributos de campo en el catalogo de cabecera ALVCLEAR wa_catREAD TABLE pt_cat INTO wa_catWITH KEY fieldname = p_fieldname

CHECK sy-subrc EQ 0

IF NOT p_reptext_ddic IS INITIALwa_cat-seltext_l = wa_cat-seltext_m =wa_cat-seltext_s = wa_cat-reptext_ddic = p_reptext_ddicENDIF

IF p_col_pos EQ X Inicializo el conteo para ordenar las columnasl_col_pos = 1ELSEADD 1 TO l_col_posENDIF

wa_cat-fieldname = p_fieldnamewa_cat-key = p_keywa_cat-col_pos = l_col_poswa_cat-fix_column = p_fix_columnwa_cat-hotspot = p_hotspotwa_cat-do_sum = p_do_sumwa_cat-edit = wa_cat-input = p_inputwa_cat-checkbox = p_checkboxwa_cat-no_out = p_no_outwa_cat-icon = p_icon

MODIFY pt_cat FROM wa_cat INDEX sy-tabix

ENDFORM asignar_campo_a_catalogo

amp---------------------------------------------------------------------amp Form definir_layoutamp--------------------------------------------------------------------- Definir atributos del layout de reporte----------------------------------------------------------------------FORM definir_layout USING p_table TYPE slis_layout_alv-box_tabnameCHANGING p_layout TYPE slis_layout_alv

CLEAR p_layout

IF p_table NE TI_CIMP Marco el campo para la seleccioacutenp_layout-box_fieldname = SELp_layout-box_tabname = p_tableENDIFp_layout-zebra = Xp_layout-colwidth_optimize = Xp_layout-no_vline = p_layout-no_colhead = p_layout-lights_condense = Xp_layout-detail_popup = Xp_layout-detail_initial_lines = Xp_layout-flexible_key = p_layout-key_hotspot = p_layout-confirmation_prompt = X

ENDFORM definir_layout

amp---------------------------------------------------------------------amp Form construir_eventosamp--------------------------------------------------------------------- Asignar eventos soportados----------------------------------------------------------------------FORM construir_eventos USING p_form LIKE wa_events-formDATAl_type(1) TYPE n

REFRESH ti_eventsCLEAR wa_events

ALV Simple Block appendl_type = 2

Buscar secciones para eventosCALL FUNCTION REUSE_ALV_EVENTS_GETEXPORTINGi_list_type = l_typeIMPORTINGet_events = ti_events

Leer evento TOP_OF_PAGEREAD TABLE ti_events WITH KEY name = slis_ev_top_of_pageINTO wa_events Asignar Rutina FORM TOP_OF_PAGE a eventoIF sy-subrc = 0MOVE p_form TO wa_events-formMODIFY ti_events FROM wa_events INDEX sy-tabixENDIF

ENDFORM construir_eventos

amp---------------------------------------------------------------------amp Form top_of_pageamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_user_exitWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUser-exit

ENDFORM top_of_page

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_UEXITamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_uexit

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_finalWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUSER-EXITs TxSMOD

ENDFORM TOP_OF_PAGE_UEXIT

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_FDEXamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_fdex

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_fdexWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incFIELD-EXITs

ENDFORM TOP_OF_PAGE_FDEX

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BADIamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_badi

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_badiWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBADIs

ENDFORM TOP_OF_PAGE_BADI

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BTEamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_bte

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_bteWRITE sy-tfill TO l_tfill_cant

CONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBTEs

ENDFORM TOP_OF_PAGE_BTE

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enh

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_enhWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENH

amp---------------------------------------------------------------------amp Form sortamp--------------------------------------------------------------------- Creo el sort del ALV (FM)---------------------------------------------------------------------- --gtPT_sort Tabla --gtP_tabname Nombre de la tabla----------------------------------------------------------------------FORM sort TABLES pt_sortUSING p_tabname TYPE any

CLEAR pt_sort wa_sortREFRESH pt_sort

CASE p_tabnameWHEN TI_SUST

wa_sort-fieldname = SUBSTIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = SUBSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = CONSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN TI_VAL

wa_sort-fieldname = VALIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = VALSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN TI_ENHOBJ

wa_sort-fieldname = ENHNAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = VERSIONwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN OTHERS

IF p_tabname NE TI_FINAL

wa_sort-fieldname = TIPOwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

IF p_tabname NE TI_FDEX

wa_sort-fieldname = NIVELwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = PROGRAMAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = LINEAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

ENDIF

ELSE

wa_sort-fieldname = NAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = MEMBERwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sortENDIFENDCASE

ENDFORM sort

amp---------------------------------------------------------------------amp Form mostrar_listadoamp--------------------------------------------------------------------- Mostrar listado ALV----------------------------------------------------------------------FORM mostrar_listado

wa_print-reserve_lines = 2

CALL FUNCTION REUSE_ALV_BLOCK_LIST_DISPLAY

EXPORTINGis_print = wa_printEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM mostrar_listado

amp---------------------------------------------------------------------amp Form user_commandamp--------------------------------------------------------------------- Evaluar acciones del usuario----------------------------------------------------------------------FORM user_command USING ucomm LIKE sy-ucommsfields TYPE slis_selfield

DATA l_break TYPE c

Rescatar el registro seleccionadoCASE sfields-tabnameWHEN TI_USER_EXITREAD TABLE ti_user_exit INDEX sfields-tabindexWHEN TI_BADIREAD TABLE ti_badi INDEX sfields-tabindexWHEN TI_BTEREAD TABLE ti_bte INDEX sfields-tabindexWHEN TI_ENHREAD TABLE ti_enh INDEX sfields-tabindexWHEN TI_ENHOBJREAD TABLE ti_enhobj INDEX sfields-tabindexWHEN TI_FDEXREAD TABLE ti_fdex INDEX sfields-tabindexWHEN TI_FINALREAD TABLE ti_final INDEX sfields-tabindexWHEN TI_SUSTREAD TABLE ti_sust INDEX sfields-tabindexWHEN TI_VALREAD TABLE ti_val INDEX sfields-tabindexWHEN TI_CIMPREAD TABLE ti_cimp INDEX sfields-tabindexENDCASE

Seleccion de opcionCASE ucomm DOUBLE CLICKWHEN ampIC1 Evaluar valor de campo seleccionadoCHECK NOT sfields-value IS INITIAL

CASE sfields-tabnameWHEN TI_USER_EXIT USER-EXITIF ti_user_exit-tipo EQ sfields-value(4)SEARCH ti_user_exit-cf FOR c_enhanceCHECK sy-subrc EQ 0PERFORM visualizar_exit USING ti_user_exit-programati_user_exit-cf

ELSEIF ti_user_exit-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_user_exit-programati_user_exit-lineaMOVE X TO l_breakELSEIF ti_user_exit-break EQ sfields-value(4)OR ti_user_exit-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_user_exit-programati_user_exit-lineati_user_exit-breakMOVE X TO l_breakENDIF

WHEN TI_FINAL USER-EXIT Tx CMODIF ti_final-name EQ sfields-valueCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = ti_final-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSEIF ti_final-include EQ sfields-valuePERFORM visualizar_linea USING ti_final-programa1MOVE X TO l_breakENDIF

WHEN TI_BADI BadiIF ti_badi-tipo EQ sfields-value(4)PERFORM visualizar_badi USING ti_badi-cfELSEIF ti_badi-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_badi-programati_badi-lineaMOVE X TO l_breakELSEIF ti_badi-break EQ sfields-value(4)OR ti_badi-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_badi-programati_badi-lineati_badi-breakMOVE X TO l_breakENDIF

WHEN TI_BTE BTEIF ti_bte-tipo EQ sfields-value(4)PERFORM fibf USING ti_bte-cfELSEIF ti_bte-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_bte-programati_bte-lineaMOVE X TO l_breakELSEIF ti_bte-break EQ sfields-value(4)OR ti_bte-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_bte-programati_bte-linea

ti_bte-breakMOVE X TO l_breakENDIF

WHEN TI_ENH Punto de ampliacioacutenIF ti_enh-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_enh-programati_enh-lineaMOVE X TO l_breakELSEIF ti_enh-tipo EQ sfields-value(4)PERFORM bi_se18 USING ti_enh-cfENDIF

WHEN TI_ENHOBJ Punto de ampliacioacutenIF ti_enhobj-enhname EQ sfields-value(30)PERFORM bi_se19 USING ti_enhobj-enhnameENDIF

WHEN TI_SUST SustitucionesIF ti_sust-substid EQ sfields-value(7) ORti_sust-subseqnr EQ sfields-value(3)PERFORM visualizar_sust USING ti_sust-substidti_sust-subseqnrENDIF

WHEN TI_VAL ValidacionesIF ti_val-valid EQ sfields-value(7) ORti_val-valseqnr EQ sfields-value(3)PERFORM visualizar_val USING ti_val-validti_val-valseqnrENDIF

WHEN TI_FDEX Field-exitIF ti_fdex-tipo EQ sfields-valueSUBMIT rsmodprf AND RETURNELSEIF ti_fdex-cf(60) EQ sfields-value Visualizo el field-exitCALL FUNCTION RS_FUNCTION_SHOWEXPORTINGfuncname = ti_fdex-cf

CALL FUNCTION RS_NAVIGATION_MONITORENDIF

WHEN TI_CIMP Customer implementation

CASE sfields-fieldnameWHEN ENHNAMEPERFORM bi_se19 USING ti_cimp-enhnameWHEN ENHINCLUDEPERFORM visualizar_enh_cf USING ti_cimp-enhinclude

WHEN OTHERS DO NOTHING ENDCASE

WHEN OTHERS DO NOTHING ENDCASE

WHEN OTHERS DO NOTHING ENDCASE

IF l_break IS NOT INITIAL AND sfields-tabname NE TI_CIMPWAIT UP TO 1 SECONDSPERFORM cargar_breakENDIFsfields-refresh = X

ENDFORM user_command

amp---------------------------------------------------------------------amp Form visualizar_lineaamp--------------------------------------------------------------------- Visualizo la linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_linea USING p_programa TYPE sy-repidp_linea

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_programaobject_type = c_typeposition = p_lineaEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM visualizar_linea

amp---------------------------------------------------------------------amp Form buscar_exitamp--------------------------------------------------------------------- Buscar USER-EXIT----------------------------------------------------------------------FORM buscar_exit

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN USER-EXITSEARCH ti_programa-cf FOR c_user_exit- SE ENCONTRO UN USER-EXIT Y SE VERIFICA SI LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS PERFORMSEARCH ti_programa-cf FOR c_performCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LAS ASIGNACIONESSEARCH ti_programa-cf FOR c_igualCHECK sy-subrc NE 0

CLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INIacuteCIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF

ENDFORM buscar_exit

amp---------------------------------------------------------------------amp Form buscar_badiamp--------------------------------------------------------------------- Buscar BADI----------------------------------------------------------------------FORM buscar_badi

DATAl_subrc LIKE sy-subrc

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BADISEARCH ti_programa-cf FOR c_badi- SE ENCONTRO UNA BADI Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

SEARCH ti_programa-cf FOR c_includeIF sy-subrc NE 0CLEAR l_subrcSEARCH ti_programa-cf FOR c_methodIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_funcao_2IF sy-subrc NE 0SEARCH ti_programa-cf FOR c_performIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_type_refIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_formMOVE 4 TO l_subrcENDIFENDIFENDIFENDIF

IF l_subrc EQ 0CLEAR ti_badi

- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIFELSECHECK p_handl IS NOT INITIAL- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA INSTANCIA DE- UNA BADISEARCH ti_programa-cf FOR c_handler- SE ENCONTRO UNA INSTANCIA DE IMPLEMENACIOacuteN Y SE VERIFICA SI LA LINEA- NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

SEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0CLEAR ti_badi- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIF

ENDFORM buscar_badi

amp---------------------------------------------------------------------amp Form buscar_bteamp--------------------------------------------------------------------- Buscar BTE----------------------------------------------------------------------FORM buscar_bte

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OPEN_FI_PERFORM

- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endform

CHECK sy-subrc NE 0

CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte1- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OUTBOUND_CALL

- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0

CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF

ENDFORM buscar_bte

amp---------------------------------------------------------------------amp Form repid_f4amp--------------------------------------------------------------------- Ejecuto el F4 para buscar programas----------------------------------------------------------------------FORM repid_f4

CALL FUNCTION REPOSITORY_INFO_SYSTEM_F4EXPORTINGobject_type = PROGobject_name = p_progsuppress_selection = XIMPORTINGobject_name_selected = p_progEXCEPTIONS

cancel = 1wrong_type = 2OTHERS = 3

ENDFORM repid_f4

amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf

DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

SEARCH p_cf FOR 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 INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

READ TABLE lt_cf INDEX 4

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

CHECK sy-subrc IS INITIAL

Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten

textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer

CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4

IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF

WHEN OTHERS Do Nothing ENDCASE

ENDFORM visualizar_badi

amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf

DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

CLEAR d010inc modsap modact

Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid

IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF

SEARCH p_cf FOR c_enhance

CHECK sy-subrc IS INITIAL

REFRESH lt_cf

l_cf = 500 - sy-fdpos

MOVE p_cf+sy-fdpos(l_cf) TO l_linea

SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3

TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS

Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _

Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit

CHECK sy-subrc IS INITIAL

Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM

modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3

ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname

CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ENDIF

ENDFORM visualizar_exit

amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit

DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo

DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe

DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE

CHECK p_fdex IS NOT INITIAL

CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe

MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex

IF p_prog IS NOT INITIAL

MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF

Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog

LOOP AT lt_d020s

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

REFRESH lt_d021s

Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4

Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X

SEARCH lt_d021s-fnam FOR -

IF sy-subrc IS INITIAL

MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum

Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname

APPEND lt_campo

ENDIF

ENDLOOPENDLOOP

CHECK lt_campo[] IS NOT INITIAL

SORT lt_campo BY repid dnum tabname fieldname

DELETE ADJACENT DUPLICATES FROM lt_campo

Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname

SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l

LOOP AT lt_dd03l

CLEAR tddir tddirs

SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname

CHECK sy-subrc IS INITIAL

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog

CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF

Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf

IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF

READ TABLE lt_fe WITH KEY cf = lt_fe-cf

CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP

LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex

ENDLOOP

ENDFORM buscar_field_exit

amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf

DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c

SEARCH p_cf FOR c_bte

IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ELSE

SEARCH p_cf FOR c_bte1

CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ENDIF

IF l_tipo IS NOT INITIAL

PERFORM visualizar_bte USING l_tipol_linea

ELSECALL TRANSACTION FIBFENDIF

ENDFORM fibf

amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT

EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM breakpoint

amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_badi

amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE

i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_bte

amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X TIPO X X c_text_05CF X c_text_04

ENDFORM construir_catalogo_FDEX

amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc

DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

CHECK lt_break[] IS NOT INITIAL

IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix

MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF

IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix

MOVEti_badi-linea TO l_lineti_badi-programa TO l_program

READ TABLE lt_break INTO wa_break

WITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF

IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix

MOVEti_bte-linea TO l_lineti_bte-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF

ENDFORM cargar_break

amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

DATAl_tabix TYPE sy-tabix

l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

SELECT SINGLE FROM d010incWHERE include = p_programa

IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF

MOVEp_linea TO l_linep_programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM asignar_break

amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit

IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF

PERFORM get_objects Get Objects

ENDFORM buscar_user_exit

amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects

DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area

DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix

SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog

IF sy-subrc = 0

SORT ti_tadir BY obj_name devclass

SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass

IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF

- Get UserExit namesLOOP AT ti_jtab

SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E

APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area

l_fname = ti_final-member

CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include

LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP

CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP

ENDFORM get_objects

amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X

ENDFORM construir_catalogo_uexit

amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------

FORM visualizar_ampliacion

DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF

SELECT SINGLE FROM modsapWHERE member EQ l_member

IF sy-subrc IS INITIAL

Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member

ENDIF

ENDFORM visualizar_ampliacion

amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea

RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs

REFRESH r_event r_procs

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event

SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs

SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE

ENDFORM visualizar_bte

amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE

----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c

DATAl_linea(500) TYPE c

DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

MOVE lt_fields-value TO l_linea

PERFORM visualizar_bte USING p_tipol_linea

ENDFORM cargar_bte

amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface

DATAl_linea(500) TYPE c

DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE

InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF

ENDFORM visualizar_interface

amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones

CHECK p_sust IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922

ENDFORM buscar_sustituciones

amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST

ENDFORM construir_catalogo_sust

amp---------------------------------------------------------------------

amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones

ENDFORM TOP_OF_PAGE_SUST

amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4

CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_sust

amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones

CHECK p_val IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931

ENDFORM buscar_validaciones

amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID

ENDFORM construir_catalogo_val

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones

ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2

CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_val

amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto

DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF

SELECT SINGLE FROM modsapWHERE name EQ l_name

IF sy-subrc IS INITIAL

MOVE l_name TO l_member

SELECT SINGLE FROM modactWHERE member EQ l_member

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF

ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF

ENDFORM visualizar_proyecto

amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel

APPEND ti_enh

ENDIFENDIFENDIF

ENDFORM buscar_punto_ampliacioacuten

amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_enh

amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh

DATA l_obj_name TYPE enhobj-obj_name

DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name

CHECK p_enh IS NOT INITIAL

IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF

REFRESH lt_obj_name

LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP

SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name

ENDFORM buscar_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X

ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME

ENDFORM construir_catalogo_enhobj

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENHOBJ

amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM bi_se19

amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro

CLEAR ti_bdcdatati_bdcdata-program = program

ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata

ENDFORM BDC_DYNPRO

amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval

CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata

ENDFORM BDC_FIELD

amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa

DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)

CHECK ti_gb31t[] IS NOT INITIAL

DO

Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2

IF l_exit EQ XEXITENDIF

CHECK l_exit IS INITIAL

Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND

CHECK l_boolpool IS NOT INITIAL

MOVE l_boolpool TO l_repid

Visualizo el programaPERFORM visualizar_linea USING l_repid01

ENDDO

ENDFORM visualizar_programa

amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope

STATICS l_flag TYPE c

DATA l_tit(65) TYPE c

CHECK l_flag IS INITIAL

l_flag = X

WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline

4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM texto_tope

amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf

DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off

CHECK l_off IS NOT INITIAL

ADD 7 TO l_offl_cf = 500 - l_off

SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_enhspotname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1

invalid_object_type = 2OTHERS = 3

ENDFORM bi_se18

amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit

DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE

DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE

MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE

MOVE lt_fields-value TO l_nameENDIF

Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_

LOOP AT lt_tfdir

CLEARl_group l_include l_namespace l_str_area

l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl

IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl

CHECK sy-subrc IS INITIAL

Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP

CHECK l_flag IS INITIAL

La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value

ENDFORM visualizar_fm_exit

amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter

tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten

ENDFORM def_text_parameter

amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones

Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt

Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt

Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt

icon_create RESULT name text infoicon_create

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 7: buscar_ampliaciones FOROSAP

Boton de programa sustitucioacuten en la DYNPROSELECTION-SCREEN PUSHBUTTON 38(45) sust USER-COMMAND sustVISIBLE LENGTH 15

SELECTION-SCREEN END OF LINE

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text13POSITION 20PARAMETERS p_val AS CHECKBOX Validacioacuten

Boton de Validacioacuten en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(45) ob28 USER-COMMAND ob28VISIBLE LENGTH 12

Boton de programa sustitucioacuten en la DYNPROSELECTION-SCREEN PUSHBUTTON 38(45) val USER-COMMAND valVISIBLE LENGTH 15

SELECTION-SCREEN END OF LINE

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text11POSITION 20PARAMETERS p_fdex AS CHECKBOX Field-exit

Boton de Field-exit en la DYNPROSELECTION-SCREEN PUSHBUTTON 25(60) btn2 USER-COMMAND fdexVISIBLE LENGTH 28

SELECTION-SCREEN END OF LINE

SELECTION-SCREEN END OF BLOCK bl02

- DATOS OPCIONALESSELECTION-SCREEN BEGIN OF BLOCK bl03 WITH FRAME TITLE tit3

SELECTION-SCREEN BEGIN OF LINE Boton de ALL en la DYNPROSELECTION-SCREEN PUSHBUTTON 18(60) all USER-COMMAND allVISIBLE LENGTH 1 Boton de DAL en la DYNPROSELECTION-SCREEN PUSHBUTTON 21(60) dal USER-COMMAND dalVISIBLE LENGTH 1SELECTION-SCREEN END OF LINE

SELECTION-SCREEN ULINE

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text3POSITION 20PARAMETERS p_incl AS CHECKBOX DEFAULT X IncludesSELECTION-SCREEN END OF LINE

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text4POSITION 20PARAMETERS p_func AS CHECKBOX DEFAULT X Funciones

SELECTION-SCREEN END OF LINE

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text5POSITION 20PARAMETERS p_submit AS CHECKBOX DEFAULT X SubmitSELECTION-SCREEN END OF LINE

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text6POSITION 20PARAMETERS p_nivel(2) TYPE n DEFAULT 04 NivelSELECTION-SCREEN END OF LINE

SELECTION-SCREEN END OF BLOCK bl03

Botoacuten de Marcar todo en el STATUS GUISELECTION-SCREEN FUNCTION KEY 1 Botoacuten de Desmarcar todo en el STATUS GUISELECTION-SCREEN FUNCTION KEY 2 Botoacuten de Breakpoint en el STATUS GUISELECTION-SCREEN FUNCTION KEY 3

----------------------------------------------------------------------- DEFINICIOacuteN DE MACROS-----------------------------------------------------------------------DEFINE icon_create Creo para el botoacuten indicado el icono y los textos correspondientes

call function ICON_CREATEexportingname = amp2text = amp3info = amp4importingresult = amp1exceptionsothers = 0

END-OF-DEFINITION icon_create

----------------------------------------------------------------------- INICIALIZACIOacuteN DE VARIABLES-----------------------------------------------------------------------INITIALIZATION

PERFORM def_text_parameter

PERFORM def_botones

CLEAR ti_gb31tREFRESH ti_gb31t

Obtengo ValidacioacutenSustitucioacutenEventosTextoSELECT INTO TABLE ti_gb31tFROM gb31tWHERE spras EQ sy-langu

----------------------------------------------------------------------- AT SELECTION-SCREEN-----------------------------------------------------------------------

AT SELECTION-SCREEN

CASE sscrfields-ucommWHEN FC01MOVE X TO p_ue p_badi p_bte p_sust p_val p_fdex p_enhWHEN FC02CLEAR p_ue p_badi p_bte p_sust p_val p_fdex p_enhWHEN FC03PERFORM breakpointWHEN EXTPERFORM visualizar_ampliacionWHEN EXT1PERFORM visualizar_proyectoWHEN EXT2PERFORM visualizar_fm_exitWHEN BADIPERFORM visualizar_interfaceWHEN OBBCALL TRANSACTION OBBHWHEN OB28CALL TRANSACTION OB28WHEN SUST OR VALPERFORM visualizar_programaWHEN FDEXSUBMIT rsmodprf AND RETURNWHEN BTE1CALL TRANSACTION FIBFWHEN BTE2PERFORM cargar_bte USING EWHEN BTE3PERFORM cargar_bte USING PWHEN SENHSUBMIT sapmsenh VIA SELECTION-SCREENAND RETURNWHEN CIMPPERFORM visualizar_imp_enhWHEN ALLMOVE X TO p_incl p_func p_submitWHEN DALCLEAR p_incl p_func p_submitWHEN OTHERS Do Nothing ENDCASE

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_prog

PERFORM repid_f4

---------------------------------------------------------------------- INICIO----------------------------------------------------------------------START-OF-SELECTION

GET TIME FIELD w_tini

- CONSISTENCIAS DE LOS PARAMETROSPERFORM consisti_parametros

- INICIALIZA TABLAPERFORM inicializa_tabela

- VERIFICA SI EN EL PROGRAMA EXISTE ALGUN INCLUDE FUNCION O SUBMITPERFORM verifica_include_funcao_submit

- ANALISA LOS INCLUDES Y BUSCA POR USER-EXIT BADIS Y BTEPERFORM busca_user_exit_badi_bte

- ANALISA LOS INCLUDES Y BUSCA LOS FIELD-EXITSPERFORM buscar_field_exit

- OBTENGO LOS EXITs DE LA TRANSACCIOacuteNPERFORM buscar_user_exit

- OBTENGO LAS PUNTOS DE AMPLIACIOacuteNPERFORM buscar_enh

- OBTENGO LAS SUSTITUCIONESPERFORM buscar_sustituciones

- OBTENGO LAS VALIDACIONESPERFORM buscar_validaciones

- CARGO LOS BREAKPOINTSPERFORM cargar_break

- VISUALIZA LAS AMPLIACIONES ENCONTRADASPERFORM exibe_user_exit

---------------------------------------------------------------------- FIN----------------------------------------------------------------------END-OF-SELECTION

amp---------------------------------------------------------------------amp Form BUSCA_USER_EXIT_BADI_BTEamp--------------------------------------------------------------------- Busca EXITs BADIs y BTE en el coacutedigo fuente----------------------------------------------------------------------FORM busca_user_exit_badi_bte

- VERIFICA SI EN LOS INCLUDES SELECIONADOS EXISTEN EXITSLOOP AT ti_includes

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

- BORRA LA TABLA INTERNAREFRESH ti_programa

- REALIZA LECTURA DE INCLUDE ALMACENANDO EN TABLA INTERNAREAD REPORT ti_includes-nome INTO ti_programa

LOOP AT ti_programa

IF p_ue EQ XPERFORM buscar_exitPERFORM busca_enhancementsENDIF

IF p_badi EQ XPERFORM buscar_badiENDIF

IF p_bte EQ XPERFORM buscar_bteENDIF

IF p_enh EQ XPERFORM buscar_punto_ampliacionENDIF

ENDLOOPENDLOOP

ENDFORM BUSCA_USER_EXIT_BADI_BTE

amp---------------------------------------------------------------------amp Form BUSCA_ENHANCEMENTSamp--------------------------------------------------------------------- Busca las llamadas a los USER-EXIT----------------------------------------------------------------------FORM busca_enhancements

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE EN ALGUN ENHANCEMENTSEARCH ti_programa-cf FOR c_enhance- SE ENCONTRO EL ENHANCEMENT Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentarioCLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF

ENDFORM BUSCA_ENHANCEMENTS

amp---------------------------------------------------------------------amp Form EXIBE_USER_EXITamp--------------------------------------------------------------------- Muestra los datos----------------------------------------------------------------------FORM exibe_user_exit

PERFORM armar_alv

PERFORM mostrar_listado

ENDFORM EXIBE_USER_EXIT

amp---------------------------------------------------------------------amp Form PROCURA_INCLUDEamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_include

CLEAR vg_palavra

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN INCLUDESEARCH ti_programa-cf FOR c_include- SE ENCONTRO EN EL INCLUDE Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN STRUCTURESEARCH ti_programa-cf FOR c_struct

IF sy-subrc IS INITIALEXITENDIF

- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DEL INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF NOT vg_caracter IS INITIAL- VERIFICA SI NO ES FIN DE COMANDOIF vg_caracter EQ c_pontoEXITENDIF- ARMA PALABRACONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACIONTRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_includeCLEAR vg_palavraENDIFENDIFENDDO- GRABA NOMBRE DEL INCLUDE PARA FUTURA BUSQUEDA POR USER EXITREAD TABLE ti_includes WITH KEY nome = vg_palavraIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_palavra TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIF

ENDIF

ENDFORM PROCURA_INCLUDE

amp---------------------------------------------------------------------amp Form PROCURA_FUNCAOamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_funcao

CLEAR vg_conta_aspavg_palavra

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA FUNCIONSEARCH ti_programa-cf FOR c_funcao_2- SE ENCONTRO UNA FUNCION Y LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DE LA INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF NOT vg_caracter IS INITIAL- VERIFICA SI NO ES FIN DE COMANDOIF vg_caracter EQ c_aspaADD 1 TO vg_conta_aspaIF vg_conta_aspa EQ 2EXITENDIFENDIF- ARMA PALABRACONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACIONTRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_funcao_1CLEAR vg_palavraENDIFENDIFENDDO- BUSCA NOMBRE DE LA FUNCION PARA FUTURA BUSQUEDA POR USER EXITCLEAR vg_pnameSELECT SINGLE pnameINTO vg_pnameFROM tfdirWHERE funcname EQ vg_palavraIF sy-subrc EQ 0

READ TABLE ti_includes WITH KEY nome = vg_pnameIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_pname TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIF

ENDIF

ENDIF

ENDFORM PROCURA_FUNCAO

amp---------------------------------------------------------------------amp Form VERIFICA_INCLUDE_FUNCAO_SUBMITamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM verifica_include_funcao_submit

CHECK p_ue IS NOT INITIAL OR p_badi IS NOT INITIALOR p_bte IS NOT INITIAL OR p_enh IS NOT INITIAL

LOOP AT ti_includes

ADD 1 TO vg_contadorDESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfillMOVE ti_includes-nivel TO vg_nivelADD 1 TO vg_nivel

- BORRA TABLA INTERNAREFRESH ti_programa

- REALIZA LECTURA DE INCLUDEFUNCION ALMACENANDO EN TABLA INTERNAREAD REPORT ti_includes-nome INTO ti_programa

LOOP AT ti_programa

- PROCURA POR INCLUDESIF p_incl EQ c_xPERFORM procura_includeENDIF- PROCURA POR FUNCIONIF p_func EQ c_xPERFORM procura_funcaoENDIF- PROCURA POR SUBMITIF p_submit EQ c_xPERFORM procura_submitENDIF

ENDLOOP

ENDLOOP

ENDFORM VERIFICA_INCLUDE_FUNCAO_SUBMIT

amp---------------------------------------------------------------------amp Form EVITAR_TIME_OUTamp--------------------------------------------------------------------- Evito el TIME OUT visualizando un mensaje----------------------------------------------------------------------FORM evitar_time_out USING p_tfill LIKE sy-tfill

DATAvl_total(10) TYPE n

vl_atual(10) TYPE nl_tout LIKE sy-timlol_time(10) TYPE c

GET TIME FIELD l_tout

l_tout = l_tout - w_tini

MOVEp_tfill TO vl_totalvg_contador TO vl_atual

SHIFT vl_total LEFT DELETING LEADING 0SHIFT vl_atual LEFT DELETING LEADING 0WRITE l_tout TO l_time

CONCATENATE Tpo l_time Total vl_total Actual vl_atualINTO vg_textoSEPARATED BY space

CALL FUNCTION SAPGUI_PROGRESS_INDICATOREXPORTINGtext = vg_texto

ENDFORM EVITAR_TIME_OUT

amp---------------------------------------------------------------------amp Form PROCURA_SUBMITamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_submit

CLEAR vg_conta_espaco vg_palavra vg_ini_contagem

- VERIFICA SI LA LINEA DEL PROGRAMA EXISTE ALGUN INCLUDESEARCH ti_programa-cf FOR c_submit- SE ENCONTRO EN EL INCLUDE Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DEL INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF vg_ini_contagem EQ c_x AND vg_caracter IS INITIALADD 1 TO vg_conta_espacoENDIF

IF NOT vg_caracter IS INITIALMOVE c_x TO vg_ini_contagemIF vg_caracter EQ c_pontoEXITENDIF- ARMA PALABRAIF vg_conta_espaco LT 2CONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACION

TRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_submitCLEAR vg_palavraENDIFELSEEXITENDIFENDIFENDDO- BUSCA NOMBRE DE LA FUNCION PARA FUTURA BUSQUEDA POR USER EXITREAD TABLE ti_includes WITH KEY nome = vg_palavraIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_palavra TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIFENDIF

ENDFORM PROCURA_SUBMIT

amp---------------------------------------------------------------------amp Form CONSISTI_PARAMETROSamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM consisti_parametros

IF p_nivel IS INITIALMOVE 1 TO p_nivelENDIF

IF p_prog IS INITIAL AND p_tcode IS INITIAL- EL NOMBRE DEL PROGRAMA Y EL NOMBRE DE LA TRANSACCION NO PUEDEN SER- NULOS UNO DE ELLOS DEBE SER INFORMADOMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e01STOPENDIF

IF NOT p_prog IS INITIAL AND NOT p_tcode IS INITIAL- SE SOLICITA AL USUARIO QUE INFORME NOMBRE DE PROGRAMA O TRANSACCIONMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e02STOPENDIF

IF p_ue IS INITIAL AND p_badi IS INITIAL AND p_bte IS INITIALAND p_sust IS INITIAL AND p_val IS INITIAL AND p_fdex IS INITIALAND p_enh IS INITIAL- SE SOLICITA AL USUARIO QUE INFORME UN TIPO DE MEJORAMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e03STOPENDIF

ENDFORM CONSISTI_PARAMETROS

amp---------------------------------------------------------------------

amp Form INICIALIZA_TABELAamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM inicializa_tabela

DATAe_tstc TYPE tstcl_tcode TYPE sy-tcode

REFRESH ti_includes

IF NOT p_prog IS INITIAL

MOVE p_prog TO ti_includes-nome0 TO ti_includes-nivelAPPEND ti_includes

- BUSCO EL PROGRAMAREAD REPORT ti_includes-nome INTO ti_programa

IF sy-subrc EQ 0REFRESH ti_programaELSE- EL PROGRAMA NO EXISTEMESSAGE s893(pz) WITH El programa p_prog no existeSTOPENDIF

ELSEIF NOT p_tcode IS INITIAL

SELECT SINGLE FROM tstcWHERE tcode EQ p_tcode

IF sy-subrc EQ 0

IF tstc-pgmna IS NOT INITIALMOVE tstc-pgmna TO ti_includes-nome0 TO ti_includes-nivelAPPEND ti_includesELSE Se trata de una transaccioacuten de paraacutemetros Obtengo la transaccioacuten asociadaCALL FUNCTION RS_TRANSACTION_SINGLE_GETEXPORTINGparameter_tcode = p_tcodeIMPORTINGtcode = l_tcode

SELECT SINGLE INTO e_tstcFROM tstcWHERE tcode EQ l_tcode

IF sy-subrc EQ 0MOVE e_tstc-pgmna TO ti_includes-nome0 TO ti_includes-nivel

APPEND ti_includesELSE- LA TRANSACCIOacuteN NO EXISTEMESSAGE s893(pz) WITH La transaccioacuten p_tcode no existeENDIFENDIFELSE- LA TRANSACCIOacuteN NO EXISTEMESSAGE s893(pz) WITH La transaccioacuten p_tcode no existeSTOPENDIFENDIF

ENDFORM INICIALIZA_TABELA

amp---------------------------------------------------------------------amp Form armar_alvamp--------------------------------------------------------------------- Armo el ALV----------------------------------------------------------------------FORM armar_alv

DATAl_repid TYPE sy-repid

MOVE sy-repid TO l_repid

CALL FUNCTION REUSE_ALV_BLOCK_LIST_INITEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMAND

IF p_ue IS NOT INITIALPERFORM construir_catalogo_exitPERFORM definir_layout USING TI_USER_EXITCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGEPERFORM sort TABLES ti_sortUSING TI_USER_EXIT

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_USER_EXITit_events = ti_eventsit_sort = ti_sorti_text = User-exitTABLESt_outtab = ti_user_exitEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

PERFORM construir_catalogo_uexitPERFORM definir_layout USING TI_FINAL

CHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_UEXITPERFORM sort TABLES ti_sortUSING TI_FINAL

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FINALit_events = ti_eventsit_sort = ti_sorti_text = User-exit TxCMODTABLESt_outtab = ti_finalEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_badi IS NOT INITIALPERFORM construir_catalogo_badiPERFORM definir_layout USING TI_BADICHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BADIPERFORM sort TABLES ti_sortUSING TI_BADI

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_BADIit_events = ti_eventsit_sort = ti_sorti_text = BadisTABLESt_outtab = ti_badiEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_bte IS NOT INITIALPERFORM construir_catalogo_btePERFORM definir_layout USING TI_BTECHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BTEPERFORM sort TABLES ti_sortUSING TI_BTE

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layout

it_fieldcat = ti_cati_tabname = TI_BTEit_events = ti_eventsit_sort = ti_sorti_text = BTETABLESt_outtab = ti_bteEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_enh IS NOT INITIALPERFORM construir_catalogo_enhPERFORM definir_layout USING TI_ENHCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHPERFORM sort TABLES ti_sortUSING TI_ENH

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHit_events = ti_eventsit_sort = ti_sorti_text = ENHTABLESt_outtab = ti_enhEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

PERFORM construir_catalogo_enhobjPERFORM definir_layout USING TI_ENHOBJCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHOBJPERFORM sort TABLES ti_sortUSING TI_ENHOBJ

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHOBJit_events = ti_eventsit_sort = ti_sorti_text = ENHOBJTABLESt_outtab = ti_enhobjEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_sust IS NOT INITIALPERFORM construir_catalogo_sustPERFORM definir_layout USING TI_SUSTCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_SUSTPERFORM sort TABLES ti_sortUSING TI_SUST

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_SUSTit_events = ti_eventsit_sort = ti_sorti_text = SustitucionesTABLESt_outtab = ti_sustEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_val IS NOT INITIALPERFORM construir_catalogo_valPERFORM definir_layout USING TI_VALCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_VALPERFORM sort TABLES ti_sortUSING TI_VAL

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_VALit_events = ti_eventsit_sort = ti_sorti_text = ValidacionesTABLESt_outtab = ti_valEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_fdex IS NOT INITIALPERFORM construir_catalogo_fdexPERFORM definir_layout USING TI_FDEXCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_FDEX

PERFORM sort TABLES ti_sortUSING TI_FDEX

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FDEXit_events = ti_eventsit_sort = ti_sorti_text = Field-exitTABLESt_outtab = ti_fdexEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

ENDFORM armar_alv

amp---------------------------------------------------------------------amp Form construir_catalogo_EXITamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_exit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_USER_EXITi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03

CF X c_text_04

ENDFORM construir_catalogo_EXIT

amp---------------------------------------------------------------------amp Form asignar_campo_a_catalogoamp--------------------------------------------------------------------- Asignar campo al catalogo ALV----------------------------------------------------------------------FORM asignar_campo_a_catalogo TABLES pt_cat STRUCTURE wa_catUSING p_fieldname LIKE wa_cat-fieldnamep_key LIKE wa_cat-keyp_col_pos TYPE cp_fix_column LIKE wa_cat-fix_columnp_hotspot LIKE wa_cat-hotspotp_do_sum LIKE wa_cat-do_sump_input LIKE wa_cat-inputp_checkbox LIKE wa_cat-checkboxp_no_out LIKE wa_cat-no_outp_icon LIKE wa_cat-iconp_reptext_ddic LIKE wa_cat-reptext_ddic

STATICS l_col_pos LIKE sy-cucol

Asignar atributos de campo en el catalogo de cabecera ALVCLEAR wa_catREAD TABLE pt_cat INTO wa_catWITH KEY fieldname = p_fieldname

CHECK sy-subrc EQ 0

IF NOT p_reptext_ddic IS INITIALwa_cat-seltext_l = wa_cat-seltext_m =wa_cat-seltext_s = wa_cat-reptext_ddic = p_reptext_ddicENDIF

IF p_col_pos EQ X Inicializo el conteo para ordenar las columnasl_col_pos = 1ELSEADD 1 TO l_col_posENDIF

wa_cat-fieldname = p_fieldnamewa_cat-key = p_keywa_cat-col_pos = l_col_poswa_cat-fix_column = p_fix_columnwa_cat-hotspot = p_hotspotwa_cat-do_sum = p_do_sumwa_cat-edit = wa_cat-input = p_inputwa_cat-checkbox = p_checkboxwa_cat-no_out = p_no_outwa_cat-icon = p_icon

MODIFY pt_cat FROM wa_cat INDEX sy-tabix

ENDFORM asignar_campo_a_catalogo

amp---------------------------------------------------------------------amp Form definir_layoutamp--------------------------------------------------------------------- Definir atributos del layout de reporte----------------------------------------------------------------------FORM definir_layout USING p_table TYPE slis_layout_alv-box_tabnameCHANGING p_layout TYPE slis_layout_alv

CLEAR p_layout

IF p_table NE TI_CIMP Marco el campo para la seleccioacutenp_layout-box_fieldname = SELp_layout-box_tabname = p_tableENDIFp_layout-zebra = Xp_layout-colwidth_optimize = Xp_layout-no_vline = p_layout-no_colhead = p_layout-lights_condense = Xp_layout-detail_popup = Xp_layout-detail_initial_lines = Xp_layout-flexible_key = p_layout-key_hotspot = p_layout-confirmation_prompt = X

ENDFORM definir_layout

amp---------------------------------------------------------------------amp Form construir_eventosamp--------------------------------------------------------------------- Asignar eventos soportados----------------------------------------------------------------------FORM construir_eventos USING p_form LIKE wa_events-formDATAl_type(1) TYPE n

REFRESH ti_eventsCLEAR wa_events

ALV Simple Block appendl_type = 2

Buscar secciones para eventosCALL FUNCTION REUSE_ALV_EVENTS_GETEXPORTINGi_list_type = l_typeIMPORTINGet_events = ti_events

Leer evento TOP_OF_PAGEREAD TABLE ti_events WITH KEY name = slis_ev_top_of_pageINTO wa_events Asignar Rutina FORM TOP_OF_PAGE a eventoIF sy-subrc = 0MOVE p_form TO wa_events-formMODIFY ti_events FROM wa_events INDEX sy-tabixENDIF

ENDFORM construir_eventos

amp---------------------------------------------------------------------amp Form top_of_pageamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_user_exitWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUser-exit

ENDFORM top_of_page

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_UEXITamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_uexit

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_finalWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUSER-EXITs TxSMOD

ENDFORM TOP_OF_PAGE_UEXIT

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_FDEXamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_fdex

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_fdexWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incFIELD-EXITs

ENDFORM TOP_OF_PAGE_FDEX

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BADIamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_badi

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_badiWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBADIs

ENDFORM TOP_OF_PAGE_BADI

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BTEamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_bte

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_bteWRITE sy-tfill TO l_tfill_cant

CONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBTEs

ENDFORM TOP_OF_PAGE_BTE

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enh

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_enhWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENH

amp---------------------------------------------------------------------amp Form sortamp--------------------------------------------------------------------- Creo el sort del ALV (FM)---------------------------------------------------------------------- --gtPT_sort Tabla --gtP_tabname Nombre de la tabla----------------------------------------------------------------------FORM sort TABLES pt_sortUSING p_tabname TYPE any

CLEAR pt_sort wa_sortREFRESH pt_sort

CASE p_tabnameWHEN TI_SUST

wa_sort-fieldname = SUBSTIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = SUBSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = CONSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN TI_VAL

wa_sort-fieldname = VALIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = VALSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN TI_ENHOBJ

wa_sort-fieldname = ENHNAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = VERSIONwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN OTHERS

IF p_tabname NE TI_FINAL

wa_sort-fieldname = TIPOwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

IF p_tabname NE TI_FDEX

wa_sort-fieldname = NIVELwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = PROGRAMAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = LINEAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

ENDIF

ELSE

wa_sort-fieldname = NAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = MEMBERwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sortENDIFENDCASE

ENDFORM sort

amp---------------------------------------------------------------------amp Form mostrar_listadoamp--------------------------------------------------------------------- Mostrar listado ALV----------------------------------------------------------------------FORM mostrar_listado

wa_print-reserve_lines = 2

CALL FUNCTION REUSE_ALV_BLOCK_LIST_DISPLAY

EXPORTINGis_print = wa_printEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM mostrar_listado

amp---------------------------------------------------------------------amp Form user_commandamp--------------------------------------------------------------------- Evaluar acciones del usuario----------------------------------------------------------------------FORM user_command USING ucomm LIKE sy-ucommsfields TYPE slis_selfield

DATA l_break TYPE c

Rescatar el registro seleccionadoCASE sfields-tabnameWHEN TI_USER_EXITREAD TABLE ti_user_exit INDEX sfields-tabindexWHEN TI_BADIREAD TABLE ti_badi INDEX sfields-tabindexWHEN TI_BTEREAD TABLE ti_bte INDEX sfields-tabindexWHEN TI_ENHREAD TABLE ti_enh INDEX sfields-tabindexWHEN TI_ENHOBJREAD TABLE ti_enhobj INDEX sfields-tabindexWHEN TI_FDEXREAD TABLE ti_fdex INDEX sfields-tabindexWHEN TI_FINALREAD TABLE ti_final INDEX sfields-tabindexWHEN TI_SUSTREAD TABLE ti_sust INDEX sfields-tabindexWHEN TI_VALREAD TABLE ti_val INDEX sfields-tabindexWHEN TI_CIMPREAD TABLE ti_cimp INDEX sfields-tabindexENDCASE

Seleccion de opcionCASE ucomm DOUBLE CLICKWHEN ampIC1 Evaluar valor de campo seleccionadoCHECK NOT sfields-value IS INITIAL

CASE sfields-tabnameWHEN TI_USER_EXIT USER-EXITIF ti_user_exit-tipo EQ sfields-value(4)SEARCH ti_user_exit-cf FOR c_enhanceCHECK sy-subrc EQ 0PERFORM visualizar_exit USING ti_user_exit-programati_user_exit-cf

ELSEIF ti_user_exit-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_user_exit-programati_user_exit-lineaMOVE X TO l_breakELSEIF ti_user_exit-break EQ sfields-value(4)OR ti_user_exit-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_user_exit-programati_user_exit-lineati_user_exit-breakMOVE X TO l_breakENDIF

WHEN TI_FINAL USER-EXIT Tx CMODIF ti_final-name EQ sfields-valueCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = ti_final-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSEIF ti_final-include EQ sfields-valuePERFORM visualizar_linea USING ti_final-programa1MOVE X TO l_breakENDIF

WHEN TI_BADI BadiIF ti_badi-tipo EQ sfields-value(4)PERFORM visualizar_badi USING ti_badi-cfELSEIF ti_badi-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_badi-programati_badi-lineaMOVE X TO l_breakELSEIF ti_badi-break EQ sfields-value(4)OR ti_badi-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_badi-programati_badi-lineati_badi-breakMOVE X TO l_breakENDIF

WHEN TI_BTE BTEIF ti_bte-tipo EQ sfields-value(4)PERFORM fibf USING ti_bte-cfELSEIF ti_bte-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_bte-programati_bte-lineaMOVE X TO l_breakELSEIF ti_bte-break EQ sfields-value(4)OR ti_bte-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_bte-programati_bte-linea

ti_bte-breakMOVE X TO l_breakENDIF

WHEN TI_ENH Punto de ampliacioacutenIF ti_enh-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_enh-programati_enh-lineaMOVE X TO l_breakELSEIF ti_enh-tipo EQ sfields-value(4)PERFORM bi_se18 USING ti_enh-cfENDIF

WHEN TI_ENHOBJ Punto de ampliacioacutenIF ti_enhobj-enhname EQ sfields-value(30)PERFORM bi_se19 USING ti_enhobj-enhnameENDIF

WHEN TI_SUST SustitucionesIF ti_sust-substid EQ sfields-value(7) ORti_sust-subseqnr EQ sfields-value(3)PERFORM visualizar_sust USING ti_sust-substidti_sust-subseqnrENDIF

WHEN TI_VAL ValidacionesIF ti_val-valid EQ sfields-value(7) ORti_val-valseqnr EQ sfields-value(3)PERFORM visualizar_val USING ti_val-validti_val-valseqnrENDIF

WHEN TI_FDEX Field-exitIF ti_fdex-tipo EQ sfields-valueSUBMIT rsmodprf AND RETURNELSEIF ti_fdex-cf(60) EQ sfields-value Visualizo el field-exitCALL FUNCTION RS_FUNCTION_SHOWEXPORTINGfuncname = ti_fdex-cf

CALL FUNCTION RS_NAVIGATION_MONITORENDIF

WHEN TI_CIMP Customer implementation

CASE sfields-fieldnameWHEN ENHNAMEPERFORM bi_se19 USING ti_cimp-enhnameWHEN ENHINCLUDEPERFORM visualizar_enh_cf USING ti_cimp-enhinclude

WHEN OTHERS DO NOTHING ENDCASE

WHEN OTHERS DO NOTHING ENDCASE

WHEN OTHERS DO NOTHING ENDCASE

IF l_break IS NOT INITIAL AND sfields-tabname NE TI_CIMPWAIT UP TO 1 SECONDSPERFORM cargar_breakENDIFsfields-refresh = X

ENDFORM user_command

amp---------------------------------------------------------------------amp Form visualizar_lineaamp--------------------------------------------------------------------- Visualizo la linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_linea USING p_programa TYPE sy-repidp_linea

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_programaobject_type = c_typeposition = p_lineaEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM visualizar_linea

amp---------------------------------------------------------------------amp Form buscar_exitamp--------------------------------------------------------------------- Buscar USER-EXIT----------------------------------------------------------------------FORM buscar_exit

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN USER-EXITSEARCH ti_programa-cf FOR c_user_exit- SE ENCONTRO UN USER-EXIT Y SE VERIFICA SI LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS PERFORMSEARCH ti_programa-cf FOR c_performCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LAS ASIGNACIONESSEARCH ti_programa-cf FOR c_igualCHECK sy-subrc NE 0

CLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INIacuteCIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF

ENDFORM buscar_exit

amp---------------------------------------------------------------------amp Form buscar_badiamp--------------------------------------------------------------------- Buscar BADI----------------------------------------------------------------------FORM buscar_badi

DATAl_subrc LIKE sy-subrc

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BADISEARCH ti_programa-cf FOR c_badi- SE ENCONTRO UNA BADI Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

SEARCH ti_programa-cf FOR c_includeIF sy-subrc NE 0CLEAR l_subrcSEARCH ti_programa-cf FOR c_methodIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_funcao_2IF sy-subrc NE 0SEARCH ti_programa-cf FOR c_performIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_type_refIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_formMOVE 4 TO l_subrcENDIFENDIFENDIFENDIF

IF l_subrc EQ 0CLEAR ti_badi

- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIFELSECHECK p_handl IS NOT INITIAL- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA INSTANCIA DE- UNA BADISEARCH ti_programa-cf FOR c_handler- SE ENCONTRO UNA INSTANCIA DE IMPLEMENACIOacuteN Y SE VERIFICA SI LA LINEA- NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

SEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0CLEAR ti_badi- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIF

ENDFORM buscar_badi

amp---------------------------------------------------------------------amp Form buscar_bteamp--------------------------------------------------------------------- Buscar BTE----------------------------------------------------------------------FORM buscar_bte

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OPEN_FI_PERFORM

- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endform

CHECK sy-subrc NE 0

CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte1- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OUTBOUND_CALL

- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0

CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF

ENDFORM buscar_bte

amp---------------------------------------------------------------------amp Form repid_f4amp--------------------------------------------------------------------- Ejecuto el F4 para buscar programas----------------------------------------------------------------------FORM repid_f4

CALL FUNCTION REPOSITORY_INFO_SYSTEM_F4EXPORTINGobject_type = PROGobject_name = p_progsuppress_selection = XIMPORTINGobject_name_selected = p_progEXCEPTIONS

cancel = 1wrong_type = 2OTHERS = 3

ENDFORM repid_f4

amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf

DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

SEARCH p_cf FOR 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 INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

READ TABLE lt_cf INDEX 4

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

CHECK sy-subrc IS INITIAL

Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten

textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer

CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4

IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF

WHEN OTHERS Do Nothing ENDCASE

ENDFORM visualizar_badi

amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf

DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

CLEAR d010inc modsap modact

Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid

IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF

SEARCH p_cf FOR c_enhance

CHECK sy-subrc IS INITIAL

REFRESH lt_cf

l_cf = 500 - sy-fdpos

MOVE p_cf+sy-fdpos(l_cf) TO l_linea

SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3

TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS

Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _

Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit

CHECK sy-subrc IS INITIAL

Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM

modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3

ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname

CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ENDIF

ENDFORM visualizar_exit

amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit

DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo

DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe

DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE

CHECK p_fdex IS NOT INITIAL

CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe

MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex

IF p_prog IS NOT INITIAL

MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF

Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog

LOOP AT lt_d020s

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

REFRESH lt_d021s

Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4

Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X

SEARCH lt_d021s-fnam FOR -

IF sy-subrc IS INITIAL

MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum

Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname

APPEND lt_campo

ENDIF

ENDLOOPENDLOOP

CHECK lt_campo[] IS NOT INITIAL

SORT lt_campo BY repid dnum tabname fieldname

DELETE ADJACENT DUPLICATES FROM lt_campo

Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname

SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l

LOOP AT lt_dd03l

CLEAR tddir tddirs

SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname

CHECK sy-subrc IS INITIAL

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog

CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF

Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf

IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF

READ TABLE lt_fe WITH KEY cf = lt_fe-cf

CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP

LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex

ENDLOOP

ENDFORM buscar_field_exit

amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf

DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c

SEARCH p_cf FOR c_bte

IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ELSE

SEARCH p_cf FOR c_bte1

CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ENDIF

IF l_tipo IS NOT INITIAL

PERFORM visualizar_bte USING l_tipol_linea

ELSECALL TRANSACTION FIBFENDIF

ENDFORM fibf

amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT

EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM breakpoint

amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_badi

amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE

i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_bte

amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X TIPO X X c_text_05CF X c_text_04

ENDFORM construir_catalogo_FDEX

amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc

DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

CHECK lt_break[] IS NOT INITIAL

IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix

MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF

IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix

MOVEti_badi-linea TO l_lineti_badi-programa TO l_program

READ TABLE lt_break INTO wa_break

WITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF

IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix

MOVEti_bte-linea TO l_lineti_bte-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF

ENDFORM cargar_break

amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

DATAl_tabix TYPE sy-tabix

l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

SELECT SINGLE FROM d010incWHERE include = p_programa

IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF

MOVEp_linea TO l_linep_programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM asignar_break

amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit

IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF

PERFORM get_objects Get Objects

ENDFORM buscar_user_exit

amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects

DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area

DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix

SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog

IF sy-subrc = 0

SORT ti_tadir BY obj_name devclass

SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass

IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF

- Get UserExit namesLOOP AT ti_jtab

SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E

APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area

l_fname = ti_final-member

CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include

LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP

CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP

ENDFORM get_objects

amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X

ENDFORM construir_catalogo_uexit

amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------

FORM visualizar_ampliacion

DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF

SELECT SINGLE FROM modsapWHERE member EQ l_member

IF sy-subrc IS INITIAL

Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member

ENDIF

ENDFORM visualizar_ampliacion

amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea

RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs

REFRESH r_event r_procs

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event

SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs

SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE

ENDFORM visualizar_bte

amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE

----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c

DATAl_linea(500) TYPE c

DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

MOVE lt_fields-value TO l_linea

PERFORM visualizar_bte USING p_tipol_linea

ENDFORM cargar_bte

amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface

DATAl_linea(500) TYPE c

DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE

InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF

ENDFORM visualizar_interface

amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones

CHECK p_sust IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922

ENDFORM buscar_sustituciones

amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST

ENDFORM construir_catalogo_sust

amp---------------------------------------------------------------------

amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones

ENDFORM TOP_OF_PAGE_SUST

amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4

CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_sust

amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones

CHECK p_val IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931

ENDFORM buscar_validaciones

amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID

ENDFORM construir_catalogo_val

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones

ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2

CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_val

amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto

DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF

SELECT SINGLE FROM modsapWHERE name EQ l_name

IF sy-subrc IS INITIAL

MOVE l_name TO l_member

SELECT SINGLE FROM modactWHERE member EQ l_member

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF

ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF

ENDFORM visualizar_proyecto

amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel

APPEND ti_enh

ENDIFENDIFENDIF

ENDFORM buscar_punto_ampliacioacuten

amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_enh

amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh

DATA l_obj_name TYPE enhobj-obj_name

DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name

CHECK p_enh IS NOT INITIAL

IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF

REFRESH lt_obj_name

LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP

SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name

ENDFORM buscar_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X

ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME

ENDFORM construir_catalogo_enhobj

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENHOBJ

amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM bi_se19

amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro

CLEAR ti_bdcdatati_bdcdata-program = program

ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata

ENDFORM BDC_DYNPRO

amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval

CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata

ENDFORM BDC_FIELD

amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa

DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)

CHECK ti_gb31t[] IS NOT INITIAL

DO

Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2

IF l_exit EQ XEXITENDIF

CHECK l_exit IS INITIAL

Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND

CHECK l_boolpool IS NOT INITIAL

MOVE l_boolpool TO l_repid

Visualizo el programaPERFORM visualizar_linea USING l_repid01

ENDDO

ENDFORM visualizar_programa

amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope

STATICS l_flag TYPE c

DATA l_tit(65) TYPE c

CHECK l_flag IS INITIAL

l_flag = X

WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline

4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM texto_tope

amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf

DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off

CHECK l_off IS NOT INITIAL

ADD 7 TO l_offl_cf = 500 - l_off

SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_enhspotname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1

invalid_object_type = 2OTHERS = 3

ENDFORM bi_se18

amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit

DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE

DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE

MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE

MOVE lt_fields-value TO l_nameENDIF

Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_

LOOP AT lt_tfdir

CLEARl_group l_include l_namespace l_str_area

l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl

IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl

CHECK sy-subrc IS INITIAL

Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP

CHECK l_flag IS INITIAL

La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value

ENDFORM visualizar_fm_exit

amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter

tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten

ENDFORM def_text_parameter

amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones

Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt

Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt

Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt

icon_create RESULT name text infoicon_create

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 8: buscar_ampliaciones FOROSAP

SELECTION-SCREEN END OF LINE

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text5POSITION 20PARAMETERS p_submit AS CHECKBOX DEFAULT X SubmitSELECTION-SCREEN END OF LINE

SELECTION-SCREEN BEGIN OF LINECOMMENT 1(15) text6POSITION 20PARAMETERS p_nivel(2) TYPE n DEFAULT 04 NivelSELECTION-SCREEN END OF LINE

SELECTION-SCREEN END OF BLOCK bl03

Botoacuten de Marcar todo en el STATUS GUISELECTION-SCREEN FUNCTION KEY 1 Botoacuten de Desmarcar todo en el STATUS GUISELECTION-SCREEN FUNCTION KEY 2 Botoacuten de Breakpoint en el STATUS GUISELECTION-SCREEN FUNCTION KEY 3

----------------------------------------------------------------------- DEFINICIOacuteN DE MACROS-----------------------------------------------------------------------DEFINE icon_create Creo para el botoacuten indicado el icono y los textos correspondientes

call function ICON_CREATEexportingname = amp2text = amp3info = amp4importingresult = amp1exceptionsothers = 0

END-OF-DEFINITION icon_create

----------------------------------------------------------------------- INICIALIZACIOacuteN DE VARIABLES-----------------------------------------------------------------------INITIALIZATION

PERFORM def_text_parameter

PERFORM def_botones

CLEAR ti_gb31tREFRESH ti_gb31t

Obtengo ValidacioacutenSustitucioacutenEventosTextoSELECT INTO TABLE ti_gb31tFROM gb31tWHERE spras EQ sy-langu

----------------------------------------------------------------------- AT SELECTION-SCREEN-----------------------------------------------------------------------

AT SELECTION-SCREEN

CASE sscrfields-ucommWHEN FC01MOVE X TO p_ue p_badi p_bte p_sust p_val p_fdex p_enhWHEN FC02CLEAR p_ue p_badi p_bte p_sust p_val p_fdex p_enhWHEN FC03PERFORM breakpointWHEN EXTPERFORM visualizar_ampliacionWHEN EXT1PERFORM visualizar_proyectoWHEN EXT2PERFORM visualizar_fm_exitWHEN BADIPERFORM visualizar_interfaceWHEN OBBCALL TRANSACTION OBBHWHEN OB28CALL TRANSACTION OB28WHEN SUST OR VALPERFORM visualizar_programaWHEN FDEXSUBMIT rsmodprf AND RETURNWHEN BTE1CALL TRANSACTION FIBFWHEN BTE2PERFORM cargar_bte USING EWHEN BTE3PERFORM cargar_bte USING PWHEN SENHSUBMIT sapmsenh VIA SELECTION-SCREENAND RETURNWHEN CIMPPERFORM visualizar_imp_enhWHEN ALLMOVE X TO p_incl p_func p_submitWHEN DALCLEAR p_incl p_func p_submitWHEN OTHERS Do Nothing ENDCASE

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_prog

PERFORM repid_f4

---------------------------------------------------------------------- INICIO----------------------------------------------------------------------START-OF-SELECTION

GET TIME FIELD w_tini

- CONSISTENCIAS DE LOS PARAMETROSPERFORM consisti_parametros

- INICIALIZA TABLAPERFORM inicializa_tabela

- VERIFICA SI EN EL PROGRAMA EXISTE ALGUN INCLUDE FUNCION O SUBMITPERFORM verifica_include_funcao_submit

- ANALISA LOS INCLUDES Y BUSCA POR USER-EXIT BADIS Y BTEPERFORM busca_user_exit_badi_bte

- ANALISA LOS INCLUDES Y BUSCA LOS FIELD-EXITSPERFORM buscar_field_exit

- OBTENGO LOS EXITs DE LA TRANSACCIOacuteNPERFORM buscar_user_exit

- OBTENGO LAS PUNTOS DE AMPLIACIOacuteNPERFORM buscar_enh

- OBTENGO LAS SUSTITUCIONESPERFORM buscar_sustituciones

- OBTENGO LAS VALIDACIONESPERFORM buscar_validaciones

- CARGO LOS BREAKPOINTSPERFORM cargar_break

- VISUALIZA LAS AMPLIACIONES ENCONTRADASPERFORM exibe_user_exit

---------------------------------------------------------------------- FIN----------------------------------------------------------------------END-OF-SELECTION

amp---------------------------------------------------------------------amp Form BUSCA_USER_EXIT_BADI_BTEamp--------------------------------------------------------------------- Busca EXITs BADIs y BTE en el coacutedigo fuente----------------------------------------------------------------------FORM busca_user_exit_badi_bte

- VERIFICA SI EN LOS INCLUDES SELECIONADOS EXISTEN EXITSLOOP AT ti_includes

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

- BORRA LA TABLA INTERNAREFRESH ti_programa

- REALIZA LECTURA DE INCLUDE ALMACENANDO EN TABLA INTERNAREAD REPORT ti_includes-nome INTO ti_programa

LOOP AT ti_programa

IF p_ue EQ XPERFORM buscar_exitPERFORM busca_enhancementsENDIF

IF p_badi EQ XPERFORM buscar_badiENDIF

IF p_bte EQ XPERFORM buscar_bteENDIF

IF p_enh EQ XPERFORM buscar_punto_ampliacionENDIF

ENDLOOPENDLOOP

ENDFORM BUSCA_USER_EXIT_BADI_BTE

amp---------------------------------------------------------------------amp Form BUSCA_ENHANCEMENTSamp--------------------------------------------------------------------- Busca las llamadas a los USER-EXIT----------------------------------------------------------------------FORM busca_enhancements

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE EN ALGUN ENHANCEMENTSEARCH ti_programa-cf FOR c_enhance- SE ENCONTRO EL ENHANCEMENT Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentarioCLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF

ENDFORM BUSCA_ENHANCEMENTS

amp---------------------------------------------------------------------amp Form EXIBE_USER_EXITamp--------------------------------------------------------------------- Muestra los datos----------------------------------------------------------------------FORM exibe_user_exit

PERFORM armar_alv

PERFORM mostrar_listado

ENDFORM EXIBE_USER_EXIT

amp---------------------------------------------------------------------amp Form PROCURA_INCLUDEamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_include

CLEAR vg_palavra

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN INCLUDESEARCH ti_programa-cf FOR c_include- SE ENCONTRO EN EL INCLUDE Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN STRUCTURESEARCH ti_programa-cf FOR c_struct

IF sy-subrc IS INITIALEXITENDIF

- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DEL INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF NOT vg_caracter IS INITIAL- VERIFICA SI NO ES FIN DE COMANDOIF vg_caracter EQ c_pontoEXITENDIF- ARMA PALABRACONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACIONTRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_includeCLEAR vg_palavraENDIFENDIFENDDO- GRABA NOMBRE DEL INCLUDE PARA FUTURA BUSQUEDA POR USER EXITREAD TABLE ti_includes WITH KEY nome = vg_palavraIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_palavra TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIF

ENDIF

ENDFORM PROCURA_INCLUDE

amp---------------------------------------------------------------------amp Form PROCURA_FUNCAOamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_funcao

CLEAR vg_conta_aspavg_palavra

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA FUNCIONSEARCH ti_programa-cf FOR c_funcao_2- SE ENCONTRO UNA FUNCION Y LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DE LA INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF NOT vg_caracter IS INITIAL- VERIFICA SI NO ES FIN DE COMANDOIF vg_caracter EQ c_aspaADD 1 TO vg_conta_aspaIF vg_conta_aspa EQ 2EXITENDIFENDIF- ARMA PALABRACONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACIONTRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_funcao_1CLEAR vg_palavraENDIFENDIFENDDO- BUSCA NOMBRE DE LA FUNCION PARA FUTURA BUSQUEDA POR USER EXITCLEAR vg_pnameSELECT SINGLE pnameINTO vg_pnameFROM tfdirWHERE funcname EQ vg_palavraIF sy-subrc EQ 0

READ TABLE ti_includes WITH KEY nome = vg_pnameIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_pname TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIF

ENDIF

ENDIF

ENDFORM PROCURA_FUNCAO

amp---------------------------------------------------------------------amp Form VERIFICA_INCLUDE_FUNCAO_SUBMITamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM verifica_include_funcao_submit

CHECK p_ue IS NOT INITIAL OR p_badi IS NOT INITIALOR p_bte IS NOT INITIAL OR p_enh IS NOT INITIAL

LOOP AT ti_includes

ADD 1 TO vg_contadorDESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfillMOVE ti_includes-nivel TO vg_nivelADD 1 TO vg_nivel

- BORRA TABLA INTERNAREFRESH ti_programa

- REALIZA LECTURA DE INCLUDEFUNCION ALMACENANDO EN TABLA INTERNAREAD REPORT ti_includes-nome INTO ti_programa

LOOP AT ti_programa

- PROCURA POR INCLUDESIF p_incl EQ c_xPERFORM procura_includeENDIF- PROCURA POR FUNCIONIF p_func EQ c_xPERFORM procura_funcaoENDIF- PROCURA POR SUBMITIF p_submit EQ c_xPERFORM procura_submitENDIF

ENDLOOP

ENDLOOP

ENDFORM VERIFICA_INCLUDE_FUNCAO_SUBMIT

amp---------------------------------------------------------------------amp Form EVITAR_TIME_OUTamp--------------------------------------------------------------------- Evito el TIME OUT visualizando un mensaje----------------------------------------------------------------------FORM evitar_time_out USING p_tfill LIKE sy-tfill

DATAvl_total(10) TYPE n

vl_atual(10) TYPE nl_tout LIKE sy-timlol_time(10) TYPE c

GET TIME FIELD l_tout

l_tout = l_tout - w_tini

MOVEp_tfill TO vl_totalvg_contador TO vl_atual

SHIFT vl_total LEFT DELETING LEADING 0SHIFT vl_atual LEFT DELETING LEADING 0WRITE l_tout TO l_time

CONCATENATE Tpo l_time Total vl_total Actual vl_atualINTO vg_textoSEPARATED BY space

CALL FUNCTION SAPGUI_PROGRESS_INDICATOREXPORTINGtext = vg_texto

ENDFORM EVITAR_TIME_OUT

amp---------------------------------------------------------------------amp Form PROCURA_SUBMITamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_submit

CLEAR vg_conta_espaco vg_palavra vg_ini_contagem

- VERIFICA SI LA LINEA DEL PROGRAMA EXISTE ALGUN INCLUDESEARCH ti_programa-cf FOR c_submit- SE ENCONTRO EN EL INCLUDE Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DEL INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF vg_ini_contagem EQ c_x AND vg_caracter IS INITIALADD 1 TO vg_conta_espacoENDIF

IF NOT vg_caracter IS INITIALMOVE c_x TO vg_ini_contagemIF vg_caracter EQ c_pontoEXITENDIF- ARMA PALABRAIF vg_conta_espaco LT 2CONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACION

TRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_submitCLEAR vg_palavraENDIFELSEEXITENDIFENDIFENDDO- BUSCA NOMBRE DE LA FUNCION PARA FUTURA BUSQUEDA POR USER EXITREAD TABLE ti_includes WITH KEY nome = vg_palavraIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_palavra TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIFENDIF

ENDFORM PROCURA_SUBMIT

amp---------------------------------------------------------------------amp Form CONSISTI_PARAMETROSamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM consisti_parametros

IF p_nivel IS INITIALMOVE 1 TO p_nivelENDIF

IF p_prog IS INITIAL AND p_tcode IS INITIAL- EL NOMBRE DEL PROGRAMA Y EL NOMBRE DE LA TRANSACCION NO PUEDEN SER- NULOS UNO DE ELLOS DEBE SER INFORMADOMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e01STOPENDIF

IF NOT p_prog IS INITIAL AND NOT p_tcode IS INITIAL- SE SOLICITA AL USUARIO QUE INFORME NOMBRE DE PROGRAMA O TRANSACCIONMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e02STOPENDIF

IF p_ue IS INITIAL AND p_badi IS INITIAL AND p_bte IS INITIALAND p_sust IS INITIAL AND p_val IS INITIAL AND p_fdex IS INITIALAND p_enh IS INITIAL- SE SOLICITA AL USUARIO QUE INFORME UN TIPO DE MEJORAMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e03STOPENDIF

ENDFORM CONSISTI_PARAMETROS

amp---------------------------------------------------------------------

amp Form INICIALIZA_TABELAamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM inicializa_tabela

DATAe_tstc TYPE tstcl_tcode TYPE sy-tcode

REFRESH ti_includes

IF NOT p_prog IS INITIAL

MOVE p_prog TO ti_includes-nome0 TO ti_includes-nivelAPPEND ti_includes

- BUSCO EL PROGRAMAREAD REPORT ti_includes-nome INTO ti_programa

IF sy-subrc EQ 0REFRESH ti_programaELSE- EL PROGRAMA NO EXISTEMESSAGE s893(pz) WITH El programa p_prog no existeSTOPENDIF

ELSEIF NOT p_tcode IS INITIAL

SELECT SINGLE FROM tstcWHERE tcode EQ p_tcode

IF sy-subrc EQ 0

IF tstc-pgmna IS NOT INITIALMOVE tstc-pgmna TO ti_includes-nome0 TO ti_includes-nivelAPPEND ti_includesELSE Se trata de una transaccioacuten de paraacutemetros Obtengo la transaccioacuten asociadaCALL FUNCTION RS_TRANSACTION_SINGLE_GETEXPORTINGparameter_tcode = p_tcodeIMPORTINGtcode = l_tcode

SELECT SINGLE INTO e_tstcFROM tstcWHERE tcode EQ l_tcode

IF sy-subrc EQ 0MOVE e_tstc-pgmna TO ti_includes-nome0 TO ti_includes-nivel

APPEND ti_includesELSE- LA TRANSACCIOacuteN NO EXISTEMESSAGE s893(pz) WITH La transaccioacuten p_tcode no existeENDIFENDIFELSE- LA TRANSACCIOacuteN NO EXISTEMESSAGE s893(pz) WITH La transaccioacuten p_tcode no existeSTOPENDIFENDIF

ENDFORM INICIALIZA_TABELA

amp---------------------------------------------------------------------amp Form armar_alvamp--------------------------------------------------------------------- Armo el ALV----------------------------------------------------------------------FORM armar_alv

DATAl_repid TYPE sy-repid

MOVE sy-repid TO l_repid

CALL FUNCTION REUSE_ALV_BLOCK_LIST_INITEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMAND

IF p_ue IS NOT INITIALPERFORM construir_catalogo_exitPERFORM definir_layout USING TI_USER_EXITCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGEPERFORM sort TABLES ti_sortUSING TI_USER_EXIT

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_USER_EXITit_events = ti_eventsit_sort = ti_sorti_text = User-exitTABLESt_outtab = ti_user_exitEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

PERFORM construir_catalogo_uexitPERFORM definir_layout USING TI_FINAL

CHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_UEXITPERFORM sort TABLES ti_sortUSING TI_FINAL

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FINALit_events = ti_eventsit_sort = ti_sorti_text = User-exit TxCMODTABLESt_outtab = ti_finalEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_badi IS NOT INITIALPERFORM construir_catalogo_badiPERFORM definir_layout USING TI_BADICHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BADIPERFORM sort TABLES ti_sortUSING TI_BADI

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_BADIit_events = ti_eventsit_sort = ti_sorti_text = BadisTABLESt_outtab = ti_badiEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_bte IS NOT INITIALPERFORM construir_catalogo_btePERFORM definir_layout USING TI_BTECHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BTEPERFORM sort TABLES ti_sortUSING TI_BTE

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layout

it_fieldcat = ti_cati_tabname = TI_BTEit_events = ti_eventsit_sort = ti_sorti_text = BTETABLESt_outtab = ti_bteEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_enh IS NOT INITIALPERFORM construir_catalogo_enhPERFORM definir_layout USING TI_ENHCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHPERFORM sort TABLES ti_sortUSING TI_ENH

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHit_events = ti_eventsit_sort = ti_sorti_text = ENHTABLESt_outtab = ti_enhEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

PERFORM construir_catalogo_enhobjPERFORM definir_layout USING TI_ENHOBJCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHOBJPERFORM sort TABLES ti_sortUSING TI_ENHOBJ

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHOBJit_events = ti_eventsit_sort = ti_sorti_text = ENHOBJTABLESt_outtab = ti_enhobjEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_sust IS NOT INITIALPERFORM construir_catalogo_sustPERFORM definir_layout USING TI_SUSTCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_SUSTPERFORM sort TABLES ti_sortUSING TI_SUST

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_SUSTit_events = ti_eventsit_sort = ti_sorti_text = SustitucionesTABLESt_outtab = ti_sustEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_val IS NOT INITIALPERFORM construir_catalogo_valPERFORM definir_layout USING TI_VALCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_VALPERFORM sort TABLES ti_sortUSING TI_VAL

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_VALit_events = ti_eventsit_sort = ti_sorti_text = ValidacionesTABLESt_outtab = ti_valEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_fdex IS NOT INITIALPERFORM construir_catalogo_fdexPERFORM definir_layout USING TI_FDEXCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_FDEX

PERFORM sort TABLES ti_sortUSING TI_FDEX

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FDEXit_events = ti_eventsit_sort = ti_sorti_text = Field-exitTABLESt_outtab = ti_fdexEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

ENDFORM armar_alv

amp---------------------------------------------------------------------amp Form construir_catalogo_EXITamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_exit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_USER_EXITi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03

CF X c_text_04

ENDFORM construir_catalogo_EXIT

amp---------------------------------------------------------------------amp Form asignar_campo_a_catalogoamp--------------------------------------------------------------------- Asignar campo al catalogo ALV----------------------------------------------------------------------FORM asignar_campo_a_catalogo TABLES pt_cat STRUCTURE wa_catUSING p_fieldname LIKE wa_cat-fieldnamep_key LIKE wa_cat-keyp_col_pos TYPE cp_fix_column LIKE wa_cat-fix_columnp_hotspot LIKE wa_cat-hotspotp_do_sum LIKE wa_cat-do_sump_input LIKE wa_cat-inputp_checkbox LIKE wa_cat-checkboxp_no_out LIKE wa_cat-no_outp_icon LIKE wa_cat-iconp_reptext_ddic LIKE wa_cat-reptext_ddic

STATICS l_col_pos LIKE sy-cucol

Asignar atributos de campo en el catalogo de cabecera ALVCLEAR wa_catREAD TABLE pt_cat INTO wa_catWITH KEY fieldname = p_fieldname

CHECK sy-subrc EQ 0

IF NOT p_reptext_ddic IS INITIALwa_cat-seltext_l = wa_cat-seltext_m =wa_cat-seltext_s = wa_cat-reptext_ddic = p_reptext_ddicENDIF

IF p_col_pos EQ X Inicializo el conteo para ordenar las columnasl_col_pos = 1ELSEADD 1 TO l_col_posENDIF

wa_cat-fieldname = p_fieldnamewa_cat-key = p_keywa_cat-col_pos = l_col_poswa_cat-fix_column = p_fix_columnwa_cat-hotspot = p_hotspotwa_cat-do_sum = p_do_sumwa_cat-edit = wa_cat-input = p_inputwa_cat-checkbox = p_checkboxwa_cat-no_out = p_no_outwa_cat-icon = p_icon

MODIFY pt_cat FROM wa_cat INDEX sy-tabix

ENDFORM asignar_campo_a_catalogo

amp---------------------------------------------------------------------amp Form definir_layoutamp--------------------------------------------------------------------- Definir atributos del layout de reporte----------------------------------------------------------------------FORM definir_layout USING p_table TYPE slis_layout_alv-box_tabnameCHANGING p_layout TYPE slis_layout_alv

CLEAR p_layout

IF p_table NE TI_CIMP Marco el campo para la seleccioacutenp_layout-box_fieldname = SELp_layout-box_tabname = p_tableENDIFp_layout-zebra = Xp_layout-colwidth_optimize = Xp_layout-no_vline = p_layout-no_colhead = p_layout-lights_condense = Xp_layout-detail_popup = Xp_layout-detail_initial_lines = Xp_layout-flexible_key = p_layout-key_hotspot = p_layout-confirmation_prompt = X

ENDFORM definir_layout

amp---------------------------------------------------------------------amp Form construir_eventosamp--------------------------------------------------------------------- Asignar eventos soportados----------------------------------------------------------------------FORM construir_eventos USING p_form LIKE wa_events-formDATAl_type(1) TYPE n

REFRESH ti_eventsCLEAR wa_events

ALV Simple Block appendl_type = 2

Buscar secciones para eventosCALL FUNCTION REUSE_ALV_EVENTS_GETEXPORTINGi_list_type = l_typeIMPORTINGet_events = ti_events

Leer evento TOP_OF_PAGEREAD TABLE ti_events WITH KEY name = slis_ev_top_of_pageINTO wa_events Asignar Rutina FORM TOP_OF_PAGE a eventoIF sy-subrc = 0MOVE p_form TO wa_events-formMODIFY ti_events FROM wa_events INDEX sy-tabixENDIF

ENDFORM construir_eventos

amp---------------------------------------------------------------------amp Form top_of_pageamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_user_exitWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUser-exit

ENDFORM top_of_page

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_UEXITamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_uexit

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_finalWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUSER-EXITs TxSMOD

ENDFORM TOP_OF_PAGE_UEXIT

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_FDEXamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_fdex

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_fdexWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incFIELD-EXITs

ENDFORM TOP_OF_PAGE_FDEX

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BADIamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_badi

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_badiWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBADIs

ENDFORM TOP_OF_PAGE_BADI

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BTEamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_bte

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_bteWRITE sy-tfill TO l_tfill_cant

CONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBTEs

ENDFORM TOP_OF_PAGE_BTE

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enh

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_enhWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENH

amp---------------------------------------------------------------------amp Form sortamp--------------------------------------------------------------------- Creo el sort del ALV (FM)---------------------------------------------------------------------- --gtPT_sort Tabla --gtP_tabname Nombre de la tabla----------------------------------------------------------------------FORM sort TABLES pt_sortUSING p_tabname TYPE any

CLEAR pt_sort wa_sortREFRESH pt_sort

CASE p_tabnameWHEN TI_SUST

wa_sort-fieldname = SUBSTIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = SUBSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = CONSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN TI_VAL

wa_sort-fieldname = VALIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = VALSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN TI_ENHOBJ

wa_sort-fieldname = ENHNAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = VERSIONwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN OTHERS

IF p_tabname NE TI_FINAL

wa_sort-fieldname = TIPOwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

IF p_tabname NE TI_FDEX

wa_sort-fieldname = NIVELwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = PROGRAMAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = LINEAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

ENDIF

ELSE

wa_sort-fieldname = NAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = MEMBERwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sortENDIFENDCASE

ENDFORM sort

amp---------------------------------------------------------------------amp Form mostrar_listadoamp--------------------------------------------------------------------- Mostrar listado ALV----------------------------------------------------------------------FORM mostrar_listado

wa_print-reserve_lines = 2

CALL FUNCTION REUSE_ALV_BLOCK_LIST_DISPLAY

EXPORTINGis_print = wa_printEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM mostrar_listado

amp---------------------------------------------------------------------amp Form user_commandamp--------------------------------------------------------------------- Evaluar acciones del usuario----------------------------------------------------------------------FORM user_command USING ucomm LIKE sy-ucommsfields TYPE slis_selfield

DATA l_break TYPE c

Rescatar el registro seleccionadoCASE sfields-tabnameWHEN TI_USER_EXITREAD TABLE ti_user_exit INDEX sfields-tabindexWHEN TI_BADIREAD TABLE ti_badi INDEX sfields-tabindexWHEN TI_BTEREAD TABLE ti_bte INDEX sfields-tabindexWHEN TI_ENHREAD TABLE ti_enh INDEX sfields-tabindexWHEN TI_ENHOBJREAD TABLE ti_enhobj INDEX sfields-tabindexWHEN TI_FDEXREAD TABLE ti_fdex INDEX sfields-tabindexWHEN TI_FINALREAD TABLE ti_final INDEX sfields-tabindexWHEN TI_SUSTREAD TABLE ti_sust INDEX sfields-tabindexWHEN TI_VALREAD TABLE ti_val INDEX sfields-tabindexWHEN TI_CIMPREAD TABLE ti_cimp INDEX sfields-tabindexENDCASE

Seleccion de opcionCASE ucomm DOUBLE CLICKWHEN ampIC1 Evaluar valor de campo seleccionadoCHECK NOT sfields-value IS INITIAL

CASE sfields-tabnameWHEN TI_USER_EXIT USER-EXITIF ti_user_exit-tipo EQ sfields-value(4)SEARCH ti_user_exit-cf FOR c_enhanceCHECK sy-subrc EQ 0PERFORM visualizar_exit USING ti_user_exit-programati_user_exit-cf

ELSEIF ti_user_exit-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_user_exit-programati_user_exit-lineaMOVE X TO l_breakELSEIF ti_user_exit-break EQ sfields-value(4)OR ti_user_exit-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_user_exit-programati_user_exit-lineati_user_exit-breakMOVE X TO l_breakENDIF

WHEN TI_FINAL USER-EXIT Tx CMODIF ti_final-name EQ sfields-valueCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = ti_final-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSEIF ti_final-include EQ sfields-valuePERFORM visualizar_linea USING ti_final-programa1MOVE X TO l_breakENDIF

WHEN TI_BADI BadiIF ti_badi-tipo EQ sfields-value(4)PERFORM visualizar_badi USING ti_badi-cfELSEIF ti_badi-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_badi-programati_badi-lineaMOVE X TO l_breakELSEIF ti_badi-break EQ sfields-value(4)OR ti_badi-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_badi-programati_badi-lineati_badi-breakMOVE X TO l_breakENDIF

WHEN TI_BTE BTEIF ti_bte-tipo EQ sfields-value(4)PERFORM fibf USING ti_bte-cfELSEIF ti_bte-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_bte-programati_bte-lineaMOVE X TO l_breakELSEIF ti_bte-break EQ sfields-value(4)OR ti_bte-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_bte-programati_bte-linea

ti_bte-breakMOVE X TO l_breakENDIF

WHEN TI_ENH Punto de ampliacioacutenIF ti_enh-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_enh-programati_enh-lineaMOVE X TO l_breakELSEIF ti_enh-tipo EQ sfields-value(4)PERFORM bi_se18 USING ti_enh-cfENDIF

WHEN TI_ENHOBJ Punto de ampliacioacutenIF ti_enhobj-enhname EQ sfields-value(30)PERFORM bi_se19 USING ti_enhobj-enhnameENDIF

WHEN TI_SUST SustitucionesIF ti_sust-substid EQ sfields-value(7) ORti_sust-subseqnr EQ sfields-value(3)PERFORM visualizar_sust USING ti_sust-substidti_sust-subseqnrENDIF

WHEN TI_VAL ValidacionesIF ti_val-valid EQ sfields-value(7) ORti_val-valseqnr EQ sfields-value(3)PERFORM visualizar_val USING ti_val-validti_val-valseqnrENDIF

WHEN TI_FDEX Field-exitIF ti_fdex-tipo EQ sfields-valueSUBMIT rsmodprf AND RETURNELSEIF ti_fdex-cf(60) EQ sfields-value Visualizo el field-exitCALL FUNCTION RS_FUNCTION_SHOWEXPORTINGfuncname = ti_fdex-cf

CALL FUNCTION RS_NAVIGATION_MONITORENDIF

WHEN TI_CIMP Customer implementation

CASE sfields-fieldnameWHEN ENHNAMEPERFORM bi_se19 USING ti_cimp-enhnameWHEN ENHINCLUDEPERFORM visualizar_enh_cf USING ti_cimp-enhinclude

WHEN OTHERS DO NOTHING ENDCASE

WHEN OTHERS DO NOTHING ENDCASE

WHEN OTHERS DO NOTHING ENDCASE

IF l_break IS NOT INITIAL AND sfields-tabname NE TI_CIMPWAIT UP TO 1 SECONDSPERFORM cargar_breakENDIFsfields-refresh = X

ENDFORM user_command

amp---------------------------------------------------------------------amp Form visualizar_lineaamp--------------------------------------------------------------------- Visualizo la linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_linea USING p_programa TYPE sy-repidp_linea

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_programaobject_type = c_typeposition = p_lineaEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM visualizar_linea

amp---------------------------------------------------------------------amp Form buscar_exitamp--------------------------------------------------------------------- Buscar USER-EXIT----------------------------------------------------------------------FORM buscar_exit

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN USER-EXITSEARCH ti_programa-cf FOR c_user_exit- SE ENCONTRO UN USER-EXIT Y SE VERIFICA SI LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS PERFORMSEARCH ti_programa-cf FOR c_performCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LAS ASIGNACIONESSEARCH ti_programa-cf FOR c_igualCHECK sy-subrc NE 0

CLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INIacuteCIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF

ENDFORM buscar_exit

amp---------------------------------------------------------------------amp Form buscar_badiamp--------------------------------------------------------------------- Buscar BADI----------------------------------------------------------------------FORM buscar_badi

DATAl_subrc LIKE sy-subrc

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BADISEARCH ti_programa-cf FOR c_badi- SE ENCONTRO UNA BADI Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

SEARCH ti_programa-cf FOR c_includeIF sy-subrc NE 0CLEAR l_subrcSEARCH ti_programa-cf FOR c_methodIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_funcao_2IF sy-subrc NE 0SEARCH ti_programa-cf FOR c_performIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_type_refIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_formMOVE 4 TO l_subrcENDIFENDIFENDIFENDIF

IF l_subrc EQ 0CLEAR ti_badi

- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIFELSECHECK p_handl IS NOT INITIAL- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA INSTANCIA DE- UNA BADISEARCH ti_programa-cf FOR c_handler- SE ENCONTRO UNA INSTANCIA DE IMPLEMENACIOacuteN Y SE VERIFICA SI LA LINEA- NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

SEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0CLEAR ti_badi- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIF

ENDFORM buscar_badi

amp---------------------------------------------------------------------amp Form buscar_bteamp--------------------------------------------------------------------- Buscar BTE----------------------------------------------------------------------FORM buscar_bte

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OPEN_FI_PERFORM

- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endform

CHECK sy-subrc NE 0

CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte1- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OUTBOUND_CALL

- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0

CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF

ENDFORM buscar_bte

amp---------------------------------------------------------------------amp Form repid_f4amp--------------------------------------------------------------------- Ejecuto el F4 para buscar programas----------------------------------------------------------------------FORM repid_f4

CALL FUNCTION REPOSITORY_INFO_SYSTEM_F4EXPORTINGobject_type = PROGobject_name = p_progsuppress_selection = XIMPORTINGobject_name_selected = p_progEXCEPTIONS

cancel = 1wrong_type = 2OTHERS = 3

ENDFORM repid_f4

amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf

DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

SEARCH p_cf FOR 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 INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

READ TABLE lt_cf INDEX 4

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

CHECK sy-subrc IS INITIAL

Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten

textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer

CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4

IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF

WHEN OTHERS Do Nothing ENDCASE

ENDFORM visualizar_badi

amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf

DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

CLEAR d010inc modsap modact

Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid

IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF

SEARCH p_cf FOR c_enhance

CHECK sy-subrc IS INITIAL

REFRESH lt_cf

l_cf = 500 - sy-fdpos

MOVE p_cf+sy-fdpos(l_cf) TO l_linea

SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3

TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS

Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _

Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit

CHECK sy-subrc IS INITIAL

Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM

modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3

ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname

CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ENDIF

ENDFORM visualizar_exit

amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit

DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo

DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe

DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE

CHECK p_fdex IS NOT INITIAL

CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe

MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex

IF p_prog IS NOT INITIAL

MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF

Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog

LOOP AT lt_d020s

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

REFRESH lt_d021s

Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4

Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X

SEARCH lt_d021s-fnam FOR -

IF sy-subrc IS INITIAL

MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum

Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname

APPEND lt_campo

ENDIF

ENDLOOPENDLOOP

CHECK lt_campo[] IS NOT INITIAL

SORT lt_campo BY repid dnum tabname fieldname

DELETE ADJACENT DUPLICATES FROM lt_campo

Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname

SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l

LOOP AT lt_dd03l

CLEAR tddir tddirs

SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname

CHECK sy-subrc IS INITIAL

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog

CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF

Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf

IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF

READ TABLE lt_fe WITH KEY cf = lt_fe-cf

CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP

LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex

ENDLOOP

ENDFORM buscar_field_exit

amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf

DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c

SEARCH p_cf FOR c_bte

IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ELSE

SEARCH p_cf FOR c_bte1

CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ENDIF

IF l_tipo IS NOT INITIAL

PERFORM visualizar_bte USING l_tipol_linea

ELSECALL TRANSACTION FIBFENDIF

ENDFORM fibf

amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT

EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM breakpoint

amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_badi

amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE

i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_bte

amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X TIPO X X c_text_05CF X c_text_04

ENDFORM construir_catalogo_FDEX

amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc

DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

CHECK lt_break[] IS NOT INITIAL

IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix

MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF

IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix

MOVEti_badi-linea TO l_lineti_badi-programa TO l_program

READ TABLE lt_break INTO wa_break

WITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF

IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix

MOVEti_bte-linea TO l_lineti_bte-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF

ENDFORM cargar_break

amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

DATAl_tabix TYPE sy-tabix

l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

SELECT SINGLE FROM d010incWHERE include = p_programa

IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF

MOVEp_linea TO l_linep_programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM asignar_break

amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit

IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF

PERFORM get_objects Get Objects

ENDFORM buscar_user_exit

amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects

DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area

DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix

SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog

IF sy-subrc = 0

SORT ti_tadir BY obj_name devclass

SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass

IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF

- Get UserExit namesLOOP AT ti_jtab

SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E

APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area

l_fname = ti_final-member

CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include

LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP

CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP

ENDFORM get_objects

amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X

ENDFORM construir_catalogo_uexit

amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------

FORM visualizar_ampliacion

DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF

SELECT SINGLE FROM modsapWHERE member EQ l_member

IF sy-subrc IS INITIAL

Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member

ENDIF

ENDFORM visualizar_ampliacion

amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea

RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs

REFRESH r_event r_procs

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event

SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs

SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE

ENDFORM visualizar_bte

amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE

----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c

DATAl_linea(500) TYPE c

DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

MOVE lt_fields-value TO l_linea

PERFORM visualizar_bte USING p_tipol_linea

ENDFORM cargar_bte

amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface

DATAl_linea(500) TYPE c

DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE

InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF

ENDFORM visualizar_interface

amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones

CHECK p_sust IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922

ENDFORM buscar_sustituciones

amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST

ENDFORM construir_catalogo_sust

amp---------------------------------------------------------------------

amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones

ENDFORM TOP_OF_PAGE_SUST

amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4

CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_sust

amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones

CHECK p_val IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931

ENDFORM buscar_validaciones

amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID

ENDFORM construir_catalogo_val

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones

ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2

CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_val

amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto

DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF

SELECT SINGLE FROM modsapWHERE name EQ l_name

IF sy-subrc IS INITIAL

MOVE l_name TO l_member

SELECT SINGLE FROM modactWHERE member EQ l_member

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF

ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF

ENDFORM visualizar_proyecto

amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel

APPEND ti_enh

ENDIFENDIFENDIF

ENDFORM buscar_punto_ampliacioacuten

amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_enh

amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh

DATA l_obj_name TYPE enhobj-obj_name

DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name

CHECK p_enh IS NOT INITIAL

IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF

REFRESH lt_obj_name

LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP

SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name

ENDFORM buscar_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X

ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME

ENDFORM construir_catalogo_enhobj

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENHOBJ

amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM bi_se19

amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro

CLEAR ti_bdcdatati_bdcdata-program = program

ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata

ENDFORM BDC_DYNPRO

amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval

CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata

ENDFORM BDC_FIELD

amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa

DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)

CHECK ti_gb31t[] IS NOT INITIAL

DO

Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2

IF l_exit EQ XEXITENDIF

CHECK l_exit IS INITIAL

Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND

CHECK l_boolpool IS NOT INITIAL

MOVE l_boolpool TO l_repid

Visualizo el programaPERFORM visualizar_linea USING l_repid01

ENDDO

ENDFORM visualizar_programa

amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope

STATICS l_flag TYPE c

DATA l_tit(65) TYPE c

CHECK l_flag IS INITIAL

l_flag = X

WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline

4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM texto_tope

amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf

DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off

CHECK l_off IS NOT INITIAL

ADD 7 TO l_offl_cf = 500 - l_off

SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_enhspotname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1

invalid_object_type = 2OTHERS = 3

ENDFORM bi_se18

amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit

DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE

DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE

MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE

MOVE lt_fields-value TO l_nameENDIF

Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_

LOOP AT lt_tfdir

CLEARl_group l_include l_namespace l_str_area

l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl

IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl

CHECK sy-subrc IS INITIAL

Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP

CHECK l_flag IS INITIAL

La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value

ENDFORM visualizar_fm_exit

amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter

tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten

ENDFORM def_text_parameter

amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones

Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt

Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt

Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt

icon_create RESULT name text infoicon_create

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 9: buscar_ampliaciones FOROSAP

----------------------------------------------------------------------- AT SELECTION-SCREEN-----------------------------------------------------------------------

AT SELECTION-SCREEN

CASE sscrfields-ucommWHEN FC01MOVE X TO p_ue p_badi p_bte p_sust p_val p_fdex p_enhWHEN FC02CLEAR p_ue p_badi p_bte p_sust p_val p_fdex p_enhWHEN FC03PERFORM breakpointWHEN EXTPERFORM visualizar_ampliacionWHEN EXT1PERFORM visualizar_proyectoWHEN EXT2PERFORM visualizar_fm_exitWHEN BADIPERFORM visualizar_interfaceWHEN OBBCALL TRANSACTION OBBHWHEN OB28CALL TRANSACTION OB28WHEN SUST OR VALPERFORM visualizar_programaWHEN FDEXSUBMIT rsmodprf AND RETURNWHEN BTE1CALL TRANSACTION FIBFWHEN BTE2PERFORM cargar_bte USING EWHEN BTE3PERFORM cargar_bte USING PWHEN SENHSUBMIT sapmsenh VIA SELECTION-SCREENAND RETURNWHEN CIMPPERFORM visualizar_imp_enhWHEN ALLMOVE X TO p_incl p_func p_submitWHEN DALCLEAR p_incl p_func p_submitWHEN OTHERS Do Nothing ENDCASE

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_prog

PERFORM repid_f4

---------------------------------------------------------------------- INICIO----------------------------------------------------------------------START-OF-SELECTION

GET TIME FIELD w_tini

- CONSISTENCIAS DE LOS PARAMETROSPERFORM consisti_parametros

- INICIALIZA TABLAPERFORM inicializa_tabela

- VERIFICA SI EN EL PROGRAMA EXISTE ALGUN INCLUDE FUNCION O SUBMITPERFORM verifica_include_funcao_submit

- ANALISA LOS INCLUDES Y BUSCA POR USER-EXIT BADIS Y BTEPERFORM busca_user_exit_badi_bte

- ANALISA LOS INCLUDES Y BUSCA LOS FIELD-EXITSPERFORM buscar_field_exit

- OBTENGO LOS EXITs DE LA TRANSACCIOacuteNPERFORM buscar_user_exit

- OBTENGO LAS PUNTOS DE AMPLIACIOacuteNPERFORM buscar_enh

- OBTENGO LAS SUSTITUCIONESPERFORM buscar_sustituciones

- OBTENGO LAS VALIDACIONESPERFORM buscar_validaciones

- CARGO LOS BREAKPOINTSPERFORM cargar_break

- VISUALIZA LAS AMPLIACIONES ENCONTRADASPERFORM exibe_user_exit

---------------------------------------------------------------------- FIN----------------------------------------------------------------------END-OF-SELECTION

amp---------------------------------------------------------------------amp Form BUSCA_USER_EXIT_BADI_BTEamp--------------------------------------------------------------------- Busca EXITs BADIs y BTE en el coacutedigo fuente----------------------------------------------------------------------FORM busca_user_exit_badi_bte

- VERIFICA SI EN LOS INCLUDES SELECIONADOS EXISTEN EXITSLOOP AT ti_includes

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

- BORRA LA TABLA INTERNAREFRESH ti_programa

- REALIZA LECTURA DE INCLUDE ALMACENANDO EN TABLA INTERNAREAD REPORT ti_includes-nome INTO ti_programa

LOOP AT ti_programa

IF p_ue EQ XPERFORM buscar_exitPERFORM busca_enhancementsENDIF

IF p_badi EQ XPERFORM buscar_badiENDIF

IF p_bte EQ XPERFORM buscar_bteENDIF

IF p_enh EQ XPERFORM buscar_punto_ampliacionENDIF

ENDLOOPENDLOOP

ENDFORM BUSCA_USER_EXIT_BADI_BTE

amp---------------------------------------------------------------------amp Form BUSCA_ENHANCEMENTSamp--------------------------------------------------------------------- Busca las llamadas a los USER-EXIT----------------------------------------------------------------------FORM busca_enhancements

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE EN ALGUN ENHANCEMENTSEARCH ti_programa-cf FOR c_enhance- SE ENCONTRO EL ENHANCEMENT Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentarioCLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF

ENDFORM BUSCA_ENHANCEMENTS

amp---------------------------------------------------------------------amp Form EXIBE_USER_EXITamp--------------------------------------------------------------------- Muestra los datos----------------------------------------------------------------------FORM exibe_user_exit

PERFORM armar_alv

PERFORM mostrar_listado

ENDFORM EXIBE_USER_EXIT

amp---------------------------------------------------------------------amp Form PROCURA_INCLUDEamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_include

CLEAR vg_palavra

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN INCLUDESEARCH ti_programa-cf FOR c_include- SE ENCONTRO EN EL INCLUDE Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN STRUCTURESEARCH ti_programa-cf FOR c_struct

IF sy-subrc IS INITIALEXITENDIF

- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DEL INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF NOT vg_caracter IS INITIAL- VERIFICA SI NO ES FIN DE COMANDOIF vg_caracter EQ c_pontoEXITENDIF- ARMA PALABRACONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACIONTRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_includeCLEAR vg_palavraENDIFENDIFENDDO- GRABA NOMBRE DEL INCLUDE PARA FUTURA BUSQUEDA POR USER EXITREAD TABLE ti_includes WITH KEY nome = vg_palavraIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_palavra TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIF

ENDIF

ENDFORM PROCURA_INCLUDE

amp---------------------------------------------------------------------amp Form PROCURA_FUNCAOamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_funcao

CLEAR vg_conta_aspavg_palavra

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA FUNCIONSEARCH ti_programa-cf FOR c_funcao_2- SE ENCONTRO UNA FUNCION Y LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DE LA INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF NOT vg_caracter IS INITIAL- VERIFICA SI NO ES FIN DE COMANDOIF vg_caracter EQ c_aspaADD 1 TO vg_conta_aspaIF vg_conta_aspa EQ 2EXITENDIFENDIF- ARMA PALABRACONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACIONTRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_funcao_1CLEAR vg_palavraENDIFENDIFENDDO- BUSCA NOMBRE DE LA FUNCION PARA FUTURA BUSQUEDA POR USER EXITCLEAR vg_pnameSELECT SINGLE pnameINTO vg_pnameFROM tfdirWHERE funcname EQ vg_palavraIF sy-subrc EQ 0

READ TABLE ti_includes WITH KEY nome = vg_pnameIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_pname TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIF

ENDIF

ENDIF

ENDFORM PROCURA_FUNCAO

amp---------------------------------------------------------------------amp Form VERIFICA_INCLUDE_FUNCAO_SUBMITamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM verifica_include_funcao_submit

CHECK p_ue IS NOT INITIAL OR p_badi IS NOT INITIALOR p_bte IS NOT INITIAL OR p_enh IS NOT INITIAL

LOOP AT ti_includes

ADD 1 TO vg_contadorDESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfillMOVE ti_includes-nivel TO vg_nivelADD 1 TO vg_nivel

- BORRA TABLA INTERNAREFRESH ti_programa

- REALIZA LECTURA DE INCLUDEFUNCION ALMACENANDO EN TABLA INTERNAREAD REPORT ti_includes-nome INTO ti_programa

LOOP AT ti_programa

- PROCURA POR INCLUDESIF p_incl EQ c_xPERFORM procura_includeENDIF- PROCURA POR FUNCIONIF p_func EQ c_xPERFORM procura_funcaoENDIF- PROCURA POR SUBMITIF p_submit EQ c_xPERFORM procura_submitENDIF

ENDLOOP

ENDLOOP

ENDFORM VERIFICA_INCLUDE_FUNCAO_SUBMIT

amp---------------------------------------------------------------------amp Form EVITAR_TIME_OUTamp--------------------------------------------------------------------- Evito el TIME OUT visualizando un mensaje----------------------------------------------------------------------FORM evitar_time_out USING p_tfill LIKE sy-tfill

DATAvl_total(10) TYPE n

vl_atual(10) TYPE nl_tout LIKE sy-timlol_time(10) TYPE c

GET TIME FIELD l_tout

l_tout = l_tout - w_tini

MOVEp_tfill TO vl_totalvg_contador TO vl_atual

SHIFT vl_total LEFT DELETING LEADING 0SHIFT vl_atual LEFT DELETING LEADING 0WRITE l_tout TO l_time

CONCATENATE Tpo l_time Total vl_total Actual vl_atualINTO vg_textoSEPARATED BY space

CALL FUNCTION SAPGUI_PROGRESS_INDICATOREXPORTINGtext = vg_texto

ENDFORM EVITAR_TIME_OUT

amp---------------------------------------------------------------------amp Form PROCURA_SUBMITamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_submit

CLEAR vg_conta_espaco vg_palavra vg_ini_contagem

- VERIFICA SI LA LINEA DEL PROGRAMA EXISTE ALGUN INCLUDESEARCH ti_programa-cf FOR c_submit- SE ENCONTRO EN EL INCLUDE Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DEL INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF vg_ini_contagem EQ c_x AND vg_caracter IS INITIALADD 1 TO vg_conta_espacoENDIF

IF NOT vg_caracter IS INITIALMOVE c_x TO vg_ini_contagemIF vg_caracter EQ c_pontoEXITENDIF- ARMA PALABRAIF vg_conta_espaco LT 2CONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACION

TRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_submitCLEAR vg_palavraENDIFELSEEXITENDIFENDIFENDDO- BUSCA NOMBRE DE LA FUNCION PARA FUTURA BUSQUEDA POR USER EXITREAD TABLE ti_includes WITH KEY nome = vg_palavraIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_palavra TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIFENDIF

ENDFORM PROCURA_SUBMIT

amp---------------------------------------------------------------------amp Form CONSISTI_PARAMETROSamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM consisti_parametros

IF p_nivel IS INITIALMOVE 1 TO p_nivelENDIF

IF p_prog IS INITIAL AND p_tcode IS INITIAL- EL NOMBRE DEL PROGRAMA Y EL NOMBRE DE LA TRANSACCION NO PUEDEN SER- NULOS UNO DE ELLOS DEBE SER INFORMADOMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e01STOPENDIF

IF NOT p_prog IS INITIAL AND NOT p_tcode IS INITIAL- SE SOLICITA AL USUARIO QUE INFORME NOMBRE DE PROGRAMA O TRANSACCIONMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e02STOPENDIF

IF p_ue IS INITIAL AND p_badi IS INITIAL AND p_bte IS INITIALAND p_sust IS INITIAL AND p_val IS INITIAL AND p_fdex IS INITIALAND p_enh IS INITIAL- SE SOLICITA AL USUARIO QUE INFORME UN TIPO DE MEJORAMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e03STOPENDIF

ENDFORM CONSISTI_PARAMETROS

amp---------------------------------------------------------------------

amp Form INICIALIZA_TABELAamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM inicializa_tabela

DATAe_tstc TYPE tstcl_tcode TYPE sy-tcode

REFRESH ti_includes

IF NOT p_prog IS INITIAL

MOVE p_prog TO ti_includes-nome0 TO ti_includes-nivelAPPEND ti_includes

- BUSCO EL PROGRAMAREAD REPORT ti_includes-nome INTO ti_programa

IF sy-subrc EQ 0REFRESH ti_programaELSE- EL PROGRAMA NO EXISTEMESSAGE s893(pz) WITH El programa p_prog no existeSTOPENDIF

ELSEIF NOT p_tcode IS INITIAL

SELECT SINGLE FROM tstcWHERE tcode EQ p_tcode

IF sy-subrc EQ 0

IF tstc-pgmna IS NOT INITIALMOVE tstc-pgmna TO ti_includes-nome0 TO ti_includes-nivelAPPEND ti_includesELSE Se trata de una transaccioacuten de paraacutemetros Obtengo la transaccioacuten asociadaCALL FUNCTION RS_TRANSACTION_SINGLE_GETEXPORTINGparameter_tcode = p_tcodeIMPORTINGtcode = l_tcode

SELECT SINGLE INTO e_tstcFROM tstcWHERE tcode EQ l_tcode

IF sy-subrc EQ 0MOVE e_tstc-pgmna TO ti_includes-nome0 TO ti_includes-nivel

APPEND ti_includesELSE- LA TRANSACCIOacuteN NO EXISTEMESSAGE s893(pz) WITH La transaccioacuten p_tcode no existeENDIFENDIFELSE- LA TRANSACCIOacuteN NO EXISTEMESSAGE s893(pz) WITH La transaccioacuten p_tcode no existeSTOPENDIFENDIF

ENDFORM INICIALIZA_TABELA

amp---------------------------------------------------------------------amp Form armar_alvamp--------------------------------------------------------------------- Armo el ALV----------------------------------------------------------------------FORM armar_alv

DATAl_repid TYPE sy-repid

MOVE sy-repid TO l_repid

CALL FUNCTION REUSE_ALV_BLOCK_LIST_INITEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMAND

IF p_ue IS NOT INITIALPERFORM construir_catalogo_exitPERFORM definir_layout USING TI_USER_EXITCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGEPERFORM sort TABLES ti_sortUSING TI_USER_EXIT

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_USER_EXITit_events = ti_eventsit_sort = ti_sorti_text = User-exitTABLESt_outtab = ti_user_exitEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

PERFORM construir_catalogo_uexitPERFORM definir_layout USING TI_FINAL

CHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_UEXITPERFORM sort TABLES ti_sortUSING TI_FINAL

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FINALit_events = ti_eventsit_sort = ti_sorti_text = User-exit TxCMODTABLESt_outtab = ti_finalEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_badi IS NOT INITIALPERFORM construir_catalogo_badiPERFORM definir_layout USING TI_BADICHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BADIPERFORM sort TABLES ti_sortUSING TI_BADI

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_BADIit_events = ti_eventsit_sort = ti_sorti_text = BadisTABLESt_outtab = ti_badiEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_bte IS NOT INITIALPERFORM construir_catalogo_btePERFORM definir_layout USING TI_BTECHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BTEPERFORM sort TABLES ti_sortUSING TI_BTE

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layout

it_fieldcat = ti_cati_tabname = TI_BTEit_events = ti_eventsit_sort = ti_sorti_text = BTETABLESt_outtab = ti_bteEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_enh IS NOT INITIALPERFORM construir_catalogo_enhPERFORM definir_layout USING TI_ENHCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHPERFORM sort TABLES ti_sortUSING TI_ENH

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHit_events = ti_eventsit_sort = ti_sorti_text = ENHTABLESt_outtab = ti_enhEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

PERFORM construir_catalogo_enhobjPERFORM definir_layout USING TI_ENHOBJCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHOBJPERFORM sort TABLES ti_sortUSING TI_ENHOBJ

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHOBJit_events = ti_eventsit_sort = ti_sorti_text = ENHOBJTABLESt_outtab = ti_enhobjEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_sust IS NOT INITIALPERFORM construir_catalogo_sustPERFORM definir_layout USING TI_SUSTCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_SUSTPERFORM sort TABLES ti_sortUSING TI_SUST

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_SUSTit_events = ti_eventsit_sort = ti_sorti_text = SustitucionesTABLESt_outtab = ti_sustEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_val IS NOT INITIALPERFORM construir_catalogo_valPERFORM definir_layout USING TI_VALCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_VALPERFORM sort TABLES ti_sortUSING TI_VAL

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_VALit_events = ti_eventsit_sort = ti_sorti_text = ValidacionesTABLESt_outtab = ti_valEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_fdex IS NOT INITIALPERFORM construir_catalogo_fdexPERFORM definir_layout USING TI_FDEXCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_FDEX

PERFORM sort TABLES ti_sortUSING TI_FDEX

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FDEXit_events = ti_eventsit_sort = ti_sorti_text = Field-exitTABLESt_outtab = ti_fdexEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

ENDFORM armar_alv

amp---------------------------------------------------------------------amp Form construir_catalogo_EXITamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_exit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_USER_EXITi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03

CF X c_text_04

ENDFORM construir_catalogo_EXIT

amp---------------------------------------------------------------------amp Form asignar_campo_a_catalogoamp--------------------------------------------------------------------- Asignar campo al catalogo ALV----------------------------------------------------------------------FORM asignar_campo_a_catalogo TABLES pt_cat STRUCTURE wa_catUSING p_fieldname LIKE wa_cat-fieldnamep_key LIKE wa_cat-keyp_col_pos TYPE cp_fix_column LIKE wa_cat-fix_columnp_hotspot LIKE wa_cat-hotspotp_do_sum LIKE wa_cat-do_sump_input LIKE wa_cat-inputp_checkbox LIKE wa_cat-checkboxp_no_out LIKE wa_cat-no_outp_icon LIKE wa_cat-iconp_reptext_ddic LIKE wa_cat-reptext_ddic

STATICS l_col_pos LIKE sy-cucol

Asignar atributos de campo en el catalogo de cabecera ALVCLEAR wa_catREAD TABLE pt_cat INTO wa_catWITH KEY fieldname = p_fieldname

CHECK sy-subrc EQ 0

IF NOT p_reptext_ddic IS INITIALwa_cat-seltext_l = wa_cat-seltext_m =wa_cat-seltext_s = wa_cat-reptext_ddic = p_reptext_ddicENDIF

IF p_col_pos EQ X Inicializo el conteo para ordenar las columnasl_col_pos = 1ELSEADD 1 TO l_col_posENDIF

wa_cat-fieldname = p_fieldnamewa_cat-key = p_keywa_cat-col_pos = l_col_poswa_cat-fix_column = p_fix_columnwa_cat-hotspot = p_hotspotwa_cat-do_sum = p_do_sumwa_cat-edit = wa_cat-input = p_inputwa_cat-checkbox = p_checkboxwa_cat-no_out = p_no_outwa_cat-icon = p_icon

MODIFY pt_cat FROM wa_cat INDEX sy-tabix

ENDFORM asignar_campo_a_catalogo

amp---------------------------------------------------------------------amp Form definir_layoutamp--------------------------------------------------------------------- Definir atributos del layout de reporte----------------------------------------------------------------------FORM definir_layout USING p_table TYPE slis_layout_alv-box_tabnameCHANGING p_layout TYPE slis_layout_alv

CLEAR p_layout

IF p_table NE TI_CIMP Marco el campo para la seleccioacutenp_layout-box_fieldname = SELp_layout-box_tabname = p_tableENDIFp_layout-zebra = Xp_layout-colwidth_optimize = Xp_layout-no_vline = p_layout-no_colhead = p_layout-lights_condense = Xp_layout-detail_popup = Xp_layout-detail_initial_lines = Xp_layout-flexible_key = p_layout-key_hotspot = p_layout-confirmation_prompt = X

ENDFORM definir_layout

amp---------------------------------------------------------------------amp Form construir_eventosamp--------------------------------------------------------------------- Asignar eventos soportados----------------------------------------------------------------------FORM construir_eventos USING p_form LIKE wa_events-formDATAl_type(1) TYPE n

REFRESH ti_eventsCLEAR wa_events

ALV Simple Block appendl_type = 2

Buscar secciones para eventosCALL FUNCTION REUSE_ALV_EVENTS_GETEXPORTINGi_list_type = l_typeIMPORTINGet_events = ti_events

Leer evento TOP_OF_PAGEREAD TABLE ti_events WITH KEY name = slis_ev_top_of_pageINTO wa_events Asignar Rutina FORM TOP_OF_PAGE a eventoIF sy-subrc = 0MOVE p_form TO wa_events-formMODIFY ti_events FROM wa_events INDEX sy-tabixENDIF

ENDFORM construir_eventos

amp---------------------------------------------------------------------amp Form top_of_pageamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_user_exitWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUser-exit

ENDFORM top_of_page

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_UEXITamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_uexit

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_finalWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUSER-EXITs TxSMOD

ENDFORM TOP_OF_PAGE_UEXIT

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_FDEXamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_fdex

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_fdexWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incFIELD-EXITs

ENDFORM TOP_OF_PAGE_FDEX

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BADIamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_badi

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_badiWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBADIs

ENDFORM TOP_OF_PAGE_BADI

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BTEamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_bte

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_bteWRITE sy-tfill TO l_tfill_cant

CONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBTEs

ENDFORM TOP_OF_PAGE_BTE

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enh

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_enhWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENH

amp---------------------------------------------------------------------amp Form sortamp--------------------------------------------------------------------- Creo el sort del ALV (FM)---------------------------------------------------------------------- --gtPT_sort Tabla --gtP_tabname Nombre de la tabla----------------------------------------------------------------------FORM sort TABLES pt_sortUSING p_tabname TYPE any

CLEAR pt_sort wa_sortREFRESH pt_sort

CASE p_tabnameWHEN TI_SUST

wa_sort-fieldname = SUBSTIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = SUBSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = CONSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN TI_VAL

wa_sort-fieldname = VALIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = VALSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN TI_ENHOBJ

wa_sort-fieldname = ENHNAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = VERSIONwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN OTHERS

IF p_tabname NE TI_FINAL

wa_sort-fieldname = TIPOwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

IF p_tabname NE TI_FDEX

wa_sort-fieldname = NIVELwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = PROGRAMAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = LINEAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

ENDIF

ELSE

wa_sort-fieldname = NAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = MEMBERwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sortENDIFENDCASE

ENDFORM sort

amp---------------------------------------------------------------------amp Form mostrar_listadoamp--------------------------------------------------------------------- Mostrar listado ALV----------------------------------------------------------------------FORM mostrar_listado

wa_print-reserve_lines = 2

CALL FUNCTION REUSE_ALV_BLOCK_LIST_DISPLAY

EXPORTINGis_print = wa_printEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM mostrar_listado

amp---------------------------------------------------------------------amp Form user_commandamp--------------------------------------------------------------------- Evaluar acciones del usuario----------------------------------------------------------------------FORM user_command USING ucomm LIKE sy-ucommsfields TYPE slis_selfield

DATA l_break TYPE c

Rescatar el registro seleccionadoCASE sfields-tabnameWHEN TI_USER_EXITREAD TABLE ti_user_exit INDEX sfields-tabindexWHEN TI_BADIREAD TABLE ti_badi INDEX sfields-tabindexWHEN TI_BTEREAD TABLE ti_bte INDEX sfields-tabindexWHEN TI_ENHREAD TABLE ti_enh INDEX sfields-tabindexWHEN TI_ENHOBJREAD TABLE ti_enhobj INDEX sfields-tabindexWHEN TI_FDEXREAD TABLE ti_fdex INDEX sfields-tabindexWHEN TI_FINALREAD TABLE ti_final INDEX sfields-tabindexWHEN TI_SUSTREAD TABLE ti_sust INDEX sfields-tabindexWHEN TI_VALREAD TABLE ti_val INDEX sfields-tabindexWHEN TI_CIMPREAD TABLE ti_cimp INDEX sfields-tabindexENDCASE

Seleccion de opcionCASE ucomm DOUBLE CLICKWHEN ampIC1 Evaluar valor de campo seleccionadoCHECK NOT sfields-value IS INITIAL

CASE sfields-tabnameWHEN TI_USER_EXIT USER-EXITIF ti_user_exit-tipo EQ sfields-value(4)SEARCH ti_user_exit-cf FOR c_enhanceCHECK sy-subrc EQ 0PERFORM visualizar_exit USING ti_user_exit-programati_user_exit-cf

ELSEIF ti_user_exit-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_user_exit-programati_user_exit-lineaMOVE X TO l_breakELSEIF ti_user_exit-break EQ sfields-value(4)OR ti_user_exit-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_user_exit-programati_user_exit-lineati_user_exit-breakMOVE X TO l_breakENDIF

WHEN TI_FINAL USER-EXIT Tx CMODIF ti_final-name EQ sfields-valueCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = ti_final-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSEIF ti_final-include EQ sfields-valuePERFORM visualizar_linea USING ti_final-programa1MOVE X TO l_breakENDIF

WHEN TI_BADI BadiIF ti_badi-tipo EQ sfields-value(4)PERFORM visualizar_badi USING ti_badi-cfELSEIF ti_badi-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_badi-programati_badi-lineaMOVE X TO l_breakELSEIF ti_badi-break EQ sfields-value(4)OR ti_badi-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_badi-programati_badi-lineati_badi-breakMOVE X TO l_breakENDIF

WHEN TI_BTE BTEIF ti_bte-tipo EQ sfields-value(4)PERFORM fibf USING ti_bte-cfELSEIF ti_bte-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_bte-programati_bte-lineaMOVE X TO l_breakELSEIF ti_bte-break EQ sfields-value(4)OR ti_bte-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_bte-programati_bte-linea

ti_bte-breakMOVE X TO l_breakENDIF

WHEN TI_ENH Punto de ampliacioacutenIF ti_enh-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_enh-programati_enh-lineaMOVE X TO l_breakELSEIF ti_enh-tipo EQ sfields-value(4)PERFORM bi_se18 USING ti_enh-cfENDIF

WHEN TI_ENHOBJ Punto de ampliacioacutenIF ti_enhobj-enhname EQ sfields-value(30)PERFORM bi_se19 USING ti_enhobj-enhnameENDIF

WHEN TI_SUST SustitucionesIF ti_sust-substid EQ sfields-value(7) ORti_sust-subseqnr EQ sfields-value(3)PERFORM visualizar_sust USING ti_sust-substidti_sust-subseqnrENDIF

WHEN TI_VAL ValidacionesIF ti_val-valid EQ sfields-value(7) ORti_val-valseqnr EQ sfields-value(3)PERFORM visualizar_val USING ti_val-validti_val-valseqnrENDIF

WHEN TI_FDEX Field-exitIF ti_fdex-tipo EQ sfields-valueSUBMIT rsmodprf AND RETURNELSEIF ti_fdex-cf(60) EQ sfields-value Visualizo el field-exitCALL FUNCTION RS_FUNCTION_SHOWEXPORTINGfuncname = ti_fdex-cf

CALL FUNCTION RS_NAVIGATION_MONITORENDIF

WHEN TI_CIMP Customer implementation

CASE sfields-fieldnameWHEN ENHNAMEPERFORM bi_se19 USING ti_cimp-enhnameWHEN ENHINCLUDEPERFORM visualizar_enh_cf USING ti_cimp-enhinclude

WHEN OTHERS DO NOTHING ENDCASE

WHEN OTHERS DO NOTHING ENDCASE

WHEN OTHERS DO NOTHING ENDCASE

IF l_break IS NOT INITIAL AND sfields-tabname NE TI_CIMPWAIT UP TO 1 SECONDSPERFORM cargar_breakENDIFsfields-refresh = X

ENDFORM user_command

amp---------------------------------------------------------------------amp Form visualizar_lineaamp--------------------------------------------------------------------- Visualizo la linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_linea USING p_programa TYPE sy-repidp_linea

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_programaobject_type = c_typeposition = p_lineaEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM visualizar_linea

amp---------------------------------------------------------------------amp Form buscar_exitamp--------------------------------------------------------------------- Buscar USER-EXIT----------------------------------------------------------------------FORM buscar_exit

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN USER-EXITSEARCH ti_programa-cf FOR c_user_exit- SE ENCONTRO UN USER-EXIT Y SE VERIFICA SI LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS PERFORMSEARCH ti_programa-cf FOR c_performCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LAS ASIGNACIONESSEARCH ti_programa-cf FOR c_igualCHECK sy-subrc NE 0

CLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INIacuteCIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF

ENDFORM buscar_exit

amp---------------------------------------------------------------------amp Form buscar_badiamp--------------------------------------------------------------------- Buscar BADI----------------------------------------------------------------------FORM buscar_badi

DATAl_subrc LIKE sy-subrc

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BADISEARCH ti_programa-cf FOR c_badi- SE ENCONTRO UNA BADI Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

SEARCH ti_programa-cf FOR c_includeIF sy-subrc NE 0CLEAR l_subrcSEARCH ti_programa-cf FOR c_methodIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_funcao_2IF sy-subrc NE 0SEARCH ti_programa-cf FOR c_performIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_type_refIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_formMOVE 4 TO l_subrcENDIFENDIFENDIFENDIF

IF l_subrc EQ 0CLEAR ti_badi

- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIFELSECHECK p_handl IS NOT INITIAL- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA INSTANCIA DE- UNA BADISEARCH ti_programa-cf FOR c_handler- SE ENCONTRO UNA INSTANCIA DE IMPLEMENACIOacuteN Y SE VERIFICA SI LA LINEA- NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

SEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0CLEAR ti_badi- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIF

ENDFORM buscar_badi

amp---------------------------------------------------------------------amp Form buscar_bteamp--------------------------------------------------------------------- Buscar BTE----------------------------------------------------------------------FORM buscar_bte

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OPEN_FI_PERFORM

- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endform

CHECK sy-subrc NE 0

CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte1- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OUTBOUND_CALL

- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0

CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF

ENDFORM buscar_bte

amp---------------------------------------------------------------------amp Form repid_f4amp--------------------------------------------------------------------- Ejecuto el F4 para buscar programas----------------------------------------------------------------------FORM repid_f4

CALL FUNCTION REPOSITORY_INFO_SYSTEM_F4EXPORTINGobject_type = PROGobject_name = p_progsuppress_selection = XIMPORTINGobject_name_selected = p_progEXCEPTIONS

cancel = 1wrong_type = 2OTHERS = 3

ENDFORM repid_f4

amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf

DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

SEARCH p_cf FOR 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 INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

READ TABLE lt_cf INDEX 4

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

CHECK sy-subrc IS INITIAL

Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten

textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer

CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4

IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF

WHEN OTHERS Do Nothing ENDCASE

ENDFORM visualizar_badi

amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf

DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

CLEAR d010inc modsap modact

Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid

IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF

SEARCH p_cf FOR c_enhance

CHECK sy-subrc IS INITIAL

REFRESH lt_cf

l_cf = 500 - sy-fdpos

MOVE p_cf+sy-fdpos(l_cf) TO l_linea

SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3

TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS

Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _

Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit

CHECK sy-subrc IS INITIAL

Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM

modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3

ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname

CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ENDIF

ENDFORM visualizar_exit

amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit

DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo

DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe

DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE

CHECK p_fdex IS NOT INITIAL

CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe

MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex

IF p_prog IS NOT INITIAL

MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF

Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog

LOOP AT lt_d020s

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

REFRESH lt_d021s

Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4

Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X

SEARCH lt_d021s-fnam FOR -

IF sy-subrc IS INITIAL

MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum

Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname

APPEND lt_campo

ENDIF

ENDLOOPENDLOOP

CHECK lt_campo[] IS NOT INITIAL

SORT lt_campo BY repid dnum tabname fieldname

DELETE ADJACENT DUPLICATES FROM lt_campo

Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname

SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l

LOOP AT lt_dd03l

CLEAR tddir tddirs

SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname

CHECK sy-subrc IS INITIAL

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog

CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF

Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf

IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF

READ TABLE lt_fe WITH KEY cf = lt_fe-cf

CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP

LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex

ENDLOOP

ENDFORM buscar_field_exit

amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf

DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c

SEARCH p_cf FOR c_bte

IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ELSE

SEARCH p_cf FOR c_bte1

CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ENDIF

IF l_tipo IS NOT INITIAL

PERFORM visualizar_bte USING l_tipol_linea

ELSECALL TRANSACTION FIBFENDIF

ENDFORM fibf

amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT

EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM breakpoint

amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_badi

amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE

i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_bte

amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X TIPO X X c_text_05CF X c_text_04

ENDFORM construir_catalogo_FDEX

amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc

DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

CHECK lt_break[] IS NOT INITIAL

IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix

MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF

IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix

MOVEti_badi-linea TO l_lineti_badi-programa TO l_program

READ TABLE lt_break INTO wa_break

WITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF

IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix

MOVEti_bte-linea TO l_lineti_bte-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF

ENDFORM cargar_break

amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

DATAl_tabix TYPE sy-tabix

l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

SELECT SINGLE FROM d010incWHERE include = p_programa

IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF

MOVEp_linea TO l_linep_programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM asignar_break

amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit

IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF

PERFORM get_objects Get Objects

ENDFORM buscar_user_exit

amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects

DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area

DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix

SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog

IF sy-subrc = 0

SORT ti_tadir BY obj_name devclass

SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass

IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF

- Get UserExit namesLOOP AT ti_jtab

SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E

APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area

l_fname = ti_final-member

CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include

LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP

CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP

ENDFORM get_objects

amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X

ENDFORM construir_catalogo_uexit

amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------

FORM visualizar_ampliacion

DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF

SELECT SINGLE FROM modsapWHERE member EQ l_member

IF sy-subrc IS INITIAL

Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member

ENDIF

ENDFORM visualizar_ampliacion

amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea

RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs

REFRESH r_event r_procs

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event

SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs

SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE

ENDFORM visualizar_bte

amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE

----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c

DATAl_linea(500) TYPE c

DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

MOVE lt_fields-value TO l_linea

PERFORM visualizar_bte USING p_tipol_linea

ENDFORM cargar_bte

amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface

DATAl_linea(500) TYPE c

DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE

InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF

ENDFORM visualizar_interface

amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones

CHECK p_sust IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922

ENDFORM buscar_sustituciones

amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST

ENDFORM construir_catalogo_sust

amp---------------------------------------------------------------------

amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones

ENDFORM TOP_OF_PAGE_SUST

amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4

CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_sust

amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones

CHECK p_val IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931

ENDFORM buscar_validaciones

amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID

ENDFORM construir_catalogo_val

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones

ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2

CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_val

amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto

DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF

SELECT SINGLE FROM modsapWHERE name EQ l_name

IF sy-subrc IS INITIAL

MOVE l_name TO l_member

SELECT SINGLE FROM modactWHERE member EQ l_member

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF

ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF

ENDFORM visualizar_proyecto

amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel

APPEND ti_enh

ENDIFENDIFENDIF

ENDFORM buscar_punto_ampliacioacuten

amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_enh

amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh

DATA l_obj_name TYPE enhobj-obj_name

DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name

CHECK p_enh IS NOT INITIAL

IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF

REFRESH lt_obj_name

LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP

SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name

ENDFORM buscar_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X

ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME

ENDFORM construir_catalogo_enhobj

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENHOBJ

amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM bi_se19

amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro

CLEAR ti_bdcdatati_bdcdata-program = program

ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata

ENDFORM BDC_DYNPRO

amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval

CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata

ENDFORM BDC_FIELD

amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa

DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)

CHECK ti_gb31t[] IS NOT INITIAL

DO

Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2

IF l_exit EQ XEXITENDIF

CHECK l_exit IS INITIAL

Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND

CHECK l_boolpool IS NOT INITIAL

MOVE l_boolpool TO l_repid

Visualizo el programaPERFORM visualizar_linea USING l_repid01

ENDDO

ENDFORM visualizar_programa

amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope

STATICS l_flag TYPE c

DATA l_tit(65) TYPE c

CHECK l_flag IS INITIAL

l_flag = X

WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline

4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM texto_tope

amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf

DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off

CHECK l_off IS NOT INITIAL

ADD 7 TO l_offl_cf = 500 - l_off

SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_enhspotname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1

invalid_object_type = 2OTHERS = 3

ENDFORM bi_se18

amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit

DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE

DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE

MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE

MOVE lt_fields-value TO l_nameENDIF

Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_

LOOP AT lt_tfdir

CLEARl_group l_include l_namespace l_str_area

l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl

IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl

CHECK sy-subrc IS INITIAL

Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP

CHECK l_flag IS INITIAL

La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value

ENDFORM visualizar_fm_exit

amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter

tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten

ENDFORM def_text_parameter

amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones

Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt

Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt

Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt

icon_create RESULT name text infoicon_create

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 10: buscar_ampliaciones FOROSAP

GET TIME FIELD w_tini

- CONSISTENCIAS DE LOS PARAMETROSPERFORM consisti_parametros

- INICIALIZA TABLAPERFORM inicializa_tabela

- VERIFICA SI EN EL PROGRAMA EXISTE ALGUN INCLUDE FUNCION O SUBMITPERFORM verifica_include_funcao_submit

- ANALISA LOS INCLUDES Y BUSCA POR USER-EXIT BADIS Y BTEPERFORM busca_user_exit_badi_bte

- ANALISA LOS INCLUDES Y BUSCA LOS FIELD-EXITSPERFORM buscar_field_exit

- OBTENGO LOS EXITs DE LA TRANSACCIOacuteNPERFORM buscar_user_exit

- OBTENGO LAS PUNTOS DE AMPLIACIOacuteNPERFORM buscar_enh

- OBTENGO LAS SUSTITUCIONESPERFORM buscar_sustituciones

- OBTENGO LAS VALIDACIONESPERFORM buscar_validaciones

- CARGO LOS BREAKPOINTSPERFORM cargar_break

- VISUALIZA LAS AMPLIACIONES ENCONTRADASPERFORM exibe_user_exit

---------------------------------------------------------------------- FIN----------------------------------------------------------------------END-OF-SELECTION

amp---------------------------------------------------------------------amp Form BUSCA_USER_EXIT_BADI_BTEamp--------------------------------------------------------------------- Busca EXITs BADIs y BTE en el coacutedigo fuente----------------------------------------------------------------------FORM busca_user_exit_badi_bte

- VERIFICA SI EN LOS INCLUDES SELECIONADOS EXISTEN EXITSLOOP AT ti_includes

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

- BORRA LA TABLA INTERNAREFRESH ti_programa

- REALIZA LECTURA DE INCLUDE ALMACENANDO EN TABLA INTERNAREAD REPORT ti_includes-nome INTO ti_programa

LOOP AT ti_programa

IF p_ue EQ XPERFORM buscar_exitPERFORM busca_enhancementsENDIF

IF p_badi EQ XPERFORM buscar_badiENDIF

IF p_bte EQ XPERFORM buscar_bteENDIF

IF p_enh EQ XPERFORM buscar_punto_ampliacionENDIF

ENDLOOPENDLOOP

ENDFORM BUSCA_USER_EXIT_BADI_BTE

amp---------------------------------------------------------------------amp Form BUSCA_ENHANCEMENTSamp--------------------------------------------------------------------- Busca las llamadas a los USER-EXIT----------------------------------------------------------------------FORM busca_enhancements

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE EN ALGUN ENHANCEMENTSEARCH ti_programa-cf FOR c_enhance- SE ENCONTRO EL ENHANCEMENT Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentarioCLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF

ENDFORM BUSCA_ENHANCEMENTS

amp---------------------------------------------------------------------amp Form EXIBE_USER_EXITamp--------------------------------------------------------------------- Muestra los datos----------------------------------------------------------------------FORM exibe_user_exit

PERFORM armar_alv

PERFORM mostrar_listado

ENDFORM EXIBE_USER_EXIT

amp---------------------------------------------------------------------amp Form PROCURA_INCLUDEamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_include

CLEAR vg_palavra

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN INCLUDESEARCH ti_programa-cf FOR c_include- SE ENCONTRO EN EL INCLUDE Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN STRUCTURESEARCH ti_programa-cf FOR c_struct

IF sy-subrc IS INITIALEXITENDIF

- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DEL INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF NOT vg_caracter IS INITIAL- VERIFICA SI NO ES FIN DE COMANDOIF vg_caracter EQ c_pontoEXITENDIF- ARMA PALABRACONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACIONTRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_includeCLEAR vg_palavraENDIFENDIFENDDO- GRABA NOMBRE DEL INCLUDE PARA FUTURA BUSQUEDA POR USER EXITREAD TABLE ti_includes WITH KEY nome = vg_palavraIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_palavra TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIF

ENDIF

ENDFORM PROCURA_INCLUDE

amp---------------------------------------------------------------------amp Form PROCURA_FUNCAOamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_funcao

CLEAR vg_conta_aspavg_palavra

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA FUNCIONSEARCH ti_programa-cf FOR c_funcao_2- SE ENCONTRO UNA FUNCION Y LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DE LA INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF NOT vg_caracter IS INITIAL- VERIFICA SI NO ES FIN DE COMANDOIF vg_caracter EQ c_aspaADD 1 TO vg_conta_aspaIF vg_conta_aspa EQ 2EXITENDIFENDIF- ARMA PALABRACONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACIONTRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_funcao_1CLEAR vg_palavraENDIFENDIFENDDO- BUSCA NOMBRE DE LA FUNCION PARA FUTURA BUSQUEDA POR USER EXITCLEAR vg_pnameSELECT SINGLE pnameINTO vg_pnameFROM tfdirWHERE funcname EQ vg_palavraIF sy-subrc EQ 0

READ TABLE ti_includes WITH KEY nome = vg_pnameIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_pname TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIF

ENDIF

ENDIF

ENDFORM PROCURA_FUNCAO

amp---------------------------------------------------------------------amp Form VERIFICA_INCLUDE_FUNCAO_SUBMITamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM verifica_include_funcao_submit

CHECK p_ue IS NOT INITIAL OR p_badi IS NOT INITIALOR p_bte IS NOT INITIAL OR p_enh IS NOT INITIAL

LOOP AT ti_includes

ADD 1 TO vg_contadorDESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfillMOVE ti_includes-nivel TO vg_nivelADD 1 TO vg_nivel

- BORRA TABLA INTERNAREFRESH ti_programa

- REALIZA LECTURA DE INCLUDEFUNCION ALMACENANDO EN TABLA INTERNAREAD REPORT ti_includes-nome INTO ti_programa

LOOP AT ti_programa

- PROCURA POR INCLUDESIF p_incl EQ c_xPERFORM procura_includeENDIF- PROCURA POR FUNCIONIF p_func EQ c_xPERFORM procura_funcaoENDIF- PROCURA POR SUBMITIF p_submit EQ c_xPERFORM procura_submitENDIF

ENDLOOP

ENDLOOP

ENDFORM VERIFICA_INCLUDE_FUNCAO_SUBMIT

amp---------------------------------------------------------------------amp Form EVITAR_TIME_OUTamp--------------------------------------------------------------------- Evito el TIME OUT visualizando un mensaje----------------------------------------------------------------------FORM evitar_time_out USING p_tfill LIKE sy-tfill

DATAvl_total(10) TYPE n

vl_atual(10) TYPE nl_tout LIKE sy-timlol_time(10) TYPE c

GET TIME FIELD l_tout

l_tout = l_tout - w_tini

MOVEp_tfill TO vl_totalvg_contador TO vl_atual

SHIFT vl_total LEFT DELETING LEADING 0SHIFT vl_atual LEFT DELETING LEADING 0WRITE l_tout TO l_time

CONCATENATE Tpo l_time Total vl_total Actual vl_atualINTO vg_textoSEPARATED BY space

CALL FUNCTION SAPGUI_PROGRESS_INDICATOREXPORTINGtext = vg_texto

ENDFORM EVITAR_TIME_OUT

amp---------------------------------------------------------------------amp Form PROCURA_SUBMITamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_submit

CLEAR vg_conta_espaco vg_palavra vg_ini_contagem

- VERIFICA SI LA LINEA DEL PROGRAMA EXISTE ALGUN INCLUDESEARCH ti_programa-cf FOR c_submit- SE ENCONTRO EN EL INCLUDE Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DEL INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF vg_ini_contagem EQ c_x AND vg_caracter IS INITIALADD 1 TO vg_conta_espacoENDIF

IF NOT vg_caracter IS INITIALMOVE c_x TO vg_ini_contagemIF vg_caracter EQ c_pontoEXITENDIF- ARMA PALABRAIF vg_conta_espaco LT 2CONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACION

TRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_submitCLEAR vg_palavraENDIFELSEEXITENDIFENDIFENDDO- BUSCA NOMBRE DE LA FUNCION PARA FUTURA BUSQUEDA POR USER EXITREAD TABLE ti_includes WITH KEY nome = vg_palavraIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_palavra TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIFENDIF

ENDFORM PROCURA_SUBMIT

amp---------------------------------------------------------------------amp Form CONSISTI_PARAMETROSamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM consisti_parametros

IF p_nivel IS INITIALMOVE 1 TO p_nivelENDIF

IF p_prog IS INITIAL AND p_tcode IS INITIAL- EL NOMBRE DEL PROGRAMA Y EL NOMBRE DE LA TRANSACCION NO PUEDEN SER- NULOS UNO DE ELLOS DEBE SER INFORMADOMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e01STOPENDIF

IF NOT p_prog IS INITIAL AND NOT p_tcode IS INITIAL- SE SOLICITA AL USUARIO QUE INFORME NOMBRE DE PROGRAMA O TRANSACCIONMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e02STOPENDIF

IF p_ue IS INITIAL AND p_badi IS INITIAL AND p_bte IS INITIALAND p_sust IS INITIAL AND p_val IS INITIAL AND p_fdex IS INITIALAND p_enh IS INITIAL- SE SOLICITA AL USUARIO QUE INFORME UN TIPO DE MEJORAMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e03STOPENDIF

ENDFORM CONSISTI_PARAMETROS

amp---------------------------------------------------------------------

amp Form INICIALIZA_TABELAamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM inicializa_tabela

DATAe_tstc TYPE tstcl_tcode TYPE sy-tcode

REFRESH ti_includes

IF NOT p_prog IS INITIAL

MOVE p_prog TO ti_includes-nome0 TO ti_includes-nivelAPPEND ti_includes

- BUSCO EL PROGRAMAREAD REPORT ti_includes-nome INTO ti_programa

IF sy-subrc EQ 0REFRESH ti_programaELSE- EL PROGRAMA NO EXISTEMESSAGE s893(pz) WITH El programa p_prog no existeSTOPENDIF

ELSEIF NOT p_tcode IS INITIAL

SELECT SINGLE FROM tstcWHERE tcode EQ p_tcode

IF sy-subrc EQ 0

IF tstc-pgmna IS NOT INITIALMOVE tstc-pgmna TO ti_includes-nome0 TO ti_includes-nivelAPPEND ti_includesELSE Se trata de una transaccioacuten de paraacutemetros Obtengo la transaccioacuten asociadaCALL FUNCTION RS_TRANSACTION_SINGLE_GETEXPORTINGparameter_tcode = p_tcodeIMPORTINGtcode = l_tcode

SELECT SINGLE INTO e_tstcFROM tstcWHERE tcode EQ l_tcode

IF sy-subrc EQ 0MOVE e_tstc-pgmna TO ti_includes-nome0 TO ti_includes-nivel

APPEND ti_includesELSE- LA TRANSACCIOacuteN NO EXISTEMESSAGE s893(pz) WITH La transaccioacuten p_tcode no existeENDIFENDIFELSE- LA TRANSACCIOacuteN NO EXISTEMESSAGE s893(pz) WITH La transaccioacuten p_tcode no existeSTOPENDIFENDIF

ENDFORM INICIALIZA_TABELA

amp---------------------------------------------------------------------amp Form armar_alvamp--------------------------------------------------------------------- Armo el ALV----------------------------------------------------------------------FORM armar_alv

DATAl_repid TYPE sy-repid

MOVE sy-repid TO l_repid

CALL FUNCTION REUSE_ALV_BLOCK_LIST_INITEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMAND

IF p_ue IS NOT INITIALPERFORM construir_catalogo_exitPERFORM definir_layout USING TI_USER_EXITCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGEPERFORM sort TABLES ti_sortUSING TI_USER_EXIT

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_USER_EXITit_events = ti_eventsit_sort = ti_sorti_text = User-exitTABLESt_outtab = ti_user_exitEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

PERFORM construir_catalogo_uexitPERFORM definir_layout USING TI_FINAL

CHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_UEXITPERFORM sort TABLES ti_sortUSING TI_FINAL

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FINALit_events = ti_eventsit_sort = ti_sorti_text = User-exit TxCMODTABLESt_outtab = ti_finalEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_badi IS NOT INITIALPERFORM construir_catalogo_badiPERFORM definir_layout USING TI_BADICHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BADIPERFORM sort TABLES ti_sortUSING TI_BADI

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_BADIit_events = ti_eventsit_sort = ti_sorti_text = BadisTABLESt_outtab = ti_badiEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_bte IS NOT INITIALPERFORM construir_catalogo_btePERFORM definir_layout USING TI_BTECHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BTEPERFORM sort TABLES ti_sortUSING TI_BTE

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layout

it_fieldcat = ti_cati_tabname = TI_BTEit_events = ti_eventsit_sort = ti_sorti_text = BTETABLESt_outtab = ti_bteEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_enh IS NOT INITIALPERFORM construir_catalogo_enhPERFORM definir_layout USING TI_ENHCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHPERFORM sort TABLES ti_sortUSING TI_ENH

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHit_events = ti_eventsit_sort = ti_sorti_text = ENHTABLESt_outtab = ti_enhEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

PERFORM construir_catalogo_enhobjPERFORM definir_layout USING TI_ENHOBJCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHOBJPERFORM sort TABLES ti_sortUSING TI_ENHOBJ

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHOBJit_events = ti_eventsit_sort = ti_sorti_text = ENHOBJTABLESt_outtab = ti_enhobjEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_sust IS NOT INITIALPERFORM construir_catalogo_sustPERFORM definir_layout USING TI_SUSTCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_SUSTPERFORM sort TABLES ti_sortUSING TI_SUST

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_SUSTit_events = ti_eventsit_sort = ti_sorti_text = SustitucionesTABLESt_outtab = ti_sustEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_val IS NOT INITIALPERFORM construir_catalogo_valPERFORM definir_layout USING TI_VALCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_VALPERFORM sort TABLES ti_sortUSING TI_VAL

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_VALit_events = ti_eventsit_sort = ti_sorti_text = ValidacionesTABLESt_outtab = ti_valEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_fdex IS NOT INITIALPERFORM construir_catalogo_fdexPERFORM definir_layout USING TI_FDEXCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_FDEX

PERFORM sort TABLES ti_sortUSING TI_FDEX

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FDEXit_events = ti_eventsit_sort = ti_sorti_text = Field-exitTABLESt_outtab = ti_fdexEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

ENDFORM armar_alv

amp---------------------------------------------------------------------amp Form construir_catalogo_EXITamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_exit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_USER_EXITi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03

CF X c_text_04

ENDFORM construir_catalogo_EXIT

amp---------------------------------------------------------------------amp Form asignar_campo_a_catalogoamp--------------------------------------------------------------------- Asignar campo al catalogo ALV----------------------------------------------------------------------FORM asignar_campo_a_catalogo TABLES pt_cat STRUCTURE wa_catUSING p_fieldname LIKE wa_cat-fieldnamep_key LIKE wa_cat-keyp_col_pos TYPE cp_fix_column LIKE wa_cat-fix_columnp_hotspot LIKE wa_cat-hotspotp_do_sum LIKE wa_cat-do_sump_input LIKE wa_cat-inputp_checkbox LIKE wa_cat-checkboxp_no_out LIKE wa_cat-no_outp_icon LIKE wa_cat-iconp_reptext_ddic LIKE wa_cat-reptext_ddic

STATICS l_col_pos LIKE sy-cucol

Asignar atributos de campo en el catalogo de cabecera ALVCLEAR wa_catREAD TABLE pt_cat INTO wa_catWITH KEY fieldname = p_fieldname

CHECK sy-subrc EQ 0

IF NOT p_reptext_ddic IS INITIALwa_cat-seltext_l = wa_cat-seltext_m =wa_cat-seltext_s = wa_cat-reptext_ddic = p_reptext_ddicENDIF

IF p_col_pos EQ X Inicializo el conteo para ordenar las columnasl_col_pos = 1ELSEADD 1 TO l_col_posENDIF

wa_cat-fieldname = p_fieldnamewa_cat-key = p_keywa_cat-col_pos = l_col_poswa_cat-fix_column = p_fix_columnwa_cat-hotspot = p_hotspotwa_cat-do_sum = p_do_sumwa_cat-edit = wa_cat-input = p_inputwa_cat-checkbox = p_checkboxwa_cat-no_out = p_no_outwa_cat-icon = p_icon

MODIFY pt_cat FROM wa_cat INDEX sy-tabix

ENDFORM asignar_campo_a_catalogo

amp---------------------------------------------------------------------amp Form definir_layoutamp--------------------------------------------------------------------- Definir atributos del layout de reporte----------------------------------------------------------------------FORM definir_layout USING p_table TYPE slis_layout_alv-box_tabnameCHANGING p_layout TYPE slis_layout_alv

CLEAR p_layout

IF p_table NE TI_CIMP Marco el campo para la seleccioacutenp_layout-box_fieldname = SELp_layout-box_tabname = p_tableENDIFp_layout-zebra = Xp_layout-colwidth_optimize = Xp_layout-no_vline = p_layout-no_colhead = p_layout-lights_condense = Xp_layout-detail_popup = Xp_layout-detail_initial_lines = Xp_layout-flexible_key = p_layout-key_hotspot = p_layout-confirmation_prompt = X

ENDFORM definir_layout

amp---------------------------------------------------------------------amp Form construir_eventosamp--------------------------------------------------------------------- Asignar eventos soportados----------------------------------------------------------------------FORM construir_eventos USING p_form LIKE wa_events-formDATAl_type(1) TYPE n

REFRESH ti_eventsCLEAR wa_events

ALV Simple Block appendl_type = 2

Buscar secciones para eventosCALL FUNCTION REUSE_ALV_EVENTS_GETEXPORTINGi_list_type = l_typeIMPORTINGet_events = ti_events

Leer evento TOP_OF_PAGEREAD TABLE ti_events WITH KEY name = slis_ev_top_of_pageINTO wa_events Asignar Rutina FORM TOP_OF_PAGE a eventoIF sy-subrc = 0MOVE p_form TO wa_events-formMODIFY ti_events FROM wa_events INDEX sy-tabixENDIF

ENDFORM construir_eventos

amp---------------------------------------------------------------------amp Form top_of_pageamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_user_exitWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUser-exit

ENDFORM top_of_page

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_UEXITamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_uexit

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_finalWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUSER-EXITs TxSMOD

ENDFORM TOP_OF_PAGE_UEXIT

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_FDEXamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_fdex

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_fdexWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incFIELD-EXITs

ENDFORM TOP_OF_PAGE_FDEX

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BADIamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_badi

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_badiWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBADIs

ENDFORM TOP_OF_PAGE_BADI

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BTEamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_bte

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_bteWRITE sy-tfill TO l_tfill_cant

CONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBTEs

ENDFORM TOP_OF_PAGE_BTE

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enh

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_enhWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENH

amp---------------------------------------------------------------------amp Form sortamp--------------------------------------------------------------------- Creo el sort del ALV (FM)---------------------------------------------------------------------- --gtPT_sort Tabla --gtP_tabname Nombre de la tabla----------------------------------------------------------------------FORM sort TABLES pt_sortUSING p_tabname TYPE any

CLEAR pt_sort wa_sortREFRESH pt_sort

CASE p_tabnameWHEN TI_SUST

wa_sort-fieldname = SUBSTIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = SUBSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = CONSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN TI_VAL

wa_sort-fieldname = VALIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = VALSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN TI_ENHOBJ

wa_sort-fieldname = ENHNAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = VERSIONwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN OTHERS

IF p_tabname NE TI_FINAL

wa_sort-fieldname = TIPOwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

IF p_tabname NE TI_FDEX

wa_sort-fieldname = NIVELwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = PROGRAMAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = LINEAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

ENDIF

ELSE

wa_sort-fieldname = NAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = MEMBERwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sortENDIFENDCASE

ENDFORM sort

amp---------------------------------------------------------------------amp Form mostrar_listadoamp--------------------------------------------------------------------- Mostrar listado ALV----------------------------------------------------------------------FORM mostrar_listado

wa_print-reserve_lines = 2

CALL FUNCTION REUSE_ALV_BLOCK_LIST_DISPLAY

EXPORTINGis_print = wa_printEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM mostrar_listado

amp---------------------------------------------------------------------amp Form user_commandamp--------------------------------------------------------------------- Evaluar acciones del usuario----------------------------------------------------------------------FORM user_command USING ucomm LIKE sy-ucommsfields TYPE slis_selfield

DATA l_break TYPE c

Rescatar el registro seleccionadoCASE sfields-tabnameWHEN TI_USER_EXITREAD TABLE ti_user_exit INDEX sfields-tabindexWHEN TI_BADIREAD TABLE ti_badi INDEX sfields-tabindexWHEN TI_BTEREAD TABLE ti_bte INDEX sfields-tabindexWHEN TI_ENHREAD TABLE ti_enh INDEX sfields-tabindexWHEN TI_ENHOBJREAD TABLE ti_enhobj INDEX sfields-tabindexWHEN TI_FDEXREAD TABLE ti_fdex INDEX sfields-tabindexWHEN TI_FINALREAD TABLE ti_final INDEX sfields-tabindexWHEN TI_SUSTREAD TABLE ti_sust INDEX sfields-tabindexWHEN TI_VALREAD TABLE ti_val INDEX sfields-tabindexWHEN TI_CIMPREAD TABLE ti_cimp INDEX sfields-tabindexENDCASE

Seleccion de opcionCASE ucomm DOUBLE CLICKWHEN ampIC1 Evaluar valor de campo seleccionadoCHECK NOT sfields-value IS INITIAL

CASE sfields-tabnameWHEN TI_USER_EXIT USER-EXITIF ti_user_exit-tipo EQ sfields-value(4)SEARCH ti_user_exit-cf FOR c_enhanceCHECK sy-subrc EQ 0PERFORM visualizar_exit USING ti_user_exit-programati_user_exit-cf

ELSEIF ti_user_exit-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_user_exit-programati_user_exit-lineaMOVE X TO l_breakELSEIF ti_user_exit-break EQ sfields-value(4)OR ti_user_exit-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_user_exit-programati_user_exit-lineati_user_exit-breakMOVE X TO l_breakENDIF

WHEN TI_FINAL USER-EXIT Tx CMODIF ti_final-name EQ sfields-valueCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = ti_final-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSEIF ti_final-include EQ sfields-valuePERFORM visualizar_linea USING ti_final-programa1MOVE X TO l_breakENDIF

WHEN TI_BADI BadiIF ti_badi-tipo EQ sfields-value(4)PERFORM visualizar_badi USING ti_badi-cfELSEIF ti_badi-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_badi-programati_badi-lineaMOVE X TO l_breakELSEIF ti_badi-break EQ sfields-value(4)OR ti_badi-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_badi-programati_badi-lineati_badi-breakMOVE X TO l_breakENDIF

WHEN TI_BTE BTEIF ti_bte-tipo EQ sfields-value(4)PERFORM fibf USING ti_bte-cfELSEIF ti_bte-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_bte-programati_bte-lineaMOVE X TO l_breakELSEIF ti_bte-break EQ sfields-value(4)OR ti_bte-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_bte-programati_bte-linea

ti_bte-breakMOVE X TO l_breakENDIF

WHEN TI_ENH Punto de ampliacioacutenIF ti_enh-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_enh-programati_enh-lineaMOVE X TO l_breakELSEIF ti_enh-tipo EQ sfields-value(4)PERFORM bi_se18 USING ti_enh-cfENDIF

WHEN TI_ENHOBJ Punto de ampliacioacutenIF ti_enhobj-enhname EQ sfields-value(30)PERFORM bi_se19 USING ti_enhobj-enhnameENDIF

WHEN TI_SUST SustitucionesIF ti_sust-substid EQ sfields-value(7) ORti_sust-subseqnr EQ sfields-value(3)PERFORM visualizar_sust USING ti_sust-substidti_sust-subseqnrENDIF

WHEN TI_VAL ValidacionesIF ti_val-valid EQ sfields-value(7) ORti_val-valseqnr EQ sfields-value(3)PERFORM visualizar_val USING ti_val-validti_val-valseqnrENDIF

WHEN TI_FDEX Field-exitIF ti_fdex-tipo EQ sfields-valueSUBMIT rsmodprf AND RETURNELSEIF ti_fdex-cf(60) EQ sfields-value Visualizo el field-exitCALL FUNCTION RS_FUNCTION_SHOWEXPORTINGfuncname = ti_fdex-cf

CALL FUNCTION RS_NAVIGATION_MONITORENDIF

WHEN TI_CIMP Customer implementation

CASE sfields-fieldnameWHEN ENHNAMEPERFORM bi_se19 USING ti_cimp-enhnameWHEN ENHINCLUDEPERFORM visualizar_enh_cf USING ti_cimp-enhinclude

WHEN OTHERS DO NOTHING ENDCASE

WHEN OTHERS DO NOTHING ENDCASE

WHEN OTHERS DO NOTHING ENDCASE

IF l_break IS NOT INITIAL AND sfields-tabname NE TI_CIMPWAIT UP TO 1 SECONDSPERFORM cargar_breakENDIFsfields-refresh = X

ENDFORM user_command

amp---------------------------------------------------------------------amp Form visualizar_lineaamp--------------------------------------------------------------------- Visualizo la linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_linea USING p_programa TYPE sy-repidp_linea

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_programaobject_type = c_typeposition = p_lineaEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM visualizar_linea

amp---------------------------------------------------------------------amp Form buscar_exitamp--------------------------------------------------------------------- Buscar USER-EXIT----------------------------------------------------------------------FORM buscar_exit

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN USER-EXITSEARCH ti_programa-cf FOR c_user_exit- SE ENCONTRO UN USER-EXIT Y SE VERIFICA SI LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS PERFORMSEARCH ti_programa-cf FOR c_performCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LAS ASIGNACIONESSEARCH ti_programa-cf FOR c_igualCHECK sy-subrc NE 0

CLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INIacuteCIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF

ENDFORM buscar_exit

amp---------------------------------------------------------------------amp Form buscar_badiamp--------------------------------------------------------------------- Buscar BADI----------------------------------------------------------------------FORM buscar_badi

DATAl_subrc LIKE sy-subrc

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BADISEARCH ti_programa-cf FOR c_badi- SE ENCONTRO UNA BADI Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

SEARCH ti_programa-cf FOR c_includeIF sy-subrc NE 0CLEAR l_subrcSEARCH ti_programa-cf FOR c_methodIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_funcao_2IF sy-subrc NE 0SEARCH ti_programa-cf FOR c_performIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_type_refIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_formMOVE 4 TO l_subrcENDIFENDIFENDIFENDIF

IF l_subrc EQ 0CLEAR ti_badi

- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIFELSECHECK p_handl IS NOT INITIAL- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA INSTANCIA DE- UNA BADISEARCH ti_programa-cf FOR c_handler- SE ENCONTRO UNA INSTANCIA DE IMPLEMENACIOacuteN Y SE VERIFICA SI LA LINEA- NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

SEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0CLEAR ti_badi- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIF

ENDFORM buscar_badi

amp---------------------------------------------------------------------amp Form buscar_bteamp--------------------------------------------------------------------- Buscar BTE----------------------------------------------------------------------FORM buscar_bte

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OPEN_FI_PERFORM

- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endform

CHECK sy-subrc NE 0

CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte1- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OUTBOUND_CALL

- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0

CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF

ENDFORM buscar_bte

amp---------------------------------------------------------------------amp Form repid_f4amp--------------------------------------------------------------------- Ejecuto el F4 para buscar programas----------------------------------------------------------------------FORM repid_f4

CALL FUNCTION REPOSITORY_INFO_SYSTEM_F4EXPORTINGobject_type = PROGobject_name = p_progsuppress_selection = XIMPORTINGobject_name_selected = p_progEXCEPTIONS

cancel = 1wrong_type = 2OTHERS = 3

ENDFORM repid_f4

amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf

DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

SEARCH p_cf FOR 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 INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

READ TABLE lt_cf INDEX 4

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

CHECK sy-subrc IS INITIAL

Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten

textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer

CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4

IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF

WHEN OTHERS Do Nothing ENDCASE

ENDFORM visualizar_badi

amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf

DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

CLEAR d010inc modsap modact

Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid

IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF

SEARCH p_cf FOR c_enhance

CHECK sy-subrc IS INITIAL

REFRESH lt_cf

l_cf = 500 - sy-fdpos

MOVE p_cf+sy-fdpos(l_cf) TO l_linea

SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3

TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS

Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _

Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit

CHECK sy-subrc IS INITIAL

Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM

modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3

ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname

CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ENDIF

ENDFORM visualizar_exit

amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit

DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo

DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe

DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE

CHECK p_fdex IS NOT INITIAL

CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe

MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex

IF p_prog IS NOT INITIAL

MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF

Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog

LOOP AT lt_d020s

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

REFRESH lt_d021s

Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4

Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X

SEARCH lt_d021s-fnam FOR -

IF sy-subrc IS INITIAL

MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum

Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname

APPEND lt_campo

ENDIF

ENDLOOPENDLOOP

CHECK lt_campo[] IS NOT INITIAL

SORT lt_campo BY repid dnum tabname fieldname

DELETE ADJACENT DUPLICATES FROM lt_campo

Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname

SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l

LOOP AT lt_dd03l

CLEAR tddir tddirs

SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname

CHECK sy-subrc IS INITIAL

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog

CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF

Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf

IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF

READ TABLE lt_fe WITH KEY cf = lt_fe-cf

CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP

LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex

ENDLOOP

ENDFORM buscar_field_exit

amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf

DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c

SEARCH p_cf FOR c_bte

IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ELSE

SEARCH p_cf FOR c_bte1

CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ENDIF

IF l_tipo IS NOT INITIAL

PERFORM visualizar_bte USING l_tipol_linea

ELSECALL TRANSACTION FIBFENDIF

ENDFORM fibf

amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT

EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM breakpoint

amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_badi

amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE

i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_bte

amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X TIPO X X c_text_05CF X c_text_04

ENDFORM construir_catalogo_FDEX

amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc

DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

CHECK lt_break[] IS NOT INITIAL

IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix

MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF

IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix

MOVEti_badi-linea TO l_lineti_badi-programa TO l_program

READ TABLE lt_break INTO wa_break

WITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF

IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix

MOVEti_bte-linea TO l_lineti_bte-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF

ENDFORM cargar_break

amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

DATAl_tabix TYPE sy-tabix

l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

SELECT SINGLE FROM d010incWHERE include = p_programa

IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF

MOVEp_linea TO l_linep_programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM asignar_break

amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit

IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF

PERFORM get_objects Get Objects

ENDFORM buscar_user_exit

amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects

DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area

DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix

SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog

IF sy-subrc = 0

SORT ti_tadir BY obj_name devclass

SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass

IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF

- Get UserExit namesLOOP AT ti_jtab

SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E

APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area

l_fname = ti_final-member

CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include

LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP

CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP

ENDFORM get_objects

amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X

ENDFORM construir_catalogo_uexit

amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------

FORM visualizar_ampliacion

DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF

SELECT SINGLE FROM modsapWHERE member EQ l_member

IF sy-subrc IS INITIAL

Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member

ENDIF

ENDFORM visualizar_ampliacion

amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea

RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs

REFRESH r_event r_procs

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event

SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs

SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE

ENDFORM visualizar_bte

amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE

----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c

DATAl_linea(500) TYPE c

DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

MOVE lt_fields-value TO l_linea

PERFORM visualizar_bte USING p_tipol_linea

ENDFORM cargar_bte

amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface

DATAl_linea(500) TYPE c

DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE

InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF

ENDFORM visualizar_interface

amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones

CHECK p_sust IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922

ENDFORM buscar_sustituciones

amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST

ENDFORM construir_catalogo_sust

amp---------------------------------------------------------------------

amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones

ENDFORM TOP_OF_PAGE_SUST

amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4

CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_sust

amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones

CHECK p_val IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931

ENDFORM buscar_validaciones

amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID

ENDFORM construir_catalogo_val

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones

ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2

CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_val

amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto

DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF

SELECT SINGLE FROM modsapWHERE name EQ l_name

IF sy-subrc IS INITIAL

MOVE l_name TO l_member

SELECT SINGLE FROM modactWHERE member EQ l_member

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF

ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF

ENDFORM visualizar_proyecto

amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel

APPEND ti_enh

ENDIFENDIFENDIF

ENDFORM buscar_punto_ampliacioacuten

amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_enh

amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh

DATA l_obj_name TYPE enhobj-obj_name

DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name

CHECK p_enh IS NOT INITIAL

IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF

REFRESH lt_obj_name

LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP

SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name

ENDFORM buscar_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X

ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME

ENDFORM construir_catalogo_enhobj

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENHOBJ

amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM bi_se19

amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro

CLEAR ti_bdcdatati_bdcdata-program = program

ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata

ENDFORM BDC_DYNPRO

amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval

CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata

ENDFORM BDC_FIELD

amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa

DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)

CHECK ti_gb31t[] IS NOT INITIAL

DO

Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2

IF l_exit EQ XEXITENDIF

CHECK l_exit IS INITIAL

Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND

CHECK l_boolpool IS NOT INITIAL

MOVE l_boolpool TO l_repid

Visualizo el programaPERFORM visualizar_linea USING l_repid01

ENDDO

ENDFORM visualizar_programa

amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope

STATICS l_flag TYPE c

DATA l_tit(65) TYPE c

CHECK l_flag IS INITIAL

l_flag = X

WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline

4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM texto_tope

amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf

DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off

CHECK l_off IS NOT INITIAL

ADD 7 TO l_offl_cf = 500 - l_off

SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_enhspotname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1

invalid_object_type = 2OTHERS = 3

ENDFORM bi_se18

amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit

DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE

DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE

MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE

MOVE lt_fields-value TO l_nameENDIF

Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_

LOOP AT lt_tfdir

CLEARl_group l_include l_namespace l_str_area

l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl

IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl

CHECK sy-subrc IS INITIAL

Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP

CHECK l_flag IS INITIAL

La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value

ENDFORM visualizar_fm_exit

amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter

tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten

ENDFORM def_text_parameter

amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones

Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt

Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt

Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt

icon_create RESULT name text infoicon_create

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 11: buscar_ampliaciones FOROSAP

LOOP AT ti_programa

IF p_ue EQ XPERFORM buscar_exitPERFORM busca_enhancementsENDIF

IF p_badi EQ XPERFORM buscar_badiENDIF

IF p_bte EQ XPERFORM buscar_bteENDIF

IF p_enh EQ XPERFORM buscar_punto_ampliacionENDIF

ENDLOOPENDLOOP

ENDFORM BUSCA_USER_EXIT_BADI_BTE

amp---------------------------------------------------------------------amp Form BUSCA_ENHANCEMENTSamp--------------------------------------------------------------------- Busca las llamadas a los USER-EXIT----------------------------------------------------------------------FORM busca_enhancements

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE EN ALGUN ENHANCEMENTSEARCH ti_programa-cf FOR c_enhance- SE ENCONTRO EL ENHANCEMENT Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentarioCLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF

ENDFORM BUSCA_ENHANCEMENTS

amp---------------------------------------------------------------------amp Form EXIBE_USER_EXITamp--------------------------------------------------------------------- Muestra los datos----------------------------------------------------------------------FORM exibe_user_exit

PERFORM armar_alv

PERFORM mostrar_listado

ENDFORM EXIBE_USER_EXIT

amp---------------------------------------------------------------------amp Form PROCURA_INCLUDEamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_include

CLEAR vg_palavra

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN INCLUDESEARCH ti_programa-cf FOR c_include- SE ENCONTRO EN EL INCLUDE Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN STRUCTURESEARCH ti_programa-cf FOR c_struct

IF sy-subrc IS INITIALEXITENDIF

- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DEL INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF NOT vg_caracter IS INITIAL- VERIFICA SI NO ES FIN DE COMANDOIF vg_caracter EQ c_pontoEXITENDIF- ARMA PALABRACONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACIONTRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_includeCLEAR vg_palavraENDIFENDIFENDDO- GRABA NOMBRE DEL INCLUDE PARA FUTURA BUSQUEDA POR USER EXITREAD TABLE ti_includes WITH KEY nome = vg_palavraIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_palavra TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIF

ENDIF

ENDFORM PROCURA_INCLUDE

amp---------------------------------------------------------------------amp Form PROCURA_FUNCAOamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_funcao

CLEAR vg_conta_aspavg_palavra

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA FUNCIONSEARCH ti_programa-cf FOR c_funcao_2- SE ENCONTRO UNA FUNCION Y LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DE LA INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF NOT vg_caracter IS INITIAL- VERIFICA SI NO ES FIN DE COMANDOIF vg_caracter EQ c_aspaADD 1 TO vg_conta_aspaIF vg_conta_aspa EQ 2EXITENDIFENDIF- ARMA PALABRACONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACIONTRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_funcao_1CLEAR vg_palavraENDIFENDIFENDDO- BUSCA NOMBRE DE LA FUNCION PARA FUTURA BUSQUEDA POR USER EXITCLEAR vg_pnameSELECT SINGLE pnameINTO vg_pnameFROM tfdirWHERE funcname EQ vg_palavraIF sy-subrc EQ 0

READ TABLE ti_includes WITH KEY nome = vg_pnameIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_pname TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIF

ENDIF

ENDIF

ENDFORM PROCURA_FUNCAO

amp---------------------------------------------------------------------amp Form VERIFICA_INCLUDE_FUNCAO_SUBMITamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM verifica_include_funcao_submit

CHECK p_ue IS NOT INITIAL OR p_badi IS NOT INITIALOR p_bte IS NOT INITIAL OR p_enh IS NOT INITIAL

LOOP AT ti_includes

ADD 1 TO vg_contadorDESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfillMOVE ti_includes-nivel TO vg_nivelADD 1 TO vg_nivel

- BORRA TABLA INTERNAREFRESH ti_programa

- REALIZA LECTURA DE INCLUDEFUNCION ALMACENANDO EN TABLA INTERNAREAD REPORT ti_includes-nome INTO ti_programa

LOOP AT ti_programa

- PROCURA POR INCLUDESIF p_incl EQ c_xPERFORM procura_includeENDIF- PROCURA POR FUNCIONIF p_func EQ c_xPERFORM procura_funcaoENDIF- PROCURA POR SUBMITIF p_submit EQ c_xPERFORM procura_submitENDIF

ENDLOOP

ENDLOOP

ENDFORM VERIFICA_INCLUDE_FUNCAO_SUBMIT

amp---------------------------------------------------------------------amp Form EVITAR_TIME_OUTamp--------------------------------------------------------------------- Evito el TIME OUT visualizando un mensaje----------------------------------------------------------------------FORM evitar_time_out USING p_tfill LIKE sy-tfill

DATAvl_total(10) TYPE n

vl_atual(10) TYPE nl_tout LIKE sy-timlol_time(10) TYPE c

GET TIME FIELD l_tout

l_tout = l_tout - w_tini

MOVEp_tfill TO vl_totalvg_contador TO vl_atual

SHIFT vl_total LEFT DELETING LEADING 0SHIFT vl_atual LEFT DELETING LEADING 0WRITE l_tout TO l_time

CONCATENATE Tpo l_time Total vl_total Actual vl_atualINTO vg_textoSEPARATED BY space

CALL FUNCTION SAPGUI_PROGRESS_INDICATOREXPORTINGtext = vg_texto

ENDFORM EVITAR_TIME_OUT

amp---------------------------------------------------------------------amp Form PROCURA_SUBMITamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_submit

CLEAR vg_conta_espaco vg_palavra vg_ini_contagem

- VERIFICA SI LA LINEA DEL PROGRAMA EXISTE ALGUN INCLUDESEARCH ti_programa-cf FOR c_submit- SE ENCONTRO EN EL INCLUDE Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DEL INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF vg_ini_contagem EQ c_x AND vg_caracter IS INITIALADD 1 TO vg_conta_espacoENDIF

IF NOT vg_caracter IS INITIALMOVE c_x TO vg_ini_contagemIF vg_caracter EQ c_pontoEXITENDIF- ARMA PALABRAIF vg_conta_espaco LT 2CONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACION

TRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_submitCLEAR vg_palavraENDIFELSEEXITENDIFENDIFENDDO- BUSCA NOMBRE DE LA FUNCION PARA FUTURA BUSQUEDA POR USER EXITREAD TABLE ti_includes WITH KEY nome = vg_palavraIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_palavra TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIFENDIF

ENDFORM PROCURA_SUBMIT

amp---------------------------------------------------------------------amp Form CONSISTI_PARAMETROSamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM consisti_parametros

IF p_nivel IS INITIALMOVE 1 TO p_nivelENDIF

IF p_prog IS INITIAL AND p_tcode IS INITIAL- EL NOMBRE DEL PROGRAMA Y EL NOMBRE DE LA TRANSACCION NO PUEDEN SER- NULOS UNO DE ELLOS DEBE SER INFORMADOMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e01STOPENDIF

IF NOT p_prog IS INITIAL AND NOT p_tcode IS INITIAL- SE SOLICITA AL USUARIO QUE INFORME NOMBRE DE PROGRAMA O TRANSACCIONMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e02STOPENDIF

IF p_ue IS INITIAL AND p_badi IS INITIAL AND p_bte IS INITIALAND p_sust IS INITIAL AND p_val IS INITIAL AND p_fdex IS INITIALAND p_enh IS INITIAL- SE SOLICITA AL USUARIO QUE INFORME UN TIPO DE MEJORAMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e03STOPENDIF

ENDFORM CONSISTI_PARAMETROS

amp---------------------------------------------------------------------

amp Form INICIALIZA_TABELAamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM inicializa_tabela

DATAe_tstc TYPE tstcl_tcode TYPE sy-tcode

REFRESH ti_includes

IF NOT p_prog IS INITIAL

MOVE p_prog TO ti_includes-nome0 TO ti_includes-nivelAPPEND ti_includes

- BUSCO EL PROGRAMAREAD REPORT ti_includes-nome INTO ti_programa

IF sy-subrc EQ 0REFRESH ti_programaELSE- EL PROGRAMA NO EXISTEMESSAGE s893(pz) WITH El programa p_prog no existeSTOPENDIF

ELSEIF NOT p_tcode IS INITIAL

SELECT SINGLE FROM tstcWHERE tcode EQ p_tcode

IF sy-subrc EQ 0

IF tstc-pgmna IS NOT INITIALMOVE tstc-pgmna TO ti_includes-nome0 TO ti_includes-nivelAPPEND ti_includesELSE Se trata de una transaccioacuten de paraacutemetros Obtengo la transaccioacuten asociadaCALL FUNCTION RS_TRANSACTION_SINGLE_GETEXPORTINGparameter_tcode = p_tcodeIMPORTINGtcode = l_tcode

SELECT SINGLE INTO e_tstcFROM tstcWHERE tcode EQ l_tcode

IF sy-subrc EQ 0MOVE e_tstc-pgmna TO ti_includes-nome0 TO ti_includes-nivel

APPEND ti_includesELSE- LA TRANSACCIOacuteN NO EXISTEMESSAGE s893(pz) WITH La transaccioacuten p_tcode no existeENDIFENDIFELSE- LA TRANSACCIOacuteN NO EXISTEMESSAGE s893(pz) WITH La transaccioacuten p_tcode no existeSTOPENDIFENDIF

ENDFORM INICIALIZA_TABELA

amp---------------------------------------------------------------------amp Form armar_alvamp--------------------------------------------------------------------- Armo el ALV----------------------------------------------------------------------FORM armar_alv

DATAl_repid TYPE sy-repid

MOVE sy-repid TO l_repid

CALL FUNCTION REUSE_ALV_BLOCK_LIST_INITEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMAND

IF p_ue IS NOT INITIALPERFORM construir_catalogo_exitPERFORM definir_layout USING TI_USER_EXITCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGEPERFORM sort TABLES ti_sortUSING TI_USER_EXIT

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_USER_EXITit_events = ti_eventsit_sort = ti_sorti_text = User-exitTABLESt_outtab = ti_user_exitEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

PERFORM construir_catalogo_uexitPERFORM definir_layout USING TI_FINAL

CHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_UEXITPERFORM sort TABLES ti_sortUSING TI_FINAL

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FINALit_events = ti_eventsit_sort = ti_sorti_text = User-exit TxCMODTABLESt_outtab = ti_finalEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_badi IS NOT INITIALPERFORM construir_catalogo_badiPERFORM definir_layout USING TI_BADICHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BADIPERFORM sort TABLES ti_sortUSING TI_BADI

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_BADIit_events = ti_eventsit_sort = ti_sorti_text = BadisTABLESt_outtab = ti_badiEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_bte IS NOT INITIALPERFORM construir_catalogo_btePERFORM definir_layout USING TI_BTECHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BTEPERFORM sort TABLES ti_sortUSING TI_BTE

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layout

it_fieldcat = ti_cati_tabname = TI_BTEit_events = ti_eventsit_sort = ti_sorti_text = BTETABLESt_outtab = ti_bteEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_enh IS NOT INITIALPERFORM construir_catalogo_enhPERFORM definir_layout USING TI_ENHCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHPERFORM sort TABLES ti_sortUSING TI_ENH

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHit_events = ti_eventsit_sort = ti_sorti_text = ENHTABLESt_outtab = ti_enhEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

PERFORM construir_catalogo_enhobjPERFORM definir_layout USING TI_ENHOBJCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHOBJPERFORM sort TABLES ti_sortUSING TI_ENHOBJ

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHOBJit_events = ti_eventsit_sort = ti_sorti_text = ENHOBJTABLESt_outtab = ti_enhobjEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_sust IS NOT INITIALPERFORM construir_catalogo_sustPERFORM definir_layout USING TI_SUSTCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_SUSTPERFORM sort TABLES ti_sortUSING TI_SUST

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_SUSTit_events = ti_eventsit_sort = ti_sorti_text = SustitucionesTABLESt_outtab = ti_sustEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_val IS NOT INITIALPERFORM construir_catalogo_valPERFORM definir_layout USING TI_VALCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_VALPERFORM sort TABLES ti_sortUSING TI_VAL

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_VALit_events = ti_eventsit_sort = ti_sorti_text = ValidacionesTABLESt_outtab = ti_valEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_fdex IS NOT INITIALPERFORM construir_catalogo_fdexPERFORM definir_layout USING TI_FDEXCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_FDEX

PERFORM sort TABLES ti_sortUSING TI_FDEX

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FDEXit_events = ti_eventsit_sort = ti_sorti_text = Field-exitTABLESt_outtab = ti_fdexEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

ENDFORM armar_alv

amp---------------------------------------------------------------------amp Form construir_catalogo_EXITamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_exit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_USER_EXITi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03

CF X c_text_04

ENDFORM construir_catalogo_EXIT

amp---------------------------------------------------------------------amp Form asignar_campo_a_catalogoamp--------------------------------------------------------------------- Asignar campo al catalogo ALV----------------------------------------------------------------------FORM asignar_campo_a_catalogo TABLES pt_cat STRUCTURE wa_catUSING p_fieldname LIKE wa_cat-fieldnamep_key LIKE wa_cat-keyp_col_pos TYPE cp_fix_column LIKE wa_cat-fix_columnp_hotspot LIKE wa_cat-hotspotp_do_sum LIKE wa_cat-do_sump_input LIKE wa_cat-inputp_checkbox LIKE wa_cat-checkboxp_no_out LIKE wa_cat-no_outp_icon LIKE wa_cat-iconp_reptext_ddic LIKE wa_cat-reptext_ddic

STATICS l_col_pos LIKE sy-cucol

Asignar atributos de campo en el catalogo de cabecera ALVCLEAR wa_catREAD TABLE pt_cat INTO wa_catWITH KEY fieldname = p_fieldname

CHECK sy-subrc EQ 0

IF NOT p_reptext_ddic IS INITIALwa_cat-seltext_l = wa_cat-seltext_m =wa_cat-seltext_s = wa_cat-reptext_ddic = p_reptext_ddicENDIF

IF p_col_pos EQ X Inicializo el conteo para ordenar las columnasl_col_pos = 1ELSEADD 1 TO l_col_posENDIF

wa_cat-fieldname = p_fieldnamewa_cat-key = p_keywa_cat-col_pos = l_col_poswa_cat-fix_column = p_fix_columnwa_cat-hotspot = p_hotspotwa_cat-do_sum = p_do_sumwa_cat-edit = wa_cat-input = p_inputwa_cat-checkbox = p_checkboxwa_cat-no_out = p_no_outwa_cat-icon = p_icon

MODIFY pt_cat FROM wa_cat INDEX sy-tabix

ENDFORM asignar_campo_a_catalogo

amp---------------------------------------------------------------------amp Form definir_layoutamp--------------------------------------------------------------------- Definir atributos del layout de reporte----------------------------------------------------------------------FORM definir_layout USING p_table TYPE slis_layout_alv-box_tabnameCHANGING p_layout TYPE slis_layout_alv

CLEAR p_layout

IF p_table NE TI_CIMP Marco el campo para la seleccioacutenp_layout-box_fieldname = SELp_layout-box_tabname = p_tableENDIFp_layout-zebra = Xp_layout-colwidth_optimize = Xp_layout-no_vline = p_layout-no_colhead = p_layout-lights_condense = Xp_layout-detail_popup = Xp_layout-detail_initial_lines = Xp_layout-flexible_key = p_layout-key_hotspot = p_layout-confirmation_prompt = X

ENDFORM definir_layout

amp---------------------------------------------------------------------amp Form construir_eventosamp--------------------------------------------------------------------- Asignar eventos soportados----------------------------------------------------------------------FORM construir_eventos USING p_form LIKE wa_events-formDATAl_type(1) TYPE n

REFRESH ti_eventsCLEAR wa_events

ALV Simple Block appendl_type = 2

Buscar secciones para eventosCALL FUNCTION REUSE_ALV_EVENTS_GETEXPORTINGi_list_type = l_typeIMPORTINGet_events = ti_events

Leer evento TOP_OF_PAGEREAD TABLE ti_events WITH KEY name = slis_ev_top_of_pageINTO wa_events Asignar Rutina FORM TOP_OF_PAGE a eventoIF sy-subrc = 0MOVE p_form TO wa_events-formMODIFY ti_events FROM wa_events INDEX sy-tabixENDIF

ENDFORM construir_eventos

amp---------------------------------------------------------------------amp Form top_of_pageamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_user_exitWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUser-exit

ENDFORM top_of_page

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_UEXITamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_uexit

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_finalWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUSER-EXITs TxSMOD

ENDFORM TOP_OF_PAGE_UEXIT

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_FDEXamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_fdex

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_fdexWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incFIELD-EXITs

ENDFORM TOP_OF_PAGE_FDEX

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BADIamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_badi

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_badiWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBADIs

ENDFORM TOP_OF_PAGE_BADI

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BTEamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_bte

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_bteWRITE sy-tfill TO l_tfill_cant

CONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBTEs

ENDFORM TOP_OF_PAGE_BTE

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enh

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_enhWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENH

amp---------------------------------------------------------------------amp Form sortamp--------------------------------------------------------------------- Creo el sort del ALV (FM)---------------------------------------------------------------------- --gtPT_sort Tabla --gtP_tabname Nombre de la tabla----------------------------------------------------------------------FORM sort TABLES pt_sortUSING p_tabname TYPE any

CLEAR pt_sort wa_sortREFRESH pt_sort

CASE p_tabnameWHEN TI_SUST

wa_sort-fieldname = SUBSTIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = SUBSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = CONSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN TI_VAL

wa_sort-fieldname = VALIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = VALSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN TI_ENHOBJ

wa_sort-fieldname = ENHNAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = VERSIONwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN OTHERS

IF p_tabname NE TI_FINAL

wa_sort-fieldname = TIPOwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

IF p_tabname NE TI_FDEX

wa_sort-fieldname = NIVELwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = PROGRAMAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = LINEAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

ENDIF

ELSE

wa_sort-fieldname = NAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = MEMBERwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sortENDIFENDCASE

ENDFORM sort

amp---------------------------------------------------------------------amp Form mostrar_listadoamp--------------------------------------------------------------------- Mostrar listado ALV----------------------------------------------------------------------FORM mostrar_listado

wa_print-reserve_lines = 2

CALL FUNCTION REUSE_ALV_BLOCK_LIST_DISPLAY

EXPORTINGis_print = wa_printEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM mostrar_listado

amp---------------------------------------------------------------------amp Form user_commandamp--------------------------------------------------------------------- Evaluar acciones del usuario----------------------------------------------------------------------FORM user_command USING ucomm LIKE sy-ucommsfields TYPE slis_selfield

DATA l_break TYPE c

Rescatar el registro seleccionadoCASE sfields-tabnameWHEN TI_USER_EXITREAD TABLE ti_user_exit INDEX sfields-tabindexWHEN TI_BADIREAD TABLE ti_badi INDEX sfields-tabindexWHEN TI_BTEREAD TABLE ti_bte INDEX sfields-tabindexWHEN TI_ENHREAD TABLE ti_enh INDEX sfields-tabindexWHEN TI_ENHOBJREAD TABLE ti_enhobj INDEX sfields-tabindexWHEN TI_FDEXREAD TABLE ti_fdex INDEX sfields-tabindexWHEN TI_FINALREAD TABLE ti_final INDEX sfields-tabindexWHEN TI_SUSTREAD TABLE ti_sust INDEX sfields-tabindexWHEN TI_VALREAD TABLE ti_val INDEX sfields-tabindexWHEN TI_CIMPREAD TABLE ti_cimp INDEX sfields-tabindexENDCASE

Seleccion de opcionCASE ucomm DOUBLE CLICKWHEN ampIC1 Evaluar valor de campo seleccionadoCHECK NOT sfields-value IS INITIAL

CASE sfields-tabnameWHEN TI_USER_EXIT USER-EXITIF ti_user_exit-tipo EQ sfields-value(4)SEARCH ti_user_exit-cf FOR c_enhanceCHECK sy-subrc EQ 0PERFORM visualizar_exit USING ti_user_exit-programati_user_exit-cf

ELSEIF ti_user_exit-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_user_exit-programati_user_exit-lineaMOVE X TO l_breakELSEIF ti_user_exit-break EQ sfields-value(4)OR ti_user_exit-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_user_exit-programati_user_exit-lineati_user_exit-breakMOVE X TO l_breakENDIF

WHEN TI_FINAL USER-EXIT Tx CMODIF ti_final-name EQ sfields-valueCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = ti_final-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSEIF ti_final-include EQ sfields-valuePERFORM visualizar_linea USING ti_final-programa1MOVE X TO l_breakENDIF

WHEN TI_BADI BadiIF ti_badi-tipo EQ sfields-value(4)PERFORM visualizar_badi USING ti_badi-cfELSEIF ti_badi-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_badi-programati_badi-lineaMOVE X TO l_breakELSEIF ti_badi-break EQ sfields-value(4)OR ti_badi-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_badi-programati_badi-lineati_badi-breakMOVE X TO l_breakENDIF

WHEN TI_BTE BTEIF ti_bte-tipo EQ sfields-value(4)PERFORM fibf USING ti_bte-cfELSEIF ti_bte-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_bte-programati_bte-lineaMOVE X TO l_breakELSEIF ti_bte-break EQ sfields-value(4)OR ti_bte-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_bte-programati_bte-linea

ti_bte-breakMOVE X TO l_breakENDIF

WHEN TI_ENH Punto de ampliacioacutenIF ti_enh-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_enh-programati_enh-lineaMOVE X TO l_breakELSEIF ti_enh-tipo EQ sfields-value(4)PERFORM bi_se18 USING ti_enh-cfENDIF

WHEN TI_ENHOBJ Punto de ampliacioacutenIF ti_enhobj-enhname EQ sfields-value(30)PERFORM bi_se19 USING ti_enhobj-enhnameENDIF

WHEN TI_SUST SustitucionesIF ti_sust-substid EQ sfields-value(7) ORti_sust-subseqnr EQ sfields-value(3)PERFORM visualizar_sust USING ti_sust-substidti_sust-subseqnrENDIF

WHEN TI_VAL ValidacionesIF ti_val-valid EQ sfields-value(7) ORti_val-valseqnr EQ sfields-value(3)PERFORM visualizar_val USING ti_val-validti_val-valseqnrENDIF

WHEN TI_FDEX Field-exitIF ti_fdex-tipo EQ sfields-valueSUBMIT rsmodprf AND RETURNELSEIF ti_fdex-cf(60) EQ sfields-value Visualizo el field-exitCALL FUNCTION RS_FUNCTION_SHOWEXPORTINGfuncname = ti_fdex-cf

CALL FUNCTION RS_NAVIGATION_MONITORENDIF

WHEN TI_CIMP Customer implementation

CASE sfields-fieldnameWHEN ENHNAMEPERFORM bi_se19 USING ti_cimp-enhnameWHEN ENHINCLUDEPERFORM visualizar_enh_cf USING ti_cimp-enhinclude

WHEN OTHERS DO NOTHING ENDCASE

WHEN OTHERS DO NOTHING ENDCASE

WHEN OTHERS DO NOTHING ENDCASE

IF l_break IS NOT INITIAL AND sfields-tabname NE TI_CIMPWAIT UP TO 1 SECONDSPERFORM cargar_breakENDIFsfields-refresh = X

ENDFORM user_command

amp---------------------------------------------------------------------amp Form visualizar_lineaamp--------------------------------------------------------------------- Visualizo la linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_linea USING p_programa TYPE sy-repidp_linea

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_programaobject_type = c_typeposition = p_lineaEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM visualizar_linea

amp---------------------------------------------------------------------amp Form buscar_exitamp--------------------------------------------------------------------- Buscar USER-EXIT----------------------------------------------------------------------FORM buscar_exit

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN USER-EXITSEARCH ti_programa-cf FOR c_user_exit- SE ENCONTRO UN USER-EXIT Y SE VERIFICA SI LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS PERFORMSEARCH ti_programa-cf FOR c_performCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LAS ASIGNACIONESSEARCH ti_programa-cf FOR c_igualCHECK sy-subrc NE 0

CLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INIacuteCIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF

ENDFORM buscar_exit

amp---------------------------------------------------------------------amp Form buscar_badiamp--------------------------------------------------------------------- Buscar BADI----------------------------------------------------------------------FORM buscar_badi

DATAl_subrc LIKE sy-subrc

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BADISEARCH ti_programa-cf FOR c_badi- SE ENCONTRO UNA BADI Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

SEARCH ti_programa-cf FOR c_includeIF sy-subrc NE 0CLEAR l_subrcSEARCH ti_programa-cf FOR c_methodIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_funcao_2IF sy-subrc NE 0SEARCH ti_programa-cf FOR c_performIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_type_refIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_formMOVE 4 TO l_subrcENDIFENDIFENDIFENDIF

IF l_subrc EQ 0CLEAR ti_badi

- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIFELSECHECK p_handl IS NOT INITIAL- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA INSTANCIA DE- UNA BADISEARCH ti_programa-cf FOR c_handler- SE ENCONTRO UNA INSTANCIA DE IMPLEMENACIOacuteN Y SE VERIFICA SI LA LINEA- NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

SEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0CLEAR ti_badi- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIF

ENDFORM buscar_badi

amp---------------------------------------------------------------------amp Form buscar_bteamp--------------------------------------------------------------------- Buscar BTE----------------------------------------------------------------------FORM buscar_bte

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OPEN_FI_PERFORM

- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endform

CHECK sy-subrc NE 0

CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte1- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OUTBOUND_CALL

- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0

CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF

ENDFORM buscar_bte

amp---------------------------------------------------------------------amp Form repid_f4amp--------------------------------------------------------------------- Ejecuto el F4 para buscar programas----------------------------------------------------------------------FORM repid_f4

CALL FUNCTION REPOSITORY_INFO_SYSTEM_F4EXPORTINGobject_type = PROGobject_name = p_progsuppress_selection = XIMPORTINGobject_name_selected = p_progEXCEPTIONS

cancel = 1wrong_type = 2OTHERS = 3

ENDFORM repid_f4

amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf

DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

SEARCH p_cf FOR 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 INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

READ TABLE lt_cf INDEX 4

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

CHECK sy-subrc IS INITIAL

Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten

textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer

CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4

IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF

WHEN OTHERS Do Nothing ENDCASE

ENDFORM visualizar_badi

amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf

DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

CLEAR d010inc modsap modact

Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid

IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF

SEARCH p_cf FOR c_enhance

CHECK sy-subrc IS INITIAL

REFRESH lt_cf

l_cf = 500 - sy-fdpos

MOVE p_cf+sy-fdpos(l_cf) TO l_linea

SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3

TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS

Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _

Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit

CHECK sy-subrc IS INITIAL

Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM

modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3

ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname

CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ENDIF

ENDFORM visualizar_exit

amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit

DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo

DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe

DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE

CHECK p_fdex IS NOT INITIAL

CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe

MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex

IF p_prog IS NOT INITIAL

MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF

Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog

LOOP AT lt_d020s

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

REFRESH lt_d021s

Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4

Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X

SEARCH lt_d021s-fnam FOR -

IF sy-subrc IS INITIAL

MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum

Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname

APPEND lt_campo

ENDIF

ENDLOOPENDLOOP

CHECK lt_campo[] IS NOT INITIAL

SORT lt_campo BY repid dnum tabname fieldname

DELETE ADJACENT DUPLICATES FROM lt_campo

Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname

SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l

LOOP AT lt_dd03l

CLEAR tddir tddirs

SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname

CHECK sy-subrc IS INITIAL

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog

CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF

Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf

IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF

READ TABLE lt_fe WITH KEY cf = lt_fe-cf

CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP

LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex

ENDLOOP

ENDFORM buscar_field_exit

amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf

DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c

SEARCH p_cf FOR c_bte

IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ELSE

SEARCH p_cf FOR c_bte1

CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ENDIF

IF l_tipo IS NOT INITIAL

PERFORM visualizar_bte USING l_tipol_linea

ELSECALL TRANSACTION FIBFENDIF

ENDFORM fibf

amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT

EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM breakpoint

amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_badi

amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE

i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_bte

amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X TIPO X X c_text_05CF X c_text_04

ENDFORM construir_catalogo_FDEX

amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc

DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

CHECK lt_break[] IS NOT INITIAL

IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix

MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF

IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix

MOVEti_badi-linea TO l_lineti_badi-programa TO l_program

READ TABLE lt_break INTO wa_break

WITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF

IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix

MOVEti_bte-linea TO l_lineti_bte-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF

ENDFORM cargar_break

amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

DATAl_tabix TYPE sy-tabix

l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

SELECT SINGLE FROM d010incWHERE include = p_programa

IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF

MOVEp_linea TO l_linep_programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM asignar_break

amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit

IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF

PERFORM get_objects Get Objects

ENDFORM buscar_user_exit

amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects

DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area

DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix

SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog

IF sy-subrc = 0

SORT ti_tadir BY obj_name devclass

SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass

IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF

- Get UserExit namesLOOP AT ti_jtab

SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E

APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area

l_fname = ti_final-member

CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include

LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP

CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP

ENDFORM get_objects

amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X

ENDFORM construir_catalogo_uexit

amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------

FORM visualizar_ampliacion

DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF

SELECT SINGLE FROM modsapWHERE member EQ l_member

IF sy-subrc IS INITIAL

Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member

ENDIF

ENDFORM visualizar_ampliacion

amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea

RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs

REFRESH r_event r_procs

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event

SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs

SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE

ENDFORM visualizar_bte

amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE

----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c

DATAl_linea(500) TYPE c

DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

MOVE lt_fields-value TO l_linea

PERFORM visualizar_bte USING p_tipol_linea

ENDFORM cargar_bte

amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface

DATAl_linea(500) TYPE c

DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE

InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF

ENDFORM visualizar_interface

amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones

CHECK p_sust IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922

ENDFORM buscar_sustituciones

amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST

ENDFORM construir_catalogo_sust

amp---------------------------------------------------------------------

amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones

ENDFORM TOP_OF_PAGE_SUST

amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4

CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_sust

amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones

CHECK p_val IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931

ENDFORM buscar_validaciones

amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID

ENDFORM construir_catalogo_val

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones

ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2

CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_val

amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto

DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF

SELECT SINGLE FROM modsapWHERE name EQ l_name

IF sy-subrc IS INITIAL

MOVE l_name TO l_member

SELECT SINGLE FROM modactWHERE member EQ l_member

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF

ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF

ENDFORM visualizar_proyecto

amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel

APPEND ti_enh

ENDIFENDIFENDIF

ENDFORM buscar_punto_ampliacioacuten

amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_enh

amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh

DATA l_obj_name TYPE enhobj-obj_name

DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name

CHECK p_enh IS NOT INITIAL

IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF

REFRESH lt_obj_name

LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP

SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name

ENDFORM buscar_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X

ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME

ENDFORM construir_catalogo_enhobj

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENHOBJ

amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM bi_se19

amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro

CLEAR ti_bdcdatati_bdcdata-program = program

ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata

ENDFORM BDC_DYNPRO

amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval

CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata

ENDFORM BDC_FIELD

amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa

DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)

CHECK ti_gb31t[] IS NOT INITIAL

DO

Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2

IF l_exit EQ XEXITENDIF

CHECK l_exit IS INITIAL

Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND

CHECK l_boolpool IS NOT INITIAL

MOVE l_boolpool TO l_repid

Visualizo el programaPERFORM visualizar_linea USING l_repid01

ENDDO

ENDFORM visualizar_programa

amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope

STATICS l_flag TYPE c

DATA l_tit(65) TYPE c

CHECK l_flag IS INITIAL

l_flag = X

WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline

4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM texto_tope

amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf

DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off

CHECK l_off IS NOT INITIAL

ADD 7 TO l_offl_cf = 500 - l_off

SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_enhspotname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1

invalid_object_type = 2OTHERS = 3

ENDFORM bi_se18

amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit

DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE

DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE

MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE

MOVE lt_fields-value TO l_nameENDIF

Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_

LOOP AT lt_tfdir

CLEARl_group l_include l_namespace l_str_area

l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl

IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl

CHECK sy-subrc IS INITIAL

Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP

CHECK l_flag IS INITIAL

La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value

ENDFORM visualizar_fm_exit

amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter

tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten

ENDFORM def_text_parameter

amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones

Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt

Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt

Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt

icon_create RESULT name text infoicon_create

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 12: buscar_ampliaciones FOROSAP

PERFORM mostrar_listado

ENDFORM EXIBE_USER_EXIT

amp---------------------------------------------------------------------amp Form PROCURA_INCLUDEamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_include

CLEAR vg_palavra

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN INCLUDESEARCH ti_programa-cf FOR c_include- SE ENCONTRO EN EL INCLUDE Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN STRUCTURESEARCH ti_programa-cf FOR c_struct

IF sy-subrc IS INITIALEXITENDIF

- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DEL INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF NOT vg_caracter IS INITIAL- VERIFICA SI NO ES FIN DE COMANDOIF vg_caracter EQ c_pontoEXITENDIF- ARMA PALABRACONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACIONTRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_includeCLEAR vg_palavraENDIFENDIFENDDO- GRABA NOMBRE DEL INCLUDE PARA FUTURA BUSQUEDA POR USER EXITREAD TABLE ti_includes WITH KEY nome = vg_palavraIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_palavra TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIF

ENDIF

ENDFORM PROCURA_INCLUDE

amp---------------------------------------------------------------------amp Form PROCURA_FUNCAOamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_funcao

CLEAR vg_conta_aspavg_palavra

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA FUNCIONSEARCH ti_programa-cf FOR c_funcao_2- SE ENCONTRO UNA FUNCION Y LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DE LA INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF NOT vg_caracter IS INITIAL- VERIFICA SI NO ES FIN DE COMANDOIF vg_caracter EQ c_aspaADD 1 TO vg_conta_aspaIF vg_conta_aspa EQ 2EXITENDIFENDIF- ARMA PALABRACONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACIONTRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_funcao_1CLEAR vg_palavraENDIFENDIFENDDO- BUSCA NOMBRE DE LA FUNCION PARA FUTURA BUSQUEDA POR USER EXITCLEAR vg_pnameSELECT SINGLE pnameINTO vg_pnameFROM tfdirWHERE funcname EQ vg_palavraIF sy-subrc EQ 0

READ TABLE ti_includes WITH KEY nome = vg_pnameIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_pname TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIF

ENDIF

ENDIF

ENDFORM PROCURA_FUNCAO

amp---------------------------------------------------------------------amp Form VERIFICA_INCLUDE_FUNCAO_SUBMITamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM verifica_include_funcao_submit

CHECK p_ue IS NOT INITIAL OR p_badi IS NOT INITIALOR p_bte IS NOT INITIAL OR p_enh IS NOT INITIAL

LOOP AT ti_includes

ADD 1 TO vg_contadorDESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfillMOVE ti_includes-nivel TO vg_nivelADD 1 TO vg_nivel

- BORRA TABLA INTERNAREFRESH ti_programa

- REALIZA LECTURA DE INCLUDEFUNCION ALMACENANDO EN TABLA INTERNAREAD REPORT ti_includes-nome INTO ti_programa

LOOP AT ti_programa

- PROCURA POR INCLUDESIF p_incl EQ c_xPERFORM procura_includeENDIF- PROCURA POR FUNCIONIF p_func EQ c_xPERFORM procura_funcaoENDIF- PROCURA POR SUBMITIF p_submit EQ c_xPERFORM procura_submitENDIF

ENDLOOP

ENDLOOP

ENDFORM VERIFICA_INCLUDE_FUNCAO_SUBMIT

amp---------------------------------------------------------------------amp Form EVITAR_TIME_OUTamp--------------------------------------------------------------------- Evito el TIME OUT visualizando un mensaje----------------------------------------------------------------------FORM evitar_time_out USING p_tfill LIKE sy-tfill

DATAvl_total(10) TYPE n

vl_atual(10) TYPE nl_tout LIKE sy-timlol_time(10) TYPE c

GET TIME FIELD l_tout

l_tout = l_tout - w_tini

MOVEp_tfill TO vl_totalvg_contador TO vl_atual

SHIFT vl_total LEFT DELETING LEADING 0SHIFT vl_atual LEFT DELETING LEADING 0WRITE l_tout TO l_time

CONCATENATE Tpo l_time Total vl_total Actual vl_atualINTO vg_textoSEPARATED BY space

CALL FUNCTION SAPGUI_PROGRESS_INDICATOREXPORTINGtext = vg_texto

ENDFORM EVITAR_TIME_OUT

amp---------------------------------------------------------------------amp Form PROCURA_SUBMITamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_submit

CLEAR vg_conta_espaco vg_palavra vg_ini_contagem

- VERIFICA SI LA LINEA DEL PROGRAMA EXISTE ALGUN INCLUDESEARCH ti_programa-cf FOR c_submit- SE ENCONTRO EN EL INCLUDE Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DEL INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF vg_ini_contagem EQ c_x AND vg_caracter IS INITIALADD 1 TO vg_conta_espacoENDIF

IF NOT vg_caracter IS INITIALMOVE c_x TO vg_ini_contagemIF vg_caracter EQ c_pontoEXITENDIF- ARMA PALABRAIF vg_conta_espaco LT 2CONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACION

TRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_submitCLEAR vg_palavraENDIFELSEEXITENDIFENDIFENDDO- BUSCA NOMBRE DE LA FUNCION PARA FUTURA BUSQUEDA POR USER EXITREAD TABLE ti_includes WITH KEY nome = vg_palavraIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_palavra TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIFENDIF

ENDFORM PROCURA_SUBMIT

amp---------------------------------------------------------------------amp Form CONSISTI_PARAMETROSamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM consisti_parametros

IF p_nivel IS INITIALMOVE 1 TO p_nivelENDIF

IF p_prog IS INITIAL AND p_tcode IS INITIAL- EL NOMBRE DEL PROGRAMA Y EL NOMBRE DE LA TRANSACCION NO PUEDEN SER- NULOS UNO DE ELLOS DEBE SER INFORMADOMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e01STOPENDIF

IF NOT p_prog IS INITIAL AND NOT p_tcode IS INITIAL- SE SOLICITA AL USUARIO QUE INFORME NOMBRE DE PROGRAMA O TRANSACCIONMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e02STOPENDIF

IF p_ue IS INITIAL AND p_badi IS INITIAL AND p_bte IS INITIALAND p_sust IS INITIAL AND p_val IS INITIAL AND p_fdex IS INITIALAND p_enh IS INITIAL- SE SOLICITA AL USUARIO QUE INFORME UN TIPO DE MEJORAMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e03STOPENDIF

ENDFORM CONSISTI_PARAMETROS

amp---------------------------------------------------------------------

amp Form INICIALIZA_TABELAamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM inicializa_tabela

DATAe_tstc TYPE tstcl_tcode TYPE sy-tcode

REFRESH ti_includes

IF NOT p_prog IS INITIAL

MOVE p_prog TO ti_includes-nome0 TO ti_includes-nivelAPPEND ti_includes

- BUSCO EL PROGRAMAREAD REPORT ti_includes-nome INTO ti_programa

IF sy-subrc EQ 0REFRESH ti_programaELSE- EL PROGRAMA NO EXISTEMESSAGE s893(pz) WITH El programa p_prog no existeSTOPENDIF

ELSEIF NOT p_tcode IS INITIAL

SELECT SINGLE FROM tstcWHERE tcode EQ p_tcode

IF sy-subrc EQ 0

IF tstc-pgmna IS NOT INITIALMOVE tstc-pgmna TO ti_includes-nome0 TO ti_includes-nivelAPPEND ti_includesELSE Se trata de una transaccioacuten de paraacutemetros Obtengo la transaccioacuten asociadaCALL FUNCTION RS_TRANSACTION_SINGLE_GETEXPORTINGparameter_tcode = p_tcodeIMPORTINGtcode = l_tcode

SELECT SINGLE INTO e_tstcFROM tstcWHERE tcode EQ l_tcode

IF sy-subrc EQ 0MOVE e_tstc-pgmna TO ti_includes-nome0 TO ti_includes-nivel

APPEND ti_includesELSE- LA TRANSACCIOacuteN NO EXISTEMESSAGE s893(pz) WITH La transaccioacuten p_tcode no existeENDIFENDIFELSE- LA TRANSACCIOacuteN NO EXISTEMESSAGE s893(pz) WITH La transaccioacuten p_tcode no existeSTOPENDIFENDIF

ENDFORM INICIALIZA_TABELA

amp---------------------------------------------------------------------amp Form armar_alvamp--------------------------------------------------------------------- Armo el ALV----------------------------------------------------------------------FORM armar_alv

DATAl_repid TYPE sy-repid

MOVE sy-repid TO l_repid

CALL FUNCTION REUSE_ALV_BLOCK_LIST_INITEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMAND

IF p_ue IS NOT INITIALPERFORM construir_catalogo_exitPERFORM definir_layout USING TI_USER_EXITCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGEPERFORM sort TABLES ti_sortUSING TI_USER_EXIT

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_USER_EXITit_events = ti_eventsit_sort = ti_sorti_text = User-exitTABLESt_outtab = ti_user_exitEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

PERFORM construir_catalogo_uexitPERFORM definir_layout USING TI_FINAL

CHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_UEXITPERFORM sort TABLES ti_sortUSING TI_FINAL

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FINALit_events = ti_eventsit_sort = ti_sorti_text = User-exit TxCMODTABLESt_outtab = ti_finalEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_badi IS NOT INITIALPERFORM construir_catalogo_badiPERFORM definir_layout USING TI_BADICHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BADIPERFORM sort TABLES ti_sortUSING TI_BADI

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_BADIit_events = ti_eventsit_sort = ti_sorti_text = BadisTABLESt_outtab = ti_badiEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_bte IS NOT INITIALPERFORM construir_catalogo_btePERFORM definir_layout USING TI_BTECHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BTEPERFORM sort TABLES ti_sortUSING TI_BTE

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layout

it_fieldcat = ti_cati_tabname = TI_BTEit_events = ti_eventsit_sort = ti_sorti_text = BTETABLESt_outtab = ti_bteEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_enh IS NOT INITIALPERFORM construir_catalogo_enhPERFORM definir_layout USING TI_ENHCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHPERFORM sort TABLES ti_sortUSING TI_ENH

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHit_events = ti_eventsit_sort = ti_sorti_text = ENHTABLESt_outtab = ti_enhEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

PERFORM construir_catalogo_enhobjPERFORM definir_layout USING TI_ENHOBJCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHOBJPERFORM sort TABLES ti_sortUSING TI_ENHOBJ

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHOBJit_events = ti_eventsit_sort = ti_sorti_text = ENHOBJTABLESt_outtab = ti_enhobjEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_sust IS NOT INITIALPERFORM construir_catalogo_sustPERFORM definir_layout USING TI_SUSTCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_SUSTPERFORM sort TABLES ti_sortUSING TI_SUST

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_SUSTit_events = ti_eventsit_sort = ti_sorti_text = SustitucionesTABLESt_outtab = ti_sustEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_val IS NOT INITIALPERFORM construir_catalogo_valPERFORM definir_layout USING TI_VALCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_VALPERFORM sort TABLES ti_sortUSING TI_VAL

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_VALit_events = ti_eventsit_sort = ti_sorti_text = ValidacionesTABLESt_outtab = ti_valEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_fdex IS NOT INITIALPERFORM construir_catalogo_fdexPERFORM definir_layout USING TI_FDEXCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_FDEX

PERFORM sort TABLES ti_sortUSING TI_FDEX

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FDEXit_events = ti_eventsit_sort = ti_sorti_text = Field-exitTABLESt_outtab = ti_fdexEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

ENDFORM armar_alv

amp---------------------------------------------------------------------amp Form construir_catalogo_EXITamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_exit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_USER_EXITi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03

CF X c_text_04

ENDFORM construir_catalogo_EXIT

amp---------------------------------------------------------------------amp Form asignar_campo_a_catalogoamp--------------------------------------------------------------------- Asignar campo al catalogo ALV----------------------------------------------------------------------FORM asignar_campo_a_catalogo TABLES pt_cat STRUCTURE wa_catUSING p_fieldname LIKE wa_cat-fieldnamep_key LIKE wa_cat-keyp_col_pos TYPE cp_fix_column LIKE wa_cat-fix_columnp_hotspot LIKE wa_cat-hotspotp_do_sum LIKE wa_cat-do_sump_input LIKE wa_cat-inputp_checkbox LIKE wa_cat-checkboxp_no_out LIKE wa_cat-no_outp_icon LIKE wa_cat-iconp_reptext_ddic LIKE wa_cat-reptext_ddic

STATICS l_col_pos LIKE sy-cucol

Asignar atributos de campo en el catalogo de cabecera ALVCLEAR wa_catREAD TABLE pt_cat INTO wa_catWITH KEY fieldname = p_fieldname

CHECK sy-subrc EQ 0

IF NOT p_reptext_ddic IS INITIALwa_cat-seltext_l = wa_cat-seltext_m =wa_cat-seltext_s = wa_cat-reptext_ddic = p_reptext_ddicENDIF

IF p_col_pos EQ X Inicializo el conteo para ordenar las columnasl_col_pos = 1ELSEADD 1 TO l_col_posENDIF

wa_cat-fieldname = p_fieldnamewa_cat-key = p_keywa_cat-col_pos = l_col_poswa_cat-fix_column = p_fix_columnwa_cat-hotspot = p_hotspotwa_cat-do_sum = p_do_sumwa_cat-edit = wa_cat-input = p_inputwa_cat-checkbox = p_checkboxwa_cat-no_out = p_no_outwa_cat-icon = p_icon

MODIFY pt_cat FROM wa_cat INDEX sy-tabix

ENDFORM asignar_campo_a_catalogo

amp---------------------------------------------------------------------amp Form definir_layoutamp--------------------------------------------------------------------- Definir atributos del layout de reporte----------------------------------------------------------------------FORM definir_layout USING p_table TYPE slis_layout_alv-box_tabnameCHANGING p_layout TYPE slis_layout_alv

CLEAR p_layout

IF p_table NE TI_CIMP Marco el campo para la seleccioacutenp_layout-box_fieldname = SELp_layout-box_tabname = p_tableENDIFp_layout-zebra = Xp_layout-colwidth_optimize = Xp_layout-no_vline = p_layout-no_colhead = p_layout-lights_condense = Xp_layout-detail_popup = Xp_layout-detail_initial_lines = Xp_layout-flexible_key = p_layout-key_hotspot = p_layout-confirmation_prompt = X

ENDFORM definir_layout

amp---------------------------------------------------------------------amp Form construir_eventosamp--------------------------------------------------------------------- Asignar eventos soportados----------------------------------------------------------------------FORM construir_eventos USING p_form LIKE wa_events-formDATAl_type(1) TYPE n

REFRESH ti_eventsCLEAR wa_events

ALV Simple Block appendl_type = 2

Buscar secciones para eventosCALL FUNCTION REUSE_ALV_EVENTS_GETEXPORTINGi_list_type = l_typeIMPORTINGet_events = ti_events

Leer evento TOP_OF_PAGEREAD TABLE ti_events WITH KEY name = slis_ev_top_of_pageINTO wa_events Asignar Rutina FORM TOP_OF_PAGE a eventoIF sy-subrc = 0MOVE p_form TO wa_events-formMODIFY ti_events FROM wa_events INDEX sy-tabixENDIF

ENDFORM construir_eventos

amp---------------------------------------------------------------------amp Form top_of_pageamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_user_exitWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUser-exit

ENDFORM top_of_page

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_UEXITamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_uexit

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_finalWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUSER-EXITs TxSMOD

ENDFORM TOP_OF_PAGE_UEXIT

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_FDEXamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_fdex

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_fdexWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incFIELD-EXITs

ENDFORM TOP_OF_PAGE_FDEX

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BADIamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_badi

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_badiWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBADIs

ENDFORM TOP_OF_PAGE_BADI

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BTEamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_bte

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_bteWRITE sy-tfill TO l_tfill_cant

CONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBTEs

ENDFORM TOP_OF_PAGE_BTE

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enh

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_enhWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENH

amp---------------------------------------------------------------------amp Form sortamp--------------------------------------------------------------------- Creo el sort del ALV (FM)---------------------------------------------------------------------- --gtPT_sort Tabla --gtP_tabname Nombre de la tabla----------------------------------------------------------------------FORM sort TABLES pt_sortUSING p_tabname TYPE any

CLEAR pt_sort wa_sortREFRESH pt_sort

CASE p_tabnameWHEN TI_SUST

wa_sort-fieldname = SUBSTIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = SUBSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = CONSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN TI_VAL

wa_sort-fieldname = VALIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = VALSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN TI_ENHOBJ

wa_sort-fieldname = ENHNAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = VERSIONwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN OTHERS

IF p_tabname NE TI_FINAL

wa_sort-fieldname = TIPOwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

IF p_tabname NE TI_FDEX

wa_sort-fieldname = NIVELwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = PROGRAMAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = LINEAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

ENDIF

ELSE

wa_sort-fieldname = NAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = MEMBERwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sortENDIFENDCASE

ENDFORM sort

amp---------------------------------------------------------------------amp Form mostrar_listadoamp--------------------------------------------------------------------- Mostrar listado ALV----------------------------------------------------------------------FORM mostrar_listado

wa_print-reserve_lines = 2

CALL FUNCTION REUSE_ALV_BLOCK_LIST_DISPLAY

EXPORTINGis_print = wa_printEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM mostrar_listado

amp---------------------------------------------------------------------amp Form user_commandamp--------------------------------------------------------------------- Evaluar acciones del usuario----------------------------------------------------------------------FORM user_command USING ucomm LIKE sy-ucommsfields TYPE slis_selfield

DATA l_break TYPE c

Rescatar el registro seleccionadoCASE sfields-tabnameWHEN TI_USER_EXITREAD TABLE ti_user_exit INDEX sfields-tabindexWHEN TI_BADIREAD TABLE ti_badi INDEX sfields-tabindexWHEN TI_BTEREAD TABLE ti_bte INDEX sfields-tabindexWHEN TI_ENHREAD TABLE ti_enh INDEX sfields-tabindexWHEN TI_ENHOBJREAD TABLE ti_enhobj INDEX sfields-tabindexWHEN TI_FDEXREAD TABLE ti_fdex INDEX sfields-tabindexWHEN TI_FINALREAD TABLE ti_final INDEX sfields-tabindexWHEN TI_SUSTREAD TABLE ti_sust INDEX sfields-tabindexWHEN TI_VALREAD TABLE ti_val INDEX sfields-tabindexWHEN TI_CIMPREAD TABLE ti_cimp INDEX sfields-tabindexENDCASE

Seleccion de opcionCASE ucomm DOUBLE CLICKWHEN ampIC1 Evaluar valor de campo seleccionadoCHECK NOT sfields-value IS INITIAL

CASE sfields-tabnameWHEN TI_USER_EXIT USER-EXITIF ti_user_exit-tipo EQ sfields-value(4)SEARCH ti_user_exit-cf FOR c_enhanceCHECK sy-subrc EQ 0PERFORM visualizar_exit USING ti_user_exit-programati_user_exit-cf

ELSEIF ti_user_exit-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_user_exit-programati_user_exit-lineaMOVE X TO l_breakELSEIF ti_user_exit-break EQ sfields-value(4)OR ti_user_exit-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_user_exit-programati_user_exit-lineati_user_exit-breakMOVE X TO l_breakENDIF

WHEN TI_FINAL USER-EXIT Tx CMODIF ti_final-name EQ sfields-valueCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = ti_final-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSEIF ti_final-include EQ sfields-valuePERFORM visualizar_linea USING ti_final-programa1MOVE X TO l_breakENDIF

WHEN TI_BADI BadiIF ti_badi-tipo EQ sfields-value(4)PERFORM visualizar_badi USING ti_badi-cfELSEIF ti_badi-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_badi-programati_badi-lineaMOVE X TO l_breakELSEIF ti_badi-break EQ sfields-value(4)OR ti_badi-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_badi-programati_badi-lineati_badi-breakMOVE X TO l_breakENDIF

WHEN TI_BTE BTEIF ti_bte-tipo EQ sfields-value(4)PERFORM fibf USING ti_bte-cfELSEIF ti_bte-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_bte-programati_bte-lineaMOVE X TO l_breakELSEIF ti_bte-break EQ sfields-value(4)OR ti_bte-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_bte-programati_bte-linea

ti_bte-breakMOVE X TO l_breakENDIF

WHEN TI_ENH Punto de ampliacioacutenIF ti_enh-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_enh-programati_enh-lineaMOVE X TO l_breakELSEIF ti_enh-tipo EQ sfields-value(4)PERFORM bi_se18 USING ti_enh-cfENDIF

WHEN TI_ENHOBJ Punto de ampliacioacutenIF ti_enhobj-enhname EQ sfields-value(30)PERFORM bi_se19 USING ti_enhobj-enhnameENDIF

WHEN TI_SUST SustitucionesIF ti_sust-substid EQ sfields-value(7) ORti_sust-subseqnr EQ sfields-value(3)PERFORM visualizar_sust USING ti_sust-substidti_sust-subseqnrENDIF

WHEN TI_VAL ValidacionesIF ti_val-valid EQ sfields-value(7) ORti_val-valseqnr EQ sfields-value(3)PERFORM visualizar_val USING ti_val-validti_val-valseqnrENDIF

WHEN TI_FDEX Field-exitIF ti_fdex-tipo EQ sfields-valueSUBMIT rsmodprf AND RETURNELSEIF ti_fdex-cf(60) EQ sfields-value Visualizo el field-exitCALL FUNCTION RS_FUNCTION_SHOWEXPORTINGfuncname = ti_fdex-cf

CALL FUNCTION RS_NAVIGATION_MONITORENDIF

WHEN TI_CIMP Customer implementation

CASE sfields-fieldnameWHEN ENHNAMEPERFORM bi_se19 USING ti_cimp-enhnameWHEN ENHINCLUDEPERFORM visualizar_enh_cf USING ti_cimp-enhinclude

WHEN OTHERS DO NOTHING ENDCASE

WHEN OTHERS DO NOTHING ENDCASE

WHEN OTHERS DO NOTHING ENDCASE

IF l_break IS NOT INITIAL AND sfields-tabname NE TI_CIMPWAIT UP TO 1 SECONDSPERFORM cargar_breakENDIFsfields-refresh = X

ENDFORM user_command

amp---------------------------------------------------------------------amp Form visualizar_lineaamp--------------------------------------------------------------------- Visualizo la linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_linea USING p_programa TYPE sy-repidp_linea

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_programaobject_type = c_typeposition = p_lineaEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM visualizar_linea

amp---------------------------------------------------------------------amp Form buscar_exitamp--------------------------------------------------------------------- Buscar USER-EXIT----------------------------------------------------------------------FORM buscar_exit

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN USER-EXITSEARCH ti_programa-cf FOR c_user_exit- SE ENCONTRO UN USER-EXIT Y SE VERIFICA SI LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS PERFORMSEARCH ti_programa-cf FOR c_performCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LAS ASIGNACIONESSEARCH ti_programa-cf FOR c_igualCHECK sy-subrc NE 0

CLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INIacuteCIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF

ENDFORM buscar_exit

amp---------------------------------------------------------------------amp Form buscar_badiamp--------------------------------------------------------------------- Buscar BADI----------------------------------------------------------------------FORM buscar_badi

DATAl_subrc LIKE sy-subrc

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BADISEARCH ti_programa-cf FOR c_badi- SE ENCONTRO UNA BADI Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

SEARCH ti_programa-cf FOR c_includeIF sy-subrc NE 0CLEAR l_subrcSEARCH ti_programa-cf FOR c_methodIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_funcao_2IF sy-subrc NE 0SEARCH ti_programa-cf FOR c_performIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_type_refIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_formMOVE 4 TO l_subrcENDIFENDIFENDIFENDIF

IF l_subrc EQ 0CLEAR ti_badi

- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIFELSECHECK p_handl IS NOT INITIAL- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA INSTANCIA DE- UNA BADISEARCH ti_programa-cf FOR c_handler- SE ENCONTRO UNA INSTANCIA DE IMPLEMENACIOacuteN Y SE VERIFICA SI LA LINEA- NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

SEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0CLEAR ti_badi- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIF

ENDFORM buscar_badi

amp---------------------------------------------------------------------amp Form buscar_bteamp--------------------------------------------------------------------- Buscar BTE----------------------------------------------------------------------FORM buscar_bte

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OPEN_FI_PERFORM

- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endform

CHECK sy-subrc NE 0

CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte1- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OUTBOUND_CALL

- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0

CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF

ENDFORM buscar_bte

amp---------------------------------------------------------------------amp Form repid_f4amp--------------------------------------------------------------------- Ejecuto el F4 para buscar programas----------------------------------------------------------------------FORM repid_f4

CALL FUNCTION REPOSITORY_INFO_SYSTEM_F4EXPORTINGobject_type = PROGobject_name = p_progsuppress_selection = XIMPORTINGobject_name_selected = p_progEXCEPTIONS

cancel = 1wrong_type = 2OTHERS = 3

ENDFORM repid_f4

amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf

DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

SEARCH p_cf FOR 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 INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

READ TABLE lt_cf INDEX 4

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

CHECK sy-subrc IS INITIAL

Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten

textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer

CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4

IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF

WHEN OTHERS Do Nothing ENDCASE

ENDFORM visualizar_badi

amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf

DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

CLEAR d010inc modsap modact

Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid

IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF

SEARCH p_cf FOR c_enhance

CHECK sy-subrc IS INITIAL

REFRESH lt_cf

l_cf = 500 - sy-fdpos

MOVE p_cf+sy-fdpos(l_cf) TO l_linea

SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3

TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS

Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _

Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit

CHECK sy-subrc IS INITIAL

Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM

modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3

ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname

CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ENDIF

ENDFORM visualizar_exit

amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit

DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo

DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe

DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE

CHECK p_fdex IS NOT INITIAL

CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe

MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex

IF p_prog IS NOT INITIAL

MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF

Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog

LOOP AT lt_d020s

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

REFRESH lt_d021s

Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4

Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X

SEARCH lt_d021s-fnam FOR -

IF sy-subrc IS INITIAL

MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum

Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname

APPEND lt_campo

ENDIF

ENDLOOPENDLOOP

CHECK lt_campo[] IS NOT INITIAL

SORT lt_campo BY repid dnum tabname fieldname

DELETE ADJACENT DUPLICATES FROM lt_campo

Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname

SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l

LOOP AT lt_dd03l

CLEAR tddir tddirs

SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname

CHECK sy-subrc IS INITIAL

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog

CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF

Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf

IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF

READ TABLE lt_fe WITH KEY cf = lt_fe-cf

CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP

LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex

ENDLOOP

ENDFORM buscar_field_exit

amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf

DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c

SEARCH p_cf FOR c_bte

IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ELSE

SEARCH p_cf FOR c_bte1

CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ENDIF

IF l_tipo IS NOT INITIAL

PERFORM visualizar_bte USING l_tipol_linea

ELSECALL TRANSACTION FIBFENDIF

ENDFORM fibf

amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT

EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM breakpoint

amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_badi

amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE

i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_bte

amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X TIPO X X c_text_05CF X c_text_04

ENDFORM construir_catalogo_FDEX

amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc

DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

CHECK lt_break[] IS NOT INITIAL

IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix

MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF

IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix

MOVEti_badi-linea TO l_lineti_badi-programa TO l_program

READ TABLE lt_break INTO wa_break

WITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF

IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix

MOVEti_bte-linea TO l_lineti_bte-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF

ENDFORM cargar_break

amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

DATAl_tabix TYPE sy-tabix

l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

SELECT SINGLE FROM d010incWHERE include = p_programa

IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF

MOVEp_linea TO l_linep_programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM asignar_break

amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit

IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF

PERFORM get_objects Get Objects

ENDFORM buscar_user_exit

amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects

DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area

DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix

SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog

IF sy-subrc = 0

SORT ti_tadir BY obj_name devclass

SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass

IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF

- Get UserExit namesLOOP AT ti_jtab

SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E

APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area

l_fname = ti_final-member

CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include

LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP

CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP

ENDFORM get_objects

amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X

ENDFORM construir_catalogo_uexit

amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------

FORM visualizar_ampliacion

DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF

SELECT SINGLE FROM modsapWHERE member EQ l_member

IF sy-subrc IS INITIAL

Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member

ENDIF

ENDFORM visualizar_ampliacion

amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea

RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs

REFRESH r_event r_procs

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event

SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs

SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE

ENDFORM visualizar_bte

amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE

----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c

DATAl_linea(500) TYPE c

DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

MOVE lt_fields-value TO l_linea

PERFORM visualizar_bte USING p_tipol_linea

ENDFORM cargar_bte

amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface

DATAl_linea(500) TYPE c

DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE

InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF

ENDFORM visualizar_interface

amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones

CHECK p_sust IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922

ENDFORM buscar_sustituciones

amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST

ENDFORM construir_catalogo_sust

amp---------------------------------------------------------------------

amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones

ENDFORM TOP_OF_PAGE_SUST

amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4

CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_sust

amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones

CHECK p_val IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931

ENDFORM buscar_validaciones

amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID

ENDFORM construir_catalogo_val

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones

ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2

CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_val

amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto

DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF

SELECT SINGLE FROM modsapWHERE name EQ l_name

IF sy-subrc IS INITIAL

MOVE l_name TO l_member

SELECT SINGLE FROM modactWHERE member EQ l_member

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF

ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF

ENDFORM visualizar_proyecto

amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel

APPEND ti_enh

ENDIFENDIFENDIF

ENDFORM buscar_punto_ampliacioacuten

amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_enh

amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh

DATA l_obj_name TYPE enhobj-obj_name

DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name

CHECK p_enh IS NOT INITIAL

IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF

REFRESH lt_obj_name

LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP

SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name

ENDFORM buscar_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X

ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME

ENDFORM construir_catalogo_enhobj

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENHOBJ

amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM bi_se19

amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro

CLEAR ti_bdcdatati_bdcdata-program = program

ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata

ENDFORM BDC_DYNPRO

amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval

CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata

ENDFORM BDC_FIELD

amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa

DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)

CHECK ti_gb31t[] IS NOT INITIAL

DO

Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2

IF l_exit EQ XEXITENDIF

CHECK l_exit IS INITIAL

Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND

CHECK l_boolpool IS NOT INITIAL

MOVE l_boolpool TO l_repid

Visualizo el programaPERFORM visualizar_linea USING l_repid01

ENDDO

ENDFORM visualizar_programa

amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope

STATICS l_flag TYPE c

DATA l_tit(65) TYPE c

CHECK l_flag IS INITIAL

l_flag = X

WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline

4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM texto_tope

amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf

DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off

CHECK l_off IS NOT INITIAL

ADD 7 TO l_offl_cf = 500 - l_off

SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_enhspotname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1

invalid_object_type = 2OTHERS = 3

ENDFORM bi_se18

amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit

DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE

DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE

MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE

MOVE lt_fields-value TO l_nameENDIF

Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_

LOOP AT lt_tfdir

CLEARl_group l_include l_namespace l_str_area

l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl

IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl

CHECK sy-subrc IS INITIAL

Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP

CHECK l_flag IS INITIAL

La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value

ENDFORM visualizar_fm_exit

amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter

tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten

ENDFORM def_text_parameter

amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones

Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt

Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt

Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt

icon_create RESULT name text infoicon_create

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 13: buscar_ampliaciones FOROSAP

ENDFORM PROCURA_INCLUDE

amp---------------------------------------------------------------------amp Form PROCURA_FUNCAOamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_funcao

CLEAR vg_conta_aspavg_palavra

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA FUNCIONSEARCH ti_programa-cf FOR c_funcao_2- SE ENCONTRO UNA FUNCION Y LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DE LA INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF NOT vg_caracter IS INITIAL- VERIFICA SI NO ES FIN DE COMANDOIF vg_caracter EQ c_aspaADD 1 TO vg_conta_aspaIF vg_conta_aspa EQ 2EXITENDIFENDIF- ARMA PALABRACONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACIONTRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_funcao_1CLEAR vg_palavraENDIFENDIFENDDO- BUSCA NOMBRE DE LA FUNCION PARA FUTURA BUSQUEDA POR USER EXITCLEAR vg_pnameSELECT SINGLE pnameINTO vg_pnameFROM tfdirWHERE funcname EQ vg_palavraIF sy-subrc EQ 0

READ TABLE ti_includes WITH KEY nome = vg_pnameIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_pname TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIF

ENDIF

ENDIF

ENDFORM PROCURA_FUNCAO

amp---------------------------------------------------------------------amp Form VERIFICA_INCLUDE_FUNCAO_SUBMITamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM verifica_include_funcao_submit

CHECK p_ue IS NOT INITIAL OR p_badi IS NOT INITIALOR p_bte IS NOT INITIAL OR p_enh IS NOT INITIAL

LOOP AT ti_includes

ADD 1 TO vg_contadorDESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfillMOVE ti_includes-nivel TO vg_nivelADD 1 TO vg_nivel

- BORRA TABLA INTERNAREFRESH ti_programa

- REALIZA LECTURA DE INCLUDEFUNCION ALMACENANDO EN TABLA INTERNAREAD REPORT ti_includes-nome INTO ti_programa

LOOP AT ti_programa

- PROCURA POR INCLUDESIF p_incl EQ c_xPERFORM procura_includeENDIF- PROCURA POR FUNCIONIF p_func EQ c_xPERFORM procura_funcaoENDIF- PROCURA POR SUBMITIF p_submit EQ c_xPERFORM procura_submitENDIF

ENDLOOP

ENDLOOP

ENDFORM VERIFICA_INCLUDE_FUNCAO_SUBMIT

amp---------------------------------------------------------------------amp Form EVITAR_TIME_OUTamp--------------------------------------------------------------------- Evito el TIME OUT visualizando un mensaje----------------------------------------------------------------------FORM evitar_time_out USING p_tfill LIKE sy-tfill

DATAvl_total(10) TYPE n

vl_atual(10) TYPE nl_tout LIKE sy-timlol_time(10) TYPE c

GET TIME FIELD l_tout

l_tout = l_tout - w_tini

MOVEp_tfill TO vl_totalvg_contador TO vl_atual

SHIFT vl_total LEFT DELETING LEADING 0SHIFT vl_atual LEFT DELETING LEADING 0WRITE l_tout TO l_time

CONCATENATE Tpo l_time Total vl_total Actual vl_atualINTO vg_textoSEPARATED BY space

CALL FUNCTION SAPGUI_PROGRESS_INDICATOREXPORTINGtext = vg_texto

ENDFORM EVITAR_TIME_OUT

amp---------------------------------------------------------------------amp Form PROCURA_SUBMITamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_submit

CLEAR vg_conta_espaco vg_palavra vg_ini_contagem

- VERIFICA SI LA LINEA DEL PROGRAMA EXISTE ALGUN INCLUDESEARCH ti_programa-cf FOR c_submit- SE ENCONTRO EN EL INCLUDE Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DEL INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF vg_ini_contagem EQ c_x AND vg_caracter IS INITIALADD 1 TO vg_conta_espacoENDIF

IF NOT vg_caracter IS INITIALMOVE c_x TO vg_ini_contagemIF vg_caracter EQ c_pontoEXITENDIF- ARMA PALABRAIF vg_conta_espaco LT 2CONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACION

TRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_submitCLEAR vg_palavraENDIFELSEEXITENDIFENDIFENDDO- BUSCA NOMBRE DE LA FUNCION PARA FUTURA BUSQUEDA POR USER EXITREAD TABLE ti_includes WITH KEY nome = vg_palavraIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_palavra TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIFENDIF

ENDFORM PROCURA_SUBMIT

amp---------------------------------------------------------------------amp Form CONSISTI_PARAMETROSamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM consisti_parametros

IF p_nivel IS INITIALMOVE 1 TO p_nivelENDIF

IF p_prog IS INITIAL AND p_tcode IS INITIAL- EL NOMBRE DEL PROGRAMA Y EL NOMBRE DE LA TRANSACCION NO PUEDEN SER- NULOS UNO DE ELLOS DEBE SER INFORMADOMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e01STOPENDIF

IF NOT p_prog IS INITIAL AND NOT p_tcode IS INITIAL- SE SOLICITA AL USUARIO QUE INFORME NOMBRE DE PROGRAMA O TRANSACCIONMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e02STOPENDIF

IF p_ue IS INITIAL AND p_badi IS INITIAL AND p_bte IS INITIALAND p_sust IS INITIAL AND p_val IS INITIAL AND p_fdex IS INITIALAND p_enh IS INITIAL- SE SOLICITA AL USUARIO QUE INFORME UN TIPO DE MEJORAMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e03STOPENDIF

ENDFORM CONSISTI_PARAMETROS

amp---------------------------------------------------------------------

amp Form INICIALIZA_TABELAamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM inicializa_tabela

DATAe_tstc TYPE tstcl_tcode TYPE sy-tcode

REFRESH ti_includes

IF NOT p_prog IS INITIAL

MOVE p_prog TO ti_includes-nome0 TO ti_includes-nivelAPPEND ti_includes

- BUSCO EL PROGRAMAREAD REPORT ti_includes-nome INTO ti_programa

IF sy-subrc EQ 0REFRESH ti_programaELSE- EL PROGRAMA NO EXISTEMESSAGE s893(pz) WITH El programa p_prog no existeSTOPENDIF

ELSEIF NOT p_tcode IS INITIAL

SELECT SINGLE FROM tstcWHERE tcode EQ p_tcode

IF sy-subrc EQ 0

IF tstc-pgmna IS NOT INITIALMOVE tstc-pgmna TO ti_includes-nome0 TO ti_includes-nivelAPPEND ti_includesELSE Se trata de una transaccioacuten de paraacutemetros Obtengo la transaccioacuten asociadaCALL FUNCTION RS_TRANSACTION_SINGLE_GETEXPORTINGparameter_tcode = p_tcodeIMPORTINGtcode = l_tcode

SELECT SINGLE INTO e_tstcFROM tstcWHERE tcode EQ l_tcode

IF sy-subrc EQ 0MOVE e_tstc-pgmna TO ti_includes-nome0 TO ti_includes-nivel

APPEND ti_includesELSE- LA TRANSACCIOacuteN NO EXISTEMESSAGE s893(pz) WITH La transaccioacuten p_tcode no existeENDIFENDIFELSE- LA TRANSACCIOacuteN NO EXISTEMESSAGE s893(pz) WITH La transaccioacuten p_tcode no existeSTOPENDIFENDIF

ENDFORM INICIALIZA_TABELA

amp---------------------------------------------------------------------amp Form armar_alvamp--------------------------------------------------------------------- Armo el ALV----------------------------------------------------------------------FORM armar_alv

DATAl_repid TYPE sy-repid

MOVE sy-repid TO l_repid

CALL FUNCTION REUSE_ALV_BLOCK_LIST_INITEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMAND

IF p_ue IS NOT INITIALPERFORM construir_catalogo_exitPERFORM definir_layout USING TI_USER_EXITCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGEPERFORM sort TABLES ti_sortUSING TI_USER_EXIT

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_USER_EXITit_events = ti_eventsit_sort = ti_sorti_text = User-exitTABLESt_outtab = ti_user_exitEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

PERFORM construir_catalogo_uexitPERFORM definir_layout USING TI_FINAL

CHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_UEXITPERFORM sort TABLES ti_sortUSING TI_FINAL

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FINALit_events = ti_eventsit_sort = ti_sorti_text = User-exit TxCMODTABLESt_outtab = ti_finalEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_badi IS NOT INITIALPERFORM construir_catalogo_badiPERFORM definir_layout USING TI_BADICHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BADIPERFORM sort TABLES ti_sortUSING TI_BADI

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_BADIit_events = ti_eventsit_sort = ti_sorti_text = BadisTABLESt_outtab = ti_badiEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_bte IS NOT INITIALPERFORM construir_catalogo_btePERFORM definir_layout USING TI_BTECHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BTEPERFORM sort TABLES ti_sortUSING TI_BTE

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layout

it_fieldcat = ti_cati_tabname = TI_BTEit_events = ti_eventsit_sort = ti_sorti_text = BTETABLESt_outtab = ti_bteEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_enh IS NOT INITIALPERFORM construir_catalogo_enhPERFORM definir_layout USING TI_ENHCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHPERFORM sort TABLES ti_sortUSING TI_ENH

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHit_events = ti_eventsit_sort = ti_sorti_text = ENHTABLESt_outtab = ti_enhEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

PERFORM construir_catalogo_enhobjPERFORM definir_layout USING TI_ENHOBJCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHOBJPERFORM sort TABLES ti_sortUSING TI_ENHOBJ

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHOBJit_events = ti_eventsit_sort = ti_sorti_text = ENHOBJTABLESt_outtab = ti_enhobjEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_sust IS NOT INITIALPERFORM construir_catalogo_sustPERFORM definir_layout USING TI_SUSTCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_SUSTPERFORM sort TABLES ti_sortUSING TI_SUST

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_SUSTit_events = ti_eventsit_sort = ti_sorti_text = SustitucionesTABLESt_outtab = ti_sustEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_val IS NOT INITIALPERFORM construir_catalogo_valPERFORM definir_layout USING TI_VALCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_VALPERFORM sort TABLES ti_sortUSING TI_VAL

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_VALit_events = ti_eventsit_sort = ti_sorti_text = ValidacionesTABLESt_outtab = ti_valEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_fdex IS NOT INITIALPERFORM construir_catalogo_fdexPERFORM definir_layout USING TI_FDEXCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_FDEX

PERFORM sort TABLES ti_sortUSING TI_FDEX

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FDEXit_events = ti_eventsit_sort = ti_sorti_text = Field-exitTABLESt_outtab = ti_fdexEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

ENDFORM armar_alv

amp---------------------------------------------------------------------amp Form construir_catalogo_EXITamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_exit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_USER_EXITi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03

CF X c_text_04

ENDFORM construir_catalogo_EXIT

amp---------------------------------------------------------------------amp Form asignar_campo_a_catalogoamp--------------------------------------------------------------------- Asignar campo al catalogo ALV----------------------------------------------------------------------FORM asignar_campo_a_catalogo TABLES pt_cat STRUCTURE wa_catUSING p_fieldname LIKE wa_cat-fieldnamep_key LIKE wa_cat-keyp_col_pos TYPE cp_fix_column LIKE wa_cat-fix_columnp_hotspot LIKE wa_cat-hotspotp_do_sum LIKE wa_cat-do_sump_input LIKE wa_cat-inputp_checkbox LIKE wa_cat-checkboxp_no_out LIKE wa_cat-no_outp_icon LIKE wa_cat-iconp_reptext_ddic LIKE wa_cat-reptext_ddic

STATICS l_col_pos LIKE sy-cucol

Asignar atributos de campo en el catalogo de cabecera ALVCLEAR wa_catREAD TABLE pt_cat INTO wa_catWITH KEY fieldname = p_fieldname

CHECK sy-subrc EQ 0

IF NOT p_reptext_ddic IS INITIALwa_cat-seltext_l = wa_cat-seltext_m =wa_cat-seltext_s = wa_cat-reptext_ddic = p_reptext_ddicENDIF

IF p_col_pos EQ X Inicializo el conteo para ordenar las columnasl_col_pos = 1ELSEADD 1 TO l_col_posENDIF

wa_cat-fieldname = p_fieldnamewa_cat-key = p_keywa_cat-col_pos = l_col_poswa_cat-fix_column = p_fix_columnwa_cat-hotspot = p_hotspotwa_cat-do_sum = p_do_sumwa_cat-edit = wa_cat-input = p_inputwa_cat-checkbox = p_checkboxwa_cat-no_out = p_no_outwa_cat-icon = p_icon

MODIFY pt_cat FROM wa_cat INDEX sy-tabix

ENDFORM asignar_campo_a_catalogo

amp---------------------------------------------------------------------amp Form definir_layoutamp--------------------------------------------------------------------- Definir atributos del layout de reporte----------------------------------------------------------------------FORM definir_layout USING p_table TYPE slis_layout_alv-box_tabnameCHANGING p_layout TYPE slis_layout_alv

CLEAR p_layout

IF p_table NE TI_CIMP Marco el campo para la seleccioacutenp_layout-box_fieldname = SELp_layout-box_tabname = p_tableENDIFp_layout-zebra = Xp_layout-colwidth_optimize = Xp_layout-no_vline = p_layout-no_colhead = p_layout-lights_condense = Xp_layout-detail_popup = Xp_layout-detail_initial_lines = Xp_layout-flexible_key = p_layout-key_hotspot = p_layout-confirmation_prompt = X

ENDFORM definir_layout

amp---------------------------------------------------------------------amp Form construir_eventosamp--------------------------------------------------------------------- Asignar eventos soportados----------------------------------------------------------------------FORM construir_eventos USING p_form LIKE wa_events-formDATAl_type(1) TYPE n

REFRESH ti_eventsCLEAR wa_events

ALV Simple Block appendl_type = 2

Buscar secciones para eventosCALL FUNCTION REUSE_ALV_EVENTS_GETEXPORTINGi_list_type = l_typeIMPORTINGet_events = ti_events

Leer evento TOP_OF_PAGEREAD TABLE ti_events WITH KEY name = slis_ev_top_of_pageINTO wa_events Asignar Rutina FORM TOP_OF_PAGE a eventoIF sy-subrc = 0MOVE p_form TO wa_events-formMODIFY ti_events FROM wa_events INDEX sy-tabixENDIF

ENDFORM construir_eventos

amp---------------------------------------------------------------------amp Form top_of_pageamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_user_exitWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUser-exit

ENDFORM top_of_page

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_UEXITamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_uexit

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_finalWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUSER-EXITs TxSMOD

ENDFORM TOP_OF_PAGE_UEXIT

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_FDEXamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_fdex

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_fdexWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incFIELD-EXITs

ENDFORM TOP_OF_PAGE_FDEX

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BADIamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_badi

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_badiWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBADIs

ENDFORM TOP_OF_PAGE_BADI

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BTEamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_bte

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_bteWRITE sy-tfill TO l_tfill_cant

CONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBTEs

ENDFORM TOP_OF_PAGE_BTE

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enh

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_enhWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENH

amp---------------------------------------------------------------------amp Form sortamp--------------------------------------------------------------------- Creo el sort del ALV (FM)---------------------------------------------------------------------- --gtPT_sort Tabla --gtP_tabname Nombre de la tabla----------------------------------------------------------------------FORM sort TABLES pt_sortUSING p_tabname TYPE any

CLEAR pt_sort wa_sortREFRESH pt_sort

CASE p_tabnameWHEN TI_SUST

wa_sort-fieldname = SUBSTIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = SUBSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = CONSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN TI_VAL

wa_sort-fieldname = VALIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = VALSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN TI_ENHOBJ

wa_sort-fieldname = ENHNAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = VERSIONwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN OTHERS

IF p_tabname NE TI_FINAL

wa_sort-fieldname = TIPOwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

IF p_tabname NE TI_FDEX

wa_sort-fieldname = NIVELwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = PROGRAMAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = LINEAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

ENDIF

ELSE

wa_sort-fieldname = NAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = MEMBERwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sortENDIFENDCASE

ENDFORM sort

amp---------------------------------------------------------------------amp Form mostrar_listadoamp--------------------------------------------------------------------- Mostrar listado ALV----------------------------------------------------------------------FORM mostrar_listado

wa_print-reserve_lines = 2

CALL FUNCTION REUSE_ALV_BLOCK_LIST_DISPLAY

EXPORTINGis_print = wa_printEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM mostrar_listado

amp---------------------------------------------------------------------amp Form user_commandamp--------------------------------------------------------------------- Evaluar acciones del usuario----------------------------------------------------------------------FORM user_command USING ucomm LIKE sy-ucommsfields TYPE slis_selfield

DATA l_break TYPE c

Rescatar el registro seleccionadoCASE sfields-tabnameWHEN TI_USER_EXITREAD TABLE ti_user_exit INDEX sfields-tabindexWHEN TI_BADIREAD TABLE ti_badi INDEX sfields-tabindexWHEN TI_BTEREAD TABLE ti_bte INDEX sfields-tabindexWHEN TI_ENHREAD TABLE ti_enh INDEX sfields-tabindexWHEN TI_ENHOBJREAD TABLE ti_enhobj INDEX sfields-tabindexWHEN TI_FDEXREAD TABLE ti_fdex INDEX sfields-tabindexWHEN TI_FINALREAD TABLE ti_final INDEX sfields-tabindexWHEN TI_SUSTREAD TABLE ti_sust INDEX sfields-tabindexWHEN TI_VALREAD TABLE ti_val INDEX sfields-tabindexWHEN TI_CIMPREAD TABLE ti_cimp INDEX sfields-tabindexENDCASE

Seleccion de opcionCASE ucomm DOUBLE CLICKWHEN ampIC1 Evaluar valor de campo seleccionadoCHECK NOT sfields-value IS INITIAL

CASE sfields-tabnameWHEN TI_USER_EXIT USER-EXITIF ti_user_exit-tipo EQ sfields-value(4)SEARCH ti_user_exit-cf FOR c_enhanceCHECK sy-subrc EQ 0PERFORM visualizar_exit USING ti_user_exit-programati_user_exit-cf

ELSEIF ti_user_exit-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_user_exit-programati_user_exit-lineaMOVE X TO l_breakELSEIF ti_user_exit-break EQ sfields-value(4)OR ti_user_exit-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_user_exit-programati_user_exit-lineati_user_exit-breakMOVE X TO l_breakENDIF

WHEN TI_FINAL USER-EXIT Tx CMODIF ti_final-name EQ sfields-valueCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = ti_final-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSEIF ti_final-include EQ sfields-valuePERFORM visualizar_linea USING ti_final-programa1MOVE X TO l_breakENDIF

WHEN TI_BADI BadiIF ti_badi-tipo EQ sfields-value(4)PERFORM visualizar_badi USING ti_badi-cfELSEIF ti_badi-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_badi-programati_badi-lineaMOVE X TO l_breakELSEIF ti_badi-break EQ sfields-value(4)OR ti_badi-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_badi-programati_badi-lineati_badi-breakMOVE X TO l_breakENDIF

WHEN TI_BTE BTEIF ti_bte-tipo EQ sfields-value(4)PERFORM fibf USING ti_bte-cfELSEIF ti_bte-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_bte-programati_bte-lineaMOVE X TO l_breakELSEIF ti_bte-break EQ sfields-value(4)OR ti_bte-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_bte-programati_bte-linea

ti_bte-breakMOVE X TO l_breakENDIF

WHEN TI_ENH Punto de ampliacioacutenIF ti_enh-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_enh-programati_enh-lineaMOVE X TO l_breakELSEIF ti_enh-tipo EQ sfields-value(4)PERFORM bi_se18 USING ti_enh-cfENDIF

WHEN TI_ENHOBJ Punto de ampliacioacutenIF ti_enhobj-enhname EQ sfields-value(30)PERFORM bi_se19 USING ti_enhobj-enhnameENDIF

WHEN TI_SUST SustitucionesIF ti_sust-substid EQ sfields-value(7) ORti_sust-subseqnr EQ sfields-value(3)PERFORM visualizar_sust USING ti_sust-substidti_sust-subseqnrENDIF

WHEN TI_VAL ValidacionesIF ti_val-valid EQ sfields-value(7) ORti_val-valseqnr EQ sfields-value(3)PERFORM visualizar_val USING ti_val-validti_val-valseqnrENDIF

WHEN TI_FDEX Field-exitIF ti_fdex-tipo EQ sfields-valueSUBMIT rsmodprf AND RETURNELSEIF ti_fdex-cf(60) EQ sfields-value Visualizo el field-exitCALL FUNCTION RS_FUNCTION_SHOWEXPORTINGfuncname = ti_fdex-cf

CALL FUNCTION RS_NAVIGATION_MONITORENDIF

WHEN TI_CIMP Customer implementation

CASE sfields-fieldnameWHEN ENHNAMEPERFORM bi_se19 USING ti_cimp-enhnameWHEN ENHINCLUDEPERFORM visualizar_enh_cf USING ti_cimp-enhinclude

WHEN OTHERS DO NOTHING ENDCASE

WHEN OTHERS DO NOTHING ENDCASE

WHEN OTHERS DO NOTHING ENDCASE

IF l_break IS NOT INITIAL AND sfields-tabname NE TI_CIMPWAIT UP TO 1 SECONDSPERFORM cargar_breakENDIFsfields-refresh = X

ENDFORM user_command

amp---------------------------------------------------------------------amp Form visualizar_lineaamp--------------------------------------------------------------------- Visualizo la linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_linea USING p_programa TYPE sy-repidp_linea

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_programaobject_type = c_typeposition = p_lineaEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM visualizar_linea

amp---------------------------------------------------------------------amp Form buscar_exitamp--------------------------------------------------------------------- Buscar USER-EXIT----------------------------------------------------------------------FORM buscar_exit

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN USER-EXITSEARCH ti_programa-cf FOR c_user_exit- SE ENCONTRO UN USER-EXIT Y SE VERIFICA SI LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS PERFORMSEARCH ti_programa-cf FOR c_performCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LAS ASIGNACIONESSEARCH ti_programa-cf FOR c_igualCHECK sy-subrc NE 0

CLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INIacuteCIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF

ENDFORM buscar_exit

amp---------------------------------------------------------------------amp Form buscar_badiamp--------------------------------------------------------------------- Buscar BADI----------------------------------------------------------------------FORM buscar_badi

DATAl_subrc LIKE sy-subrc

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BADISEARCH ti_programa-cf FOR c_badi- SE ENCONTRO UNA BADI Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

SEARCH ti_programa-cf FOR c_includeIF sy-subrc NE 0CLEAR l_subrcSEARCH ti_programa-cf FOR c_methodIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_funcao_2IF sy-subrc NE 0SEARCH ti_programa-cf FOR c_performIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_type_refIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_formMOVE 4 TO l_subrcENDIFENDIFENDIFENDIF

IF l_subrc EQ 0CLEAR ti_badi

- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIFELSECHECK p_handl IS NOT INITIAL- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA INSTANCIA DE- UNA BADISEARCH ti_programa-cf FOR c_handler- SE ENCONTRO UNA INSTANCIA DE IMPLEMENACIOacuteN Y SE VERIFICA SI LA LINEA- NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

SEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0CLEAR ti_badi- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIF

ENDFORM buscar_badi

amp---------------------------------------------------------------------amp Form buscar_bteamp--------------------------------------------------------------------- Buscar BTE----------------------------------------------------------------------FORM buscar_bte

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OPEN_FI_PERFORM

- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endform

CHECK sy-subrc NE 0

CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte1- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OUTBOUND_CALL

- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0

CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF

ENDFORM buscar_bte

amp---------------------------------------------------------------------amp Form repid_f4amp--------------------------------------------------------------------- Ejecuto el F4 para buscar programas----------------------------------------------------------------------FORM repid_f4

CALL FUNCTION REPOSITORY_INFO_SYSTEM_F4EXPORTINGobject_type = PROGobject_name = p_progsuppress_selection = XIMPORTINGobject_name_selected = p_progEXCEPTIONS

cancel = 1wrong_type = 2OTHERS = 3

ENDFORM repid_f4

amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf

DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

SEARCH p_cf FOR 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 INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

READ TABLE lt_cf INDEX 4

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

CHECK sy-subrc IS INITIAL

Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten

textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer

CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4

IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF

WHEN OTHERS Do Nothing ENDCASE

ENDFORM visualizar_badi

amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf

DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

CLEAR d010inc modsap modact

Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid

IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF

SEARCH p_cf FOR c_enhance

CHECK sy-subrc IS INITIAL

REFRESH lt_cf

l_cf = 500 - sy-fdpos

MOVE p_cf+sy-fdpos(l_cf) TO l_linea

SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3

TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS

Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _

Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit

CHECK sy-subrc IS INITIAL

Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM

modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3

ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname

CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ENDIF

ENDFORM visualizar_exit

amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit

DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo

DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe

DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE

CHECK p_fdex IS NOT INITIAL

CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe

MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex

IF p_prog IS NOT INITIAL

MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF

Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog

LOOP AT lt_d020s

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

REFRESH lt_d021s

Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4

Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X

SEARCH lt_d021s-fnam FOR -

IF sy-subrc IS INITIAL

MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum

Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname

APPEND lt_campo

ENDIF

ENDLOOPENDLOOP

CHECK lt_campo[] IS NOT INITIAL

SORT lt_campo BY repid dnum tabname fieldname

DELETE ADJACENT DUPLICATES FROM lt_campo

Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname

SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l

LOOP AT lt_dd03l

CLEAR tddir tddirs

SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname

CHECK sy-subrc IS INITIAL

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog

CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF

Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf

IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF

READ TABLE lt_fe WITH KEY cf = lt_fe-cf

CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP

LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex

ENDLOOP

ENDFORM buscar_field_exit

amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf

DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c

SEARCH p_cf FOR c_bte

IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ELSE

SEARCH p_cf FOR c_bte1

CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ENDIF

IF l_tipo IS NOT INITIAL

PERFORM visualizar_bte USING l_tipol_linea

ELSECALL TRANSACTION FIBFENDIF

ENDFORM fibf

amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT

EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM breakpoint

amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_badi

amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE

i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_bte

amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X TIPO X X c_text_05CF X c_text_04

ENDFORM construir_catalogo_FDEX

amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc

DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

CHECK lt_break[] IS NOT INITIAL

IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix

MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF

IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix

MOVEti_badi-linea TO l_lineti_badi-programa TO l_program

READ TABLE lt_break INTO wa_break

WITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF

IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix

MOVEti_bte-linea TO l_lineti_bte-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF

ENDFORM cargar_break

amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

DATAl_tabix TYPE sy-tabix

l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

SELECT SINGLE FROM d010incWHERE include = p_programa

IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF

MOVEp_linea TO l_linep_programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM asignar_break

amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit

IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF

PERFORM get_objects Get Objects

ENDFORM buscar_user_exit

amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects

DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area

DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix

SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog

IF sy-subrc = 0

SORT ti_tadir BY obj_name devclass

SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass

IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF

- Get UserExit namesLOOP AT ti_jtab

SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E

APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area

l_fname = ti_final-member

CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include

LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP

CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP

ENDFORM get_objects

amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X

ENDFORM construir_catalogo_uexit

amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------

FORM visualizar_ampliacion

DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF

SELECT SINGLE FROM modsapWHERE member EQ l_member

IF sy-subrc IS INITIAL

Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member

ENDIF

ENDFORM visualizar_ampliacion

amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea

RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs

REFRESH r_event r_procs

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event

SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs

SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE

ENDFORM visualizar_bte

amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE

----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c

DATAl_linea(500) TYPE c

DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

MOVE lt_fields-value TO l_linea

PERFORM visualizar_bte USING p_tipol_linea

ENDFORM cargar_bte

amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface

DATAl_linea(500) TYPE c

DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE

InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF

ENDFORM visualizar_interface

amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones

CHECK p_sust IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922

ENDFORM buscar_sustituciones

amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST

ENDFORM construir_catalogo_sust

amp---------------------------------------------------------------------

amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones

ENDFORM TOP_OF_PAGE_SUST

amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4

CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_sust

amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones

CHECK p_val IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931

ENDFORM buscar_validaciones

amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID

ENDFORM construir_catalogo_val

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones

ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2

CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_val

amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto

DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF

SELECT SINGLE FROM modsapWHERE name EQ l_name

IF sy-subrc IS INITIAL

MOVE l_name TO l_member

SELECT SINGLE FROM modactWHERE member EQ l_member

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF

ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF

ENDFORM visualizar_proyecto

amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel

APPEND ti_enh

ENDIFENDIFENDIF

ENDFORM buscar_punto_ampliacioacuten

amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_enh

amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh

DATA l_obj_name TYPE enhobj-obj_name

DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name

CHECK p_enh IS NOT INITIAL

IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF

REFRESH lt_obj_name

LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP

SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name

ENDFORM buscar_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X

ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME

ENDFORM construir_catalogo_enhobj

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENHOBJ

amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM bi_se19

amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro

CLEAR ti_bdcdatati_bdcdata-program = program

ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata

ENDFORM BDC_DYNPRO

amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval

CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata

ENDFORM BDC_FIELD

amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa

DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)

CHECK ti_gb31t[] IS NOT INITIAL

DO

Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2

IF l_exit EQ XEXITENDIF

CHECK l_exit IS INITIAL

Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND

CHECK l_boolpool IS NOT INITIAL

MOVE l_boolpool TO l_repid

Visualizo el programaPERFORM visualizar_linea USING l_repid01

ENDDO

ENDFORM visualizar_programa

amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope

STATICS l_flag TYPE c

DATA l_tit(65) TYPE c

CHECK l_flag IS INITIAL

l_flag = X

WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline

4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM texto_tope

amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf

DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off

CHECK l_off IS NOT INITIAL

ADD 7 TO l_offl_cf = 500 - l_off

SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_enhspotname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1

invalid_object_type = 2OTHERS = 3

ENDFORM bi_se18

amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit

DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE

DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE

MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE

MOVE lt_fields-value TO l_nameENDIF

Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_

LOOP AT lt_tfdir

CLEARl_group l_include l_namespace l_str_area

l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl

IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl

CHECK sy-subrc IS INITIAL

Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP

CHECK l_flag IS INITIAL

La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value

ENDFORM visualizar_fm_exit

amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter

tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten

ENDFORM def_text_parameter

amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones

Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt

Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt

Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt

icon_create RESULT name text infoicon_create

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 14: buscar_ampliaciones FOROSAP

ENDIF

ENDFORM PROCURA_FUNCAO

amp---------------------------------------------------------------------amp Form VERIFICA_INCLUDE_FUNCAO_SUBMITamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM verifica_include_funcao_submit

CHECK p_ue IS NOT INITIAL OR p_badi IS NOT INITIALOR p_bte IS NOT INITIAL OR p_enh IS NOT INITIAL

LOOP AT ti_includes

ADD 1 TO vg_contadorDESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfillMOVE ti_includes-nivel TO vg_nivelADD 1 TO vg_nivel

- BORRA TABLA INTERNAREFRESH ti_programa

- REALIZA LECTURA DE INCLUDEFUNCION ALMACENANDO EN TABLA INTERNAREAD REPORT ti_includes-nome INTO ti_programa

LOOP AT ti_programa

- PROCURA POR INCLUDESIF p_incl EQ c_xPERFORM procura_includeENDIF- PROCURA POR FUNCIONIF p_func EQ c_xPERFORM procura_funcaoENDIF- PROCURA POR SUBMITIF p_submit EQ c_xPERFORM procura_submitENDIF

ENDLOOP

ENDLOOP

ENDFORM VERIFICA_INCLUDE_FUNCAO_SUBMIT

amp---------------------------------------------------------------------amp Form EVITAR_TIME_OUTamp--------------------------------------------------------------------- Evito el TIME OUT visualizando un mensaje----------------------------------------------------------------------FORM evitar_time_out USING p_tfill LIKE sy-tfill

DATAvl_total(10) TYPE n

vl_atual(10) TYPE nl_tout LIKE sy-timlol_time(10) TYPE c

GET TIME FIELD l_tout

l_tout = l_tout - w_tini

MOVEp_tfill TO vl_totalvg_contador TO vl_atual

SHIFT vl_total LEFT DELETING LEADING 0SHIFT vl_atual LEFT DELETING LEADING 0WRITE l_tout TO l_time

CONCATENATE Tpo l_time Total vl_total Actual vl_atualINTO vg_textoSEPARATED BY space

CALL FUNCTION SAPGUI_PROGRESS_INDICATOREXPORTINGtext = vg_texto

ENDFORM EVITAR_TIME_OUT

amp---------------------------------------------------------------------amp Form PROCURA_SUBMITamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_submit

CLEAR vg_conta_espaco vg_palavra vg_ini_contagem

- VERIFICA SI LA LINEA DEL PROGRAMA EXISTE ALGUN INCLUDESEARCH ti_programa-cf FOR c_submit- SE ENCONTRO EN EL INCLUDE Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DEL INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF vg_ini_contagem EQ c_x AND vg_caracter IS INITIALADD 1 TO vg_conta_espacoENDIF

IF NOT vg_caracter IS INITIALMOVE c_x TO vg_ini_contagemIF vg_caracter EQ c_pontoEXITENDIF- ARMA PALABRAIF vg_conta_espaco LT 2CONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACION

TRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_submitCLEAR vg_palavraENDIFELSEEXITENDIFENDIFENDDO- BUSCA NOMBRE DE LA FUNCION PARA FUTURA BUSQUEDA POR USER EXITREAD TABLE ti_includes WITH KEY nome = vg_palavraIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_palavra TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIFENDIF

ENDFORM PROCURA_SUBMIT

amp---------------------------------------------------------------------amp Form CONSISTI_PARAMETROSamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM consisti_parametros

IF p_nivel IS INITIALMOVE 1 TO p_nivelENDIF

IF p_prog IS INITIAL AND p_tcode IS INITIAL- EL NOMBRE DEL PROGRAMA Y EL NOMBRE DE LA TRANSACCION NO PUEDEN SER- NULOS UNO DE ELLOS DEBE SER INFORMADOMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e01STOPENDIF

IF NOT p_prog IS INITIAL AND NOT p_tcode IS INITIAL- SE SOLICITA AL USUARIO QUE INFORME NOMBRE DE PROGRAMA O TRANSACCIONMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e02STOPENDIF

IF p_ue IS INITIAL AND p_badi IS INITIAL AND p_bte IS INITIALAND p_sust IS INITIAL AND p_val IS INITIAL AND p_fdex IS INITIALAND p_enh IS INITIAL- SE SOLICITA AL USUARIO QUE INFORME UN TIPO DE MEJORAMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e03STOPENDIF

ENDFORM CONSISTI_PARAMETROS

amp---------------------------------------------------------------------

amp Form INICIALIZA_TABELAamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM inicializa_tabela

DATAe_tstc TYPE tstcl_tcode TYPE sy-tcode

REFRESH ti_includes

IF NOT p_prog IS INITIAL

MOVE p_prog TO ti_includes-nome0 TO ti_includes-nivelAPPEND ti_includes

- BUSCO EL PROGRAMAREAD REPORT ti_includes-nome INTO ti_programa

IF sy-subrc EQ 0REFRESH ti_programaELSE- EL PROGRAMA NO EXISTEMESSAGE s893(pz) WITH El programa p_prog no existeSTOPENDIF

ELSEIF NOT p_tcode IS INITIAL

SELECT SINGLE FROM tstcWHERE tcode EQ p_tcode

IF sy-subrc EQ 0

IF tstc-pgmna IS NOT INITIALMOVE tstc-pgmna TO ti_includes-nome0 TO ti_includes-nivelAPPEND ti_includesELSE Se trata de una transaccioacuten de paraacutemetros Obtengo la transaccioacuten asociadaCALL FUNCTION RS_TRANSACTION_SINGLE_GETEXPORTINGparameter_tcode = p_tcodeIMPORTINGtcode = l_tcode

SELECT SINGLE INTO e_tstcFROM tstcWHERE tcode EQ l_tcode

IF sy-subrc EQ 0MOVE e_tstc-pgmna TO ti_includes-nome0 TO ti_includes-nivel

APPEND ti_includesELSE- LA TRANSACCIOacuteN NO EXISTEMESSAGE s893(pz) WITH La transaccioacuten p_tcode no existeENDIFENDIFELSE- LA TRANSACCIOacuteN NO EXISTEMESSAGE s893(pz) WITH La transaccioacuten p_tcode no existeSTOPENDIFENDIF

ENDFORM INICIALIZA_TABELA

amp---------------------------------------------------------------------amp Form armar_alvamp--------------------------------------------------------------------- Armo el ALV----------------------------------------------------------------------FORM armar_alv

DATAl_repid TYPE sy-repid

MOVE sy-repid TO l_repid

CALL FUNCTION REUSE_ALV_BLOCK_LIST_INITEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMAND

IF p_ue IS NOT INITIALPERFORM construir_catalogo_exitPERFORM definir_layout USING TI_USER_EXITCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGEPERFORM sort TABLES ti_sortUSING TI_USER_EXIT

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_USER_EXITit_events = ti_eventsit_sort = ti_sorti_text = User-exitTABLESt_outtab = ti_user_exitEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

PERFORM construir_catalogo_uexitPERFORM definir_layout USING TI_FINAL

CHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_UEXITPERFORM sort TABLES ti_sortUSING TI_FINAL

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FINALit_events = ti_eventsit_sort = ti_sorti_text = User-exit TxCMODTABLESt_outtab = ti_finalEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_badi IS NOT INITIALPERFORM construir_catalogo_badiPERFORM definir_layout USING TI_BADICHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BADIPERFORM sort TABLES ti_sortUSING TI_BADI

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_BADIit_events = ti_eventsit_sort = ti_sorti_text = BadisTABLESt_outtab = ti_badiEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_bte IS NOT INITIALPERFORM construir_catalogo_btePERFORM definir_layout USING TI_BTECHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BTEPERFORM sort TABLES ti_sortUSING TI_BTE

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layout

it_fieldcat = ti_cati_tabname = TI_BTEit_events = ti_eventsit_sort = ti_sorti_text = BTETABLESt_outtab = ti_bteEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_enh IS NOT INITIALPERFORM construir_catalogo_enhPERFORM definir_layout USING TI_ENHCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHPERFORM sort TABLES ti_sortUSING TI_ENH

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHit_events = ti_eventsit_sort = ti_sorti_text = ENHTABLESt_outtab = ti_enhEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

PERFORM construir_catalogo_enhobjPERFORM definir_layout USING TI_ENHOBJCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHOBJPERFORM sort TABLES ti_sortUSING TI_ENHOBJ

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHOBJit_events = ti_eventsit_sort = ti_sorti_text = ENHOBJTABLESt_outtab = ti_enhobjEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_sust IS NOT INITIALPERFORM construir_catalogo_sustPERFORM definir_layout USING TI_SUSTCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_SUSTPERFORM sort TABLES ti_sortUSING TI_SUST

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_SUSTit_events = ti_eventsit_sort = ti_sorti_text = SustitucionesTABLESt_outtab = ti_sustEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_val IS NOT INITIALPERFORM construir_catalogo_valPERFORM definir_layout USING TI_VALCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_VALPERFORM sort TABLES ti_sortUSING TI_VAL

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_VALit_events = ti_eventsit_sort = ti_sorti_text = ValidacionesTABLESt_outtab = ti_valEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_fdex IS NOT INITIALPERFORM construir_catalogo_fdexPERFORM definir_layout USING TI_FDEXCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_FDEX

PERFORM sort TABLES ti_sortUSING TI_FDEX

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FDEXit_events = ti_eventsit_sort = ti_sorti_text = Field-exitTABLESt_outtab = ti_fdexEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

ENDFORM armar_alv

amp---------------------------------------------------------------------amp Form construir_catalogo_EXITamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_exit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_USER_EXITi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03

CF X c_text_04

ENDFORM construir_catalogo_EXIT

amp---------------------------------------------------------------------amp Form asignar_campo_a_catalogoamp--------------------------------------------------------------------- Asignar campo al catalogo ALV----------------------------------------------------------------------FORM asignar_campo_a_catalogo TABLES pt_cat STRUCTURE wa_catUSING p_fieldname LIKE wa_cat-fieldnamep_key LIKE wa_cat-keyp_col_pos TYPE cp_fix_column LIKE wa_cat-fix_columnp_hotspot LIKE wa_cat-hotspotp_do_sum LIKE wa_cat-do_sump_input LIKE wa_cat-inputp_checkbox LIKE wa_cat-checkboxp_no_out LIKE wa_cat-no_outp_icon LIKE wa_cat-iconp_reptext_ddic LIKE wa_cat-reptext_ddic

STATICS l_col_pos LIKE sy-cucol

Asignar atributos de campo en el catalogo de cabecera ALVCLEAR wa_catREAD TABLE pt_cat INTO wa_catWITH KEY fieldname = p_fieldname

CHECK sy-subrc EQ 0

IF NOT p_reptext_ddic IS INITIALwa_cat-seltext_l = wa_cat-seltext_m =wa_cat-seltext_s = wa_cat-reptext_ddic = p_reptext_ddicENDIF

IF p_col_pos EQ X Inicializo el conteo para ordenar las columnasl_col_pos = 1ELSEADD 1 TO l_col_posENDIF

wa_cat-fieldname = p_fieldnamewa_cat-key = p_keywa_cat-col_pos = l_col_poswa_cat-fix_column = p_fix_columnwa_cat-hotspot = p_hotspotwa_cat-do_sum = p_do_sumwa_cat-edit = wa_cat-input = p_inputwa_cat-checkbox = p_checkboxwa_cat-no_out = p_no_outwa_cat-icon = p_icon

MODIFY pt_cat FROM wa_cat INDEX sy-tabix

ENDFORM asignar_campo_a_catalogo

amp---------------------------------------------------------------------amp Form definir_layoutamp--------------------------------------------------------------------- Definir atributos del layout de reporte----------------------------------------------------------------------FORM definir_layout USING p_table TYPE slis_layout_alv-box_tabnameCHANGING p_layout TYPE slis_layout_alv

CLEAR p_layout

IF p_table NE TI_CIMP Marco el campo para la seleccioacutenp_layout-box_fieldname = SELp_layout-box_tabname = p_tableENDIFp_layout-zebra = Xp_layout-colwidth_optimize = Xp_layout-no_vline = p_layout-no_colhead = p_layout-lights_condense = Xp_layout-detail_popup = Xp_layout-detail_initial_lines = Xp_layout-flexible_key = p_layout-key_hotspot = p_layout-confirmation_prompt = X

ENDFORM definir_layout

amp---------------------------------------------------------------------amp Form construir_eventosamp--------------------------------------------------------------------- Asignar eventos soportados----------------------------------------------------------------------FORM construir_eventos USING p_form LIKE wa_events-formDATAl_type(1) TYPE n

REFRESH ti_eventsCLEAR wa_events

ALV Simple Block appendl_type = 2

Buscar secciones para eventosCALL FUNCTION REUSE_ALV_EVENTS_GETEXPORTINGi_list_type = l_typeIMPORTINGet_events = ti_events

Leer evento TOP_OF_PAGEREAD TABLE ti_events WITH KEY name = slis_ev_top_of_pageINTO wa_events Asignar Rutina FORM TOP_OF_PAGE a eventoIF sy-subrc = 0MOVE p_form TO wa_events-formMODIFY ti_events FROM wa_events INDEX sy-tabixENDIF

ENDFORM construir_eventos

amp---------------------------------------------------------------------amp Form top_of_pageamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_user_exitWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUser-exit

ENDFORM top_of_page

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_UEXITamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_uexit

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_finalWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUSER-EXITs TxSMOD

ENDFORM TOP_OF_PAGE_UEXIT

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_FDEXamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_fdex

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_fdexWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incFIELD-EXITs

ENDFORM TOP_OF_PAGE_FDEX

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BADIamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_badi

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_badiWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBADIs

ENDFORM TOP_OF_PAGE_BADI

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BTEamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_bte

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_bteWRITE sy-tfill TO l_tfill_cant

CONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBTEs

ENDFORM TOP_OF_PAGE_BTE

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enh

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_enhWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENH

amp---------------------------------------------------------------------amp Form sortamp--------------------------------------------------------------------- Creo el sort del ALV (FM)---------------------------------------------------------------------- --gtPT_sort Tabla --gtP_tabname Nombre de la tabla----------------------------------------------------------------------FORM sort TABLES pt_sortUSING p_tabname TYPE any

CLEAR pt_sort wa_sortREFRESH pt_sort

CASE p_tabnameWHEN TI_SUST

wa_sort-fieldname = SUBSTIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = SUBSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = CONSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN TI_VAL

wa_sort-fieldname = VALIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = VALSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN TI_ENHOBJ

wa_sort-fieldname = ENHNAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = VERSIONwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN OTHERS

IF p_tabname NE TI_FINAL

wa_sort-fieldname = TIPOwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

IF p_tabname NE TI_FDEX

wa_sort-fieldname = NIVELwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = PROGRAMAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = LINEAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

ENDIF

ELSE

wa_sort-fieldname = NAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = MEMBERwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sortENDIFENDCASE

ENDFORM sort

amp---------------------------------------------------------------------amp Form mostrar_listadoamp--------------------------------------------------------------------- Mostrar listado ALV----------------------------------------------------------------------FORM mostrar_listado

wa_print-reserve_lines = 2

CALL FUNCTION REUSE_ALV_BLOCK_LIST_DISPLAY

EXPORTINGis_print = wa_printEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM mostrar_listado

amp---------------------------------------------------------------------amp Form user_commandamp--------------------------------------------------------------------- Evaluar acciones del usuario----------------------------------------------------------------------FORM user_command USING ucomm LIKE sy-ucommsfields TYPE slis_selfield

DATA l_break TYPE c

Rescatar el registro seleccionadoCASE sfields-tabnameWHEN TI_USER_EXITREAD TABLE ti_user_exit INDEX sfields-tabindexWHEN TI_BADIREAD TABLE ti_badi INDEX sfields-tabindexWHEN TI_BTEREAD TABLE ti_bte INDEX sfields-tabindexWHEN TI_ENHREAD TABLE ti_enh INDEX sfields-tabindexWHEN TI_ENHOBJREAD TABLE ti_enhobj INDEX sfields-tabindexWHEN TI_FDEXREAD TABLE ti_fdex INDEX sfields-tabindexWHEN TI_FINALREAD TABLE ti_final INDEX sfields-tabindexWHEN TI_SUSTREAD TABLE ti_sust INDEX sfields-tabindexWHEN TI_VALREAD TABLE ti_val INDEX sfields-tabindexWHEN TI_CIMPREAD TABLE ti_cimp INDEX sfields-tabindexENDCASE

Seleccion de opcionCASE ucomm DOUBLE CLICKWHEN ampIC1 Evaluar valor de campo seleccionadoCHECK NOT sfields-value IS INITIAL

CASE sfields-tabnameWHEN TI_USER_EXIT USER-EXITIF ti_user_exit-tipo EQ sfields-value(4)SEARCH ti_user_exit-cf FOR c_enhanceCHECK sy-subrc EQ 0PERFORM visualizar_exit USING ti_user_exit-programati_user_exit-cf

ELSEIF ti_user_exit-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_user_exit-programati_user_exit-lineaMOVE X TO l_breakELSEIF ti_user_exit-break EQ sfields-value(4)OR ti_user_exit-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_user_exit-programati_user_exit-lineati_user_exit-breakMOVE X TO l_breakENDIF

WHEN TI_FINAL USER-EXIT Tx CMODIF ti_final-name EQ sfields-valueCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = ti_final-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSEIF ti_final-include EQ sfields-valuePERFORM visualizar_linea USING ti_final-programa1MOVE X TO l_breakENDIF

WHEN TI_BADI BadiIF ti_badi-tipo EQ sfields-value(4)PERFORM visualizar_badi USING ti_badi-cfELSEIF ti_badi-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_badi-programati_badi-lineaMOVE X TO l_breakELSEIF ti_badi-break EQ sfields-value(4)OR ti_badi-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_badi-programati_badi-lineati_badi-breakMOVE X TO l_breakENDIF

WHEN TI_BTE BTEIF ti_bte-tipo EQ sfields-value(4)PERFORM fibf USING ti_bte-cfELSEIF ti_bte-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_bte-programati_bte-lineaMOVE X TO l_breakELSEIF ti_bte-break EQ sfields-value(4)OR ti_bte-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_bte-programati_bte-linea

ti_bte-breakMOVE X TO l_breakENDIF

WHEN TI_ENH Punto de ampliacioacutenIF ti_enh-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_enh-programati_enh-lineaMOVE X TO l_breakELSEIF ti_enh-tipo EQ sfields-value(4)PERFORM bi_se18 USING ti_enh-cfENDIF

WHEN TI_ENHOBJ Punto de ampliacioacutenIF ti_enhobj-enhname EQ sfields-value(30)PERFORM bi_se19 USING ti_enhobj-enhnameENDIF

WHEN TI_SUST SustitucionesIF ti_sust-substid EQ sfields-value(7) ORti_sust-subseqnr EQ sfields-value(3)PERFORM visualizar_sust USING ti_sust-substidti_sust-subseqnrENDIF

WHEN TI_VAL ValidacionesIF ti_val-valid EQ sfields-value(7) ORti_val-valseqnr EQ sfields-value(3)PERFORM visualizar_val USING ti_val-validti_val-valseqnrENDIF

WHEN TI_FDEX Field-exitIF ti_fdex-tipo EQ sfields-valueSUBMIT rsmodprf AND RETURNELSEIF ti_fdex-cf(60) EQ sfields-value Visualizo el field-exitCALL FUNCTION RS_FUNCTION_SHOWEXPORTINGfuncname = ti_fdex-cf

CALL FUNCTION RS_NAVIGATION_MONITORENDIF

WHEN TI_CIMP Customer implementation

CASE sfields-fieldnameWHEN ENHNAMEPERFORM bi_se19 USING ti_cimp-enhnameWHEN ENHINCLUDEPERFORM visualizar_enh_cf USING ti_cimp-enhinclude

WHEN OTHERS DO NOTHING ENDCASE

WHEN OTHERS DO NOTHING ENDCASE

WHEN OTHERS DO NOTHING ENDCASE

IF l_break IS NOT INITIAL AND sfields-tabname NE TI_CIMPWAIT UP TO 1 SECONDSPERFORM cargar_breakENDIFsfields-refresh = X

ENDFORM user_command

amp---------------------------------------------------------------------amp Form visualizar_lineaamp--------------------------------------------------------------------- Visualizo la linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_linea USING p_programa TYPE sy-repidp_linea

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_programaobject_type = c_typeposition = p_lineaEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM visualizar_linea

amp---------------------------------------------------------------------amp Form buscar_exitamp--------------------------------------------------------------------- Buscar USER-EXIT----------------------------------------------------------------------FORM buscar_exit

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN USER-EXITSEARCH ti_programa-cf FOR c_user_exit- SE ENCONTRO UN USER-EXIT Y SE VERIFICA SI LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS PERFORMSEARCH ti_programa-cf FOR c_performCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LAS ASIGNACIONESSEARCH ti_programa-cf FOR c_igualCHECK sy-subrc NE 0

CLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INIacuteCIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF

ENDFORM buscar_exit

amp---------------------------------------------------------------------amp Form buscar_badiamp--------------------------------------------------------------------- Buscar BADI----------------------------------------------------------------------FORM buscar_badi

DATAl_subrc LIKE sy-subrc

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BADISEARCH ti_programa-cf FOR c_badi- SE ENCONTRO UNA BADI Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

SEARCH ti_programa-cf FOR c_includeIF sy-subrc NE 0CLEAR l_subrcSEARCH ti_programa-cf FOR c_methodIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_funcao_2IF sy-subrc NE 0SEARCH ti_programa-cf FOR c_performIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_type_refIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_formMOVE 4 TO l_subrcENDIFENDIFENDIFENDIF

IF l_subrc EQ 0CLEAR ti_badi

- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIFELSECHECK p_handl IS NOT INITIAL- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA INSTANCIA DE- UNA BADISEARCH ti_programa-cf FOR c_handler- SE ENCONTRO UNA INSTANCIA DE IMPLEMENACIOacuteN Y SE VERIFICA SI LA LINEA- NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

SEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0CLEAR ti_badi- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIF

ENDFORM buscar_badi

amp---------------------------------------------------------------------amp Form buscar_bteamp--------------------------------------------------------------------- Buscar BTE----------------------------------------------------------------------FORM buscar_bte

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OPEN_FI_PERFORM

- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endform

CHECK sy-subrc NE 0

CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte1- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OUTBOUND_CALL

- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0

CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF

ENDFORM buscar_bte

amp---------------------------------------------------------------------amp Form repid_f4amp--------------------------------------------------------------------- Ejecuto el F4 para buscar programas----------------------------------------------------------------------FORM repid_f4

CALL FUNCTION REPOSITORY_INFO_SYSTEM_F4EXPORTINGobject_type = PROGobject_name = p_progsuppress_selection = XIMPORTINGobject_name_selected = p_progEXCEPTIONS

cancel = 1wrong_type = 2OTHERS = 3

ENDFORM repid_f4

amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf

DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

SEARCH p_cf FOR 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 INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

READ TABLE lt_cf INDEX 4

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

CHECK sy-subrc IS INITIAL

Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten

textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer

CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4

IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF

WHEN OTHERS Do Nothing ENDCASE

ENDFORM visualizar_badi

amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf

DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

CLEAR d010inc modsap modact

Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid

IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF

SEARCH p_cf FOR c_enhance

CHECK sy-subrc IS INITIAL

REFRESH lt_cf

l_cf = 500 - sy-fdpos

MOVE p_cf+sy-fdpos(l_cf) TO l_linea

SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3

TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS

Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _

Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit

CHECK sy-subrc IS INITIAL

Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM

modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3

ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname

CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ENDIF

ENDFORM visualizar_exit

amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit

DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo

DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe

DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE

CHECK p_fdex IS NOT INITIAL

CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe

MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex

IF p_prog IS NOT INITIAL

MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF

Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog

LOOP AT lt_d020s

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

REFRESH lt_d021s

Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4

Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X

SEARCH lt_d021s-fnam FOR -

IF sy-subrc IS INITIAL

MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum

Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname

APPEND lt_campo

ENDIF

ENDLOOPENDLOOP

CHECK lt_campo[] IS NOT INITIAL

SORT lt_campo BY repid dnum tabname fieldname

DELETE ADJACENT DUPLICATES FROM lt_campo

Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname

SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l

LOOP AT lt_dd03l

CLEAR tddir tddirs

SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname

CHECK sy-subrc IS INITIAL

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog

CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF

Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf

IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF

READ TABLE lt_fe WITH KEY cf = lt_fe-cf

CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP

LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex

ENDLOOP

ENDFORM buscar_field_exit

amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf

DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c

SEARCH p_cf FOR c_bte

IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ELSE

SEARCH p_cf FOR c_bte1

CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ENDIF

IF l_tipo IS NOT INITIAL

PERFORM visualizar_bte USING l_tipol_linea

ELSECALL TRANSACTION FIBFENDIF

ENDFORM fibf

amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT

EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM breakpoint

amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_badi

amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE

i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_bte

amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X TIPO X X c_text_05CF X c_text_04

ENDFORM construir_catalogo_FDEX

amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc

DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

CHECK lt_break[] IS NOT INITIAL

IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix

MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF

IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix

MOVEti_badi-linea TO l_lineti_badi-programa TO l_program

READ TABLE lt_break INTO wa_break

WITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF

IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix

MOVEti_bte-linea TO l_lineti_bte-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF

ENDFORM cargar_break

amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

DATAl_tabix TYPE sy-tabix

l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

SELECT SINGLE FROM d010incWHERE include = p_programa

IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF

MOVEp_linea TO l_linep_programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM asignar_break

amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit

IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF

PERFORM get_objects Get Objects

ENDFORM buscar_user_exit

amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects

DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area

DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix

SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog

IF sy-subrc = 0

SORT ti_tadir BY obj_name devclass

SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass

IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF

- Get UserExit namesLOOP AT ti_jtab

SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E

APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area

l_fname = ti_final-member

CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include

LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP

CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP

ENDFORM get_objects

amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X

ENDFORM construir_catalogo_uexit

amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------

FORM visualizar_ampliacion

DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF

SELECT SINGLE FROM modsapWHERE member EQ l_member

IF sy-subrc IS INITIAL

Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member

ENDIF

ENDFORM visualizar_ampliacion

amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea

RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs

REFRESH r_event r_procs

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event

SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs

SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE

ENDFORM visualizar_bte

amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE

----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c

DATAl_linea(500) TYPE c

DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

MOVE lt_fields-value TO l_linea

PERFORM visualizar_bte USING p_tipol_linea

ENDFORM cargar_bte

amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface

DATAl_linea(500) TYPE c

DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE

InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF

ENDFORM visualizar_interface

amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones

CHECK p_sust IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922

ENDFORM buscar_sustituciones

amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST

ENDFORM construir_catalogo_sust

amp---------------------------------------------------------------------

amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones

ENDFORM TOP_OF_PAGE_SUST

amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4

CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_sust

amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones

CHECK p_val IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931

ENDFORM buscar_validaciones

amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID

ENDFORM construir_catalogo_val

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones

ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2

CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_val

amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto

DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF

SELECT SINGLE FROM modsapWHERE name EQ l_name

IF sy-subrc IS INITIAL

MOVE l_name TO l_member

SELECT SINGLE FROM modactWHERE member EQ l_member

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF

ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF

ENDFORM visualizar_proyecto

amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel

APPEND ti_enh

ENDIFENDIFENDIF

ENDFORM buscar_punto_ampliacioacuten

amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_enh

amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh

DATA l_obj_name TYPE enhobj-obj_name

DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name

CHECK p_enh IS NOT INITIAL

IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF

REFRESH lt_obj_name

LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP

SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name

ENDFORM buscar_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X

ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME

ENDFORM construir_catalogo_enhobj

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENHOBJ

amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM bi_se19

amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro

CLEAR ti_bdcdatati_bdcdata-program = program

ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata

ENDFORM BDC_DYNPRO

amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval

CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata

ENDFORM BDC_FIELD

amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa

DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)

CHECK ti_gb31t[] IS NOT INITIAL

DO

Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2

IF l_exit EQ XEXITENDIF

CHECK l_exit IS INITIAL

Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND

CHECK l_boolpool IS NOT INITIAL

MOVE l_boolpool TO l_repid

Visualizo el programaPERFORM visualizar_linea USING l_repid01

ENDDO

ENDFORM visualizar_programa

amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope

STATICS l_flag TYPE c

DATA l_tit(65) TYPE c

CHECK l_flag IS INITIAL

l_flag = X

WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline

4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM texto_tope

amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf

DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off

CHECK l_off IS NOT INITIAL

ADD 7 TO l_offl_cf = 500 - l_off

SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_enhspotname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1

invalid_object_type = 2OTHERS = 3

ENDFORM bi_se18

amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit

DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE

DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE

MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE

MOVE lt_fields-value TO l_nameENDIF

Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_

LOOP AT lt_tfdir

CLEARl_group l_include l_namespace l_str_area

l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl

IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl

CHECK sy-subrc IS INITIAL

Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP

CHECK l_flag IS INITIAL

La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value

ENDFORM visualizar_fm_exit

amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter

tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten

ENDFORM def_text_parameter

amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones

Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt

Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt

Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt

icon_create RESULT name text infoicon_create

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 15: buscar_ampliaciones FOROSAP

vl_atual(10) TYPE nl_tout LIKE sy-timlol_time(10) TYPE c

GET TIME FIELD l_tout

l_tout = l_tout - w_tini

MOVEp_tfill TO vl_totalvg_contador TO vl_atual

SHIFT vl_total LEFT DELETING LEADING 0SHIFT vl_atual LEFT DELETING LEADING 0WRITE l_tout TO l_time

CONCATENATE Tpo l_time Total vl_total Actual vl_atualINTO vg_textoSEPARATED BY space

CALL FUNCTION SAPGUI_PROGRESS_INDICATOREXPORTINGtext = vg_texto

ENDFORM EVITAR_TIME_OUT

amp---------------------------------------------------------------------amp Form PROCURA_SUBMITamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM procura_submit

CLEAR vg_conta_espaco vg_palavra vg_ini_contagem

- VERIFICA SI LA LINEA DEL PROGRAMA EXISTE ALGUN INCLUDESEARCH ti_programa-cf FOR c_submit- SE ENCONTRO EN EL INCLUDE Y LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario- VERIFICA TODOS LOS 500 CARACTERES DE LA LINEA PARA MONTAR NOMBRE- DEL INCLUDEDO 500 TIMESvg_inicial = sy-index - 1MOVE ti_programa-cf+vg_inicial(1) TO vg_caracterIF vg_ini_contagem EQ c_x AND vg_caracter IS INITIALADD 1 TO vg_conta_espacoENDIF

IF NOT vg_caracter IS INITIALMOVE c_x TO vg_ini_contagemIF vg_caracter EQ c_pontoEXITENDIF- ARMA PALABRAIF vg_conta_espaco LT 2CONCATENATE vg_palavra vg_caracter INTO vg_palavra- CONVIERTE A MAYUSCULA PARA FUTURA COMPARACION

TRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_submitCLEAR vg_palavraENDIFELSEEXITENDIFENDIFENDDO- BUSCA NOMBRE DE LA FUNCION PARA FUTURA BUSQUEDA POR USER EXITREAD TABLE ti_includes WITH KEY nome = vg_palavraIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_palavra TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIFENDIF

ENDFORM PROCURA_SUBMIT

amp---------------------------------------------------------------------amp Form CONSISTI_PARAMETROSamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM consisti_parametros

IF p_nivel IS INITIALMOVE 1 TO p_nivelENDIF

IF p_prog IS INITIAL AND p_tcode IS INITIAL- EL NOMBRE DEL PROGRAMA Y EL NOMBRE DE LA TRANSACCION NO PUEDEN SER- NULOS UNO DE ELLOS DEBE SER INFORMADOMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e01STOPENDIF

IF NOT p_prog IS INITIAL AND NOT p_tcode IS INITIAL- SE SOLICITA AL USUARIO QUE INFORME NOMBRE DE PROGRAMA O TRANSACCIONMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e02STOPENDIF

IF p_ue IS INITIAL AND p_badi IS INITIAL AND p_bte IS INITIALAND p_sust IS INITIAL AND p_val IS INITIAL AND p_fdex IS INITIALAND p_enh IS INITIAL- SE SOLICITA AL USUARIO QUE INFORME UN TIPO DE MEJORAMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e03STOPENDIF

ENDFORM CONSISTI_PARAMETROS

amp---------------------------------------------------------------------

amp Form INICIALIZA_TABELAamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM inicializa_tabela

DATAe_tstc TYPE tstcl_tcode TYPE sy-tcode

REFRESH ti_includes

IF NOT p_prog IS INITIAL

MOVE p_prog TO ti_includes-nome0 TO ti_includes-nivelAPPEND ti_includes

- BUSCO EL PROGRAMAREAD REPORT ti_includes-nome INTO ti_programa

IF sy-subrc EQ 0REFRESH ti_programaELSE- EL PROGRAMA NO EXISTEMESSAGE s893(pz) WITH El programa p_prog no existeSTOPENDIF

ELSEIF NOT p_tcode IS INITIAL

SELECT SINGLE FROM tstcWHERE tcode EQ p_tcode

IF sy-subrc EQ 0

IF tstc-pgmna IS NOT INITIALMOVE tstc-pgmna TO ti_includes-nome0 TO ti_includes-nivelAPPEND ti_includesELSE Se trata de una transaccioacuten de paraacutemetros Obtengo la transaccioacuten asociadaCALL FUNCTION RS_TRANSACTION_SINGLE_GETEXPORTINGparameter_tcode = p_tcodeIMPORTINGtcode = l_tcode

SELECT SINGLE INTO e_tstcFROM tstcWHERE tcode EQ l_tcode

IF sy-subrc EQ 0MOVE e_tstc-pgmna TO ti_includes-nome0 TO ti_includes-nivel

APPEND ti_includesELSE- LA TRANSACCIOacuteN NO EXISTEMESSAGE s893(pz) WITH La transaccioacuten p_tcode no existeENDIFENDIFELSE- LA TRANSACCIOacuteN NO EXISTEMESSAGE s893(pz) WITH La transaccioacuten p_tcode no existeSTOPENDIFENDIF

ENDFORM INICIALIZA_TABELA

amp---------------------------------------------------------------------amp Form armar_alvamp--------------------------------------------------------------------- Armo el ALV----------------------------------------------------------------------FORM armar_alv

DATAl_repid TYPE sy-repid

MOVE sy-repid TO l_repid

CALL FUNCTION REUSE_ALV_BLOCK_LIST_INITEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMAND

IF p_ue IS NOT INITIALPERFORM construir_catalogo_exitPERFORM definir_layout USING TI_USER_EXITCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGEPERFORM sort TABLES ti_sortUSING TI_USER_EXIT

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_USER_EXITit_events = ti_eventsit_sort = ti_sorti_text = User-exitTABLESt_outtab = ti_user_exitEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

PERFORM construir_catalogo_uexitPERFORM definir_layout USING TI_FINAL

CHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_UEXITPERFORM sort TABLES ti_sortUSING TI_FINAL

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FINALit_events = ti_eventsit_sort = ti_sorti_text = User-exit TxCMODTABLESt_outtab = ti_finalEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_badi IS NOT INITIALPERFORM construir_catalogo_badiPERFORM definir_layout USING TI_BADICHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BADIPERFORM sort TABLES ti_sortUSING TI_BADI

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_BADIit_events = ti_eventsit_sort = ti_sorti_text = BadisTABLESt_outtab = ti_badiEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_bte IS NOT INITIALPERFORM construir_catalogo_btePERFORM definir_layout USING TI_BTECHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BTEPERFORM sort TABLES ti_sortUSING TI_BTE

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layout

it_fieldcat = ti_cati_tabname = TI_BTEit_events = ti_eventsit_sort = ti_sorti_text = BTETABLESt_outtab = ti_bteEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_enh IS NOT INITIALPERFORM construir_catalogo_enhPERFORM definir_layout USING TI_ENHCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHPERFORM sort TABLES ti_sortUSING TI_ENH

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHit_events = ti_eventsit_sort = ti_sorti_text = ENHTABLESt_outtab = ti_enhEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

PERFORM construir_catalogo_enhobjPERFORM definir_layout USING TI_ENHOBJCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHOBJPERFORM sort TABLES ti_sortUSING TI_ENHOBJ

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHOBJit_events = ti_eventsit_sort = ti_sorti_text = ENHOBJTABLESt_outtab = ti_enhobjEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_sust IS NOT INITIALPERFORM construir_catalogo_sustPERFORM definir_layout USING TI_SUSTCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_SUSTPERFORM sort TABLES ti_sortUSING TI_SUST

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_SUSTit_events = ti_eventsit_sort = ti_sorti_text = SustitucionesTABLESt_outtab = ti_sustEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_val IS NOT INITIALPERFORM construir_catalogo_valPERFORM definir_layout USING TI_VALCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_VALPERFORM sort TABLES ti_sortUSING TI_VAL

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_VALit_events = ti_eventsit_sort = ti_sorti_text = ValidacionesTABLESt_outtab = ti_valEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_fdex IS NOT INITIALPERFORM construir_catalogo_fdexPERFORM definir_layout USING TI_FDEXCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_FDEX

PERFORM sort TABLES ti_sortUSING TI_FDEX

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FDEXit_events = ti_eventsit_sort = ti_sorti_text = Field-exitTABLESt_outtab = ti_fdexEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

ENDFORM armar_alv

amp---------------------------------------------------------------------amp Form construir_catalogo_EXITamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_exit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_USER_EXITi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03

CF X c_text_04

ENDFORM construir_catalogo_EXIT

amp---------------------------------------------------------------------amp Form asignar_campo_a_catalogoamp--------------------------------------------------------------------- Asignar campo al catalogo ALV----------------------------------------------------------------------FORM asignar_campo_a_catalogo TABLES pt_cat STRUCTURE wa_catUSING p_fieldname LIKE wa_cat-fieldnamep_key LIKE wa_cat-keyp_col_pos TYPE cp_fix_column LIKE wa_cat-fix_columnp_hotspot LIKE wa_cat-hotspotp_do_sum LIKE wa_cat-do_sump_input LIKE wa_cat-inputp_checkbox LIKE wa_cat-checkboxp_no_out LIKE wa_cat-no_outp_icon LIKE wa_cat-iconp_reptext_ddic LIKE wa_cat-reptext_ddic

STATICS l_col_pos LIKE sy-cucol

Asignar atributos de campo en el catalogo de cabecera ALVCLEAR wa_catREAD TABLE pt_cat INTO wa_catWITH KEY fieldname = p_fieldname

CHECK sy-subrc EQ 0

IF NOT p_reptext_ddic IS INITIALwa_cat-seltext_l = wa_cat-seltext_m =wa_cat-seltext_s = wa_cat-reptext_ddic = p_reptext_ddicENDIF

IF p_col_pos EQ X Inicializo el conteo para ordenar las columnasl_col_pos = 1ELSEADD 1 TO l_col_posENDIF

wa_cat-fieldname = p_fieldnamewa_cat-key = p_keywa_cat-col_pos = l_col_poswa_cat-fix_column = p_fix_columnwa_cat-hotspot = p_hotspotwa_cat-do_sum = p_do_sumwa_cat-edit = wa_cat-input = p_inputwa_cat-checkbox = p_checkboxwa_cat-no_out = p_no_outwa_cat-icon = p_icon

MODIFY pt_cat FROM wa_cat INDEX sy-tabix

ENDFORM asignar_campo_a_catalogo

amp---------------------------------------------------------------------amp Form definir_layoutamp--------------------------------------------------------------------- Definir atributos del layout de reporte----------------------------------------------------------------------FORM definir_layout USING p_table TYPE slis_layout_alv-box_tabnameCHANGING p_layout TYPE slis_layout_alv

CLEAR p_layout

IF p_table NE TI_CIMP Marco el campo para la seleccioacutenp_layout-box_fieldname = SELp_layout-box_tabname = p_tableENDIFp_layout-zebra = Xp_layout-colwidth_optimize = Xp_layout-no_vline = p_layout-no_colhead = p_layout-lights_condense = Xp_layout-detail_popup = Xp_layout-detail_initial_lines = Xp_layout-flexible_key = p_layout-key_hotspot = p_layout-confirmation_prompt = X

ENDFORM definir_layout

amp---------------------------------------------------------------------amp Form construir_eventosamp--------------------------------------------------------------------- Asignar eventos soportados----------------------------------------------------------------------FORM construir_eventos USING p_form LIKE wa_events-formDATAl_type(1) TYPE n

REFRESH ti_eventsCLEAR wa_events

ALV Simple Block appendl_type = 2

Buscar secciones para eventosCALL FUNCTION REUSE_ALV_EVENTS_GETEXPORTINGi_list_type = l_typeIMPORTINGet_events = ti_events

Leer evento TOP_OF_PAGEREAD TABLE ti_events WITH KEY name = slis_ev_top_of_pageINTO wa_events Asignar Rutina FORM TOP_OF_PAGE a eventoIF sy-subrc = 0MOVE p_form TO wa_events-formMODIFY ti_events FROM wa_events INDEX sy-tabixENDIF

ENDFORM construir_eventos

amp---------------------------------------------------------------------amp Form top_of_pageamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_user_exitWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUser-exit

ENDFORM top_of_page

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_UEXITamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_uexit

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_finalWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUSER-EXITs TxSMOD

ENDFORM TOP_OF_PAGE_UEXIT

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_FDEXamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_fdex

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_fdexWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incFIELD-EXITs

ENDFORM TOP_OF_PAGE_FDEX

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BADIamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_badi

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_badiWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBADIs

ENDFORM TOP_OF_PAGE_BADI

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BTEamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_bte

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_bteWRITE sy-tfill TO l_tfill_cant

CONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBTEs

ENDFORM TOP_OF_PAGE_BTE

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enh

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_enhWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENH

amp---------------------------------------------------------------------amp Form sortamp--------------------------------------------------------------------- Creo el sort del ALV (FM)---------------------------------------------------------------------- --gtPT_sort Tabla --gtP_tabname Nombre de la tabla----------------------------------------------------------------------FORM sort TABLES pt_sortUSING p_tabname TYPE any

CLEAR pt_sort wa_sortREFRESH pt_sort

CASE p_tabnameWHEN TI_SUST

wa_sort-fieldname = SUBSTIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = SUBSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = CONSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN TI_VAL

wa_sort-fieldname = VALIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = VALSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN TI_ENHOBJ

wa_sort-fieldname = ENHNAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = VERSIONwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN OTHERS

IF p_tabname NE TI_FINAL

wa_sort-fieldname = TIPOwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

IF p_tabname NE TI_FDEX

wa_sort-fieldname = NIVELwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = PROGRAMAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = LINEAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

ENDIF

ELSE

wa_sort-fieldname = NAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = MEMBERwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sortENDIFENDCASE

ENDFORM sort

amp---------------------------------------------------------------------amp Form mostrar_listadoamp--------------------------------------------------------------------- Mostrar listado ALV----------------------------------------------------------------------FORM mostrar_listado

wa_print-reserve_lines = 2

CALL FUNCTION REUSE_ALV_BLOCK_LIST_DISPLAY

EXPORTINGis_print = wa_printEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM mostrar_listado

amp---------------------------------------------------------------------amp Form user_commandamp--------------------------------------------------------------------- Evaluar acciones del usuario----------------------------------------------------------------------FORM user_command USING ucomm LIKE sy-ucommsfields TYPE slis_selfield

DATA l_break TYPE c

Rescatar el registro seleccionadoCASE sfields-tabnameWHEN TI_USER_EXITREAD TABLE ti_user_exit INDEX sfields-tabindexWHEN TI_BADIREAD TABLE ti_badi INDEX sfields-tabindexWHEN TI_BTEREAD TABLE ti_bte INDEX sfields-tabindexWHEN TI_ENHREAD TABLE ti_enh INDEX sfields-tabindexWHEN TI_ENHOBJREAD TABLE ti_enhobj INDEX sfields-tabindexWHEN TI_FDEXREAD TABLE ti_fdex INDEX sfields-tabindexWHEN TI_FINALREAD TABLE ti_final INDEX sfields-tabindexWHEN TI_SUSTREAD TABLE ti_sust INDEX sfields-tabindexWHEN TI_VALREAD TABLE ti_val INDEX sfields-tabindexWHEN TI_CIMPREAD TABLE ti_cimp INDEX sfields-tabindexENDCASE

Seleccion de opcionCASE ucomm DOUBLE CLICKWHEN ampIC1 Evaluar valor de campo seleccionadoCHECK NOT sfields-value IS INITIAL

CASE sfields-tabnameWHEN TI_USER_EXIT USER-EXITIF ti_user_exit-tipo EQ sfields-value(4)SEARCH ti_user_exit-cf FOR c_enhanceCHECK sy-subrc EQ 0PERFORM visualizar_exit USING ti_user_exit-programati_user_exit-cf

ELSEIF ti_user_exit-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_user_exit-programati_user_exit-lineaMOVE X TO l_breakELSEIF ti_user_exit-break EQ sfields-value(4)OR ti_user_exit-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_user_exit-programati_user_exit-lineati_user_exit-breakMOVE X TO l_breakENDIF

WHEN TI_FINAL USER-EXIT Tx CMODIF ti_final-name EQ sfields-valueCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = ti_final-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSEIF ti_final-include EQ sfields-valuePERFORM visualizar_linea USING ti_final-programa1MOVE X TO l_breakENDIF

WHEN TI_BADI BadiIF ti_badi-tipo EQ sfields-value(4)PERFORM visualizar_badi USING ti_badi-cfELSEIF ti_badi-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_badi-programati_badi-lineaMOVE X TO l_breakELSEIF ti_badi-break EQ sfields-value(4)OR ti_badi-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_badi-programati_badi-lineati_badi-breakMOVE X TO l_breakENDIF

WHEN TI_BTE BTEIF ti_bte-tipo EQ sfields-value(4)PERFORM fibf USING ti_bte-cfELSEIF ti_bte-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_bte-programati_bte-lineaMOVE X TO l_breakELSEIF ti_bte-break EQ sfields-value(4)OR ti_bte-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_bte-programati_bte-linea

ti_bte-breakMOVE X TO l_breakENDIF

WHEN TI_ENH Punto de ampliacioacutenIF ti_enh-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_enh-programati_enh-lineaMOVE X TO l_breakELSEIF ti_enh-tipo EQ sfields-value(4)PERFORM bi_se18 USING ti_enh-cfENDIF

WHEN TI_ENHOBJ Punto de ampliacioacutenIF ti_enhobj-enhname EQ sfields-value(30)PERFORM bi_se19 USING ti_enhobj-enhnameENDIF

WHEN TI_SUST SustitucionesIF ti_sust-substid EQ sfields-value(7) ORti_sust-subseqnr EQ sfields-value(3)PERFORM visualizar_sust USING ti_sust-substidti_sust-subseqnrENDIF

WHEN TI_VAL ValidacionesIF ti_val-valid EQ sfields-value(7) ORti_val-valseqnr EQ sfields-value(3)PERFORM visualizar_val USING ti_val-validti_val-valseqnrENDIF

WHEN TI_FDEX Field-exitIF ti_fdex-tipo EQ sfields-valueSUBMIT rsmodprf AND RETURNELSEIF ti_fdex-cf(60) EQ sfields-value Visualizo el field-exitCALL FUNCTION RS_FUNCTION_SHOWEXPORTINGfuncname = ti_fdex-cf

CALL FUNCTION RS_NAVIGATION_MONITORENDIF

WHEN TI_CIMP Customer implementation

CASE sfields-fieldnameWHEN ENHNAMEPERFORM bi_se19 USING ti_cimp-enhnameWHEN ENHINCLUDEPERFORM visualizar_enh_cf USING ti_cimp-enhinclude

WHEN OTHERS DO NOTHING ENDCASE

WHEN OTHERS DO NOTHING ENDCASE

WHEN OTHERS DO NOTHING ENDCASE

IF l_break IS NOT INITIAL AND sfields-tabname NE TI_CIMPWAIT UP TO 1 SECONDSPERFORM cargar_breakENDIFsfields-refresh = X

ENDFORM user_command

amp---------------------------------------------------------------------amp Form visualizar_lineaamp--------------------------------------------------------------------- Visualizo la linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_linea USING p_programa TYPE sy-repidp_linea

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_programaobject_type = c_typeposition = p_lineaEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM visualizar_linea

amp---------------------------------------------------------------------amp Form buscar_exitamp--------------------------------------------------------------------- Buscar USER-EXIT----------------------------------------------------------------------FORM buscar_exit

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN USER-EXITSEARCH ti_programa-cf FOR c_user_exit- SE ENCONTRO UN USER-EXIT Y SE VERIFICA SI LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS PERFORMSEARCH ti_programa-cf FOR c_performCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LAS ASIGNACIONESSEARCH ti_programa-cf FOR c_igualCHECK sy-subrc NE 0

CLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INIacuteCIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF

ENDFORM buscar_exit

amp---------------------------------------------------------------------amp Form buscar_badiamp--------------------------------------------------------------------- Buscar BADI----------------------------------------------------------------------FORM buscar_badi

DATAl_subrc LIKE sy-subrc

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BADISEARCH ti_programa-cf FOR c_badi- SE ENCONTRO UNA BADI Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

SEARCH ti_programa-cf FOR c_includeIF sy-subrc NE 0CLEAR l_subrcSEARCH ti_programa-cf FOR c_methodIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_funcao_2IF sy-subrc NE 0SEARCH ti_programa-cf FOR c_performIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_type_refIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_formMOVE 4 TO l_subrcENDIFENDIFENDIFENDIF

IF l_subrc EQ 0CLEAR ti_badi

- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIFELSECHECK p_handl IS NOT INITIAL- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA INSTANCIA DE- UNA BADISEARCH ti_programa-cf FOR c_handler- SE ENCONTRO UNA INSTANCIA DE IMPLEMENACIOacuteN Y SE VERIFICA SI LA LINEA- NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

SEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0CLEAR ti_badi- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIF

ENDFORM buscar_badi

amp---------------------------------------------------------------------amp Form buscar_bteamp--------------------------------------------------------------------- Buscar BTE----------------------------------------------------------------------FORM buscar_bte

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OPEN_FI_PERFORM

- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endform

CHECK sy-subrc NE 0

CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte1- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OUTBOUND_CALL

- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0

CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF

ENDFORM buscar_bte

amp---------------------------------------------------------------------amp Form repid_f4amp--------------------------------------------------------------------- Ejecuto el F4 para buscar programas----------------------------------------------------------------------FORM repid_f4

CALL FUNCTION REPOSITORY_INFO_SYSTEM_F4EXPORTINGobject_type = PROGobject_name = p_progsuppress_selection = XIMPORTINGobject_name_selected = p_progEXCEPTIONS

cancel = 1wrong_type = 2OTHERS = 3

ENDFORM repid_f4

amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf

DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

SEARCH p_cf FOR 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 INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

READ TABLE lt_cf INDEX 4

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

CHECK sy-subrc IS INITIAL

Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten

textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer

CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4

IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF

WHEN OTHERS Do Nothing ENDCASE

ENDFORM visualizar_badi

amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf

DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

CLEAR d010inc modsap modact

Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid

IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF

SEARCH p_cf FOR c_enhance

CHECK sy-subrc IS INITIAL

REFRESH lt_cf

l_cf = 500 - sy-fdpos

MOVE p_cf+sy-fdpos(l_cf) TO l_linea

SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3

TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS

Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _

Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit

CHECK sy-subrc IS INITIAL

Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM

modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3

ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname

CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ENDIF

ENDFORM visualizar_exit

amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit

DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo

DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe

DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE

CHECK p_fdex IS NOT INITIAL

CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe

MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex

IF p_prog IS NOT INITIAL

MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF

Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog

LOOP AT lt_d020s

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

REFRESH lt_d021s

Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4

Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X

SEARCH lt_d021s-fnam FOR -

IF sy-subrc IS INITIAL

MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum

Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname

APPEND lt_campo

ENDIF

ENDLOOPENDLOOP

CHECK lt_campo[] IS NOT INITIAL

SORT lt_campo BY repid dnum tabname fieldname

DELETE ADJACENT DUPLICATES FROM lt_campo

Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname

SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l

LOOP AT lt_dd03l

CLEAR tddir tddirs

SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname

CHECK sy-subrc IS INITIAL

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog

CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF

Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf

IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF

READ TABLE lt_fe WITH KEY cf = lt_fe-cf

CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP

LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex

ENDLOOP

ENDFORM buscar_field_exit

amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf

DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c

SEARCH p_cf FOR c_bte

IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ELSE

SEARCH p_cf FOR c_bte1

CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ENDIF

IF l_tipo IS NOT INITIAL

PERFORM visualizar_bte USING l_tipol_linea

ELSECALL TRANSACTION FIBFENDIF

ENDFORM fibf

amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT

EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM breakpoint

amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_badi

amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE

i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_bte

amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X TIPO X X c_text_05CF X c_text_04

ENDFORM construir_catalogo_FDEX

amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc

DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

CHECK lt_break[] IS NOT INITIAL

IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix

MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF

IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix

MOVEti_badi-linea TO l_lineti_badi-programa TO l_program

READ TABLE lt_break INTO wa_break

WITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF

IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix

MOVEti_bte-linea TO l_lineti_bte-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF

ENDFORM cargar_break

amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

DATAl_tabix TYPE sy-tabix

l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

SELECT SINGLE FROM d010incWHERE include = p_programa

IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF

MOVEp_linea TO l_linep_programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM asignar_break

amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit

IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF

PERFORM get_objects Get Objects

ENDFORM buscar_user_exit

amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects

DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area

DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix

SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog

IF sy-subrc = 0

SORT ti_tadir BY obj_name devclass

SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass

IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF

- Get UserExit namesLOOP AT ti_jtab

SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E

APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area

l_fname = ti_final-member

CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include

LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP

CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP

ENDFORM get_objects

amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X

ENDFORM construir_catalogo_uexit

amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------

FORM visualizar_ampliacion

DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF

SELECT SINGLE FROM modsapWHERE member EQ l_member

IF sy-subrc IS INITIAL

Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member

ENDIF

ENDFORM visualizar_ampliacion

amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea

RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs

REFRESH r_event r_procs

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event

SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs

SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE

ENDFORM visualizar_bte

amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE

----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c

DATAl_linea(500) TYPE c

DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

MOVE lt_fields-value TO l_linea

PERFORM visualizar_bte USING p_tipol_linea

ENDFORM cargar_bte

amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface

DATAl_linea(500) TYPE c

DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE

InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF

ENDFORM visualizar_interface

amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones

CHECK p_sust IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922

ENDFORM buscar_sustituciones

amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST

ENDFORM construir_catalogo_sust

amp---------------------------------------------------------------------

amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones

ENDFORM TOP_OF_PAGE_SUST

amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4

CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_sust

amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones

CHECK p_val IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931

ENDFORM buscar_validaciones

amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID

ENDFORM construir_catalogo_val

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones

ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2

CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_val

amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto

DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF

SELECT SINGLE FROM modsapWHERE name EQ l_name

IF sy-subrc IS INITIAL

MOVE l_name TO l_member

SELECT SINGLE FROM modactWHERE member EQ l_member

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF

ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF

ENDFORM visualizar_proyecto

amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel

APPEND ti_enh

ENDIFENDIFENDIF

ENDFORM buscar_punto_ampliacioacuten

amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_enh

amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh

DATA l_obj_name TYPE enhobj-obj_name

DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name

CHECK p_enh IS NOT INITIAL

IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF

REFRESH lt_obj_name

LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP

SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name

ENDFORM buscar_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X

ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME

ENDFORM construir_catalogo_enhobj

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENHOBJ

amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM bi_se19

amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro

CLEAR ti_bdcdatati_bdcdata-program = program

ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata

ENDFORM BDC_DYNPRO

amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval

CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata

ENDFORM BDC_FIELD

amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa

DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)

CHECK ti_gb31t[] IS NOT INITIAL

DO

Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2

IF l_exit EQ XEXITENDIF

CHECK l_exit IS INITIAL

Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND

CHECK l_boolpool IS NOT INITIAL

MOVE l_boolpool TO l_repid

Visualizo el programaPERFORM visualizar_linea USING l_repid01

ENDDO

ENDFORM visualizar_programa

amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope

STATICS l_flag TYPE c

DATA l_tit(65) TYPE c

CHECK l_flag IS INITIAL

l_flag = X

WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline

4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM texto_tope

amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf

DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off

CHECK l_off IS NOT INITIAL

ADD 7 TO l_offl_cf = 500 - l_off

SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_enhspotname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1

invalid_object_type = 2OTHERS = 3

ENDFORM bi_se18

amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit

DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE

DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE

MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE

MOVE lt_fields-value TO l_nameENDIF

Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_

LOOP AT lt_tfdir

CLEARl_group l_include l_namespace l_str_area

l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl

IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl

CHECK sy-subrc IS INITIAL

Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP

CHECK l_flag IS INITIAL

La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value

ENDFORM visualizar_fm_exit

amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter

tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten

ENDFORM def_text_parameter

amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones

Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt

Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt

Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt

icon_create RESULT name text infoicon_create

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 16: buscar_ampliaciones FOROSAP

TRANSLATE vg_palavra TO UPPER CASE- SE ENCONTRO ALGUN INCLUDEIF vg_palavra EQ c_submitCLEAR vg_palavraENDIFELSEEXITENDIFENDIFENDDO- BUSCA NOMBRE DE LA FUNCION PARA FUTURA BUSQUEDA POR USER EXITREAD TABLE ti_includes WITH KEY nome = vg_palavraIF NOT sy-subrc IS INITIALIF vg_nivel LE p_nivelMOVE vg_palavra TO ti_includes-nomevg_nivel TO ti_includes-nivelAPPEND ti_includesENDIFENDIFENDIF

ENDFORM PROCURA_SUBMIT

amp---------------------------------------------------------------------amp Form CONSISTI_PARAMETROSamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM consisti_parametros

IF p_nivel IS INITIALMOVE 1 TO p_nivelENDIF

IF p_prog IS INITIAL AND p_tcode IS INITIAL- EL NOMBRE DEL PROGRAMA Y EL NOMBRE DE LA TRANSACCION NO PUEDEN SER- NULOS UNO DE ELLOS DEBE SER INFORMADOMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e01STOPENDIF

IF NOT p_prog IS INITIAL AND NOT p_tcode IS INITIAL- SE SOLICITA AL USUARIO QUE INFORME NOMBRE DE PROGRAMA O TRANSACCIONMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e02STOPENDIF

IF p_ue IS INITIAL AND p_badi IS INITIAL AND p_bte IS INITIALAND p_sust IS INITIAL AND p_val IS INITIAL AND p_fdex IS INITIALAND p_enh IS INITIAL- SE SOLICITA AL USUARIO QUE INFORME UN TIPO DE MEJORAMESSAGE ID 00 TYPE I NUMBER 398 WITH c_text_e03STOPENDIF

ENDFORM CONSISTI_PARAMETROS

amp---------------------------------------------------------------------

amp Form INICIALIZA_TABELAamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM inicializa_tabela

DATAe_tstc TYPE tstcl_tcode TYPE sy-tcode

REFRESH ti_includes

IF NOT p_prog IS INITIAL

MOVE p_prog TO ti_includes-nome0 TO ti_includes-nivelAPPEND ti_includes

- BUSCO EL PROGRAMAREAD REPORT ti_includes-nome INTO ti_programa

IF sy-subrc EQ 0REFRESH ti_programaELSE- EL PROGRAMA NO EXISTEMESSAGE s893(pz) WITH El programa p_prog no existeSTOPENDIF

ELSEIF NOT p_tcode IS INITIAL

SELECT SINGLE FROM tstcWHERE tcode EQ p_tcode

IF sy-subrc EQ 0

IF tstc-pgmna IS NOT INITIALMOVE tstc-pgmna TO ti_includes-nome0 TO ti_includes-nivelAPPEND ti_includesELSE Se trata de una transaccioacuten de paraacutemetros Obtengo la transaccioacuten asociadaCALL FUNCTION RS_TRANSACTION_SINGLE_GETEXPORTINGparameter_tcode = p_tcodeIMPORTINGtcode = l_tcode

SELECT SINGLE INTO e_tstcFROM tstcWHERE tcode EQ l_tcode

IF sy-subrc EQ 0MOVE e_tstc-pgmna TO ti_includes-nome0 TO ti_includes-nivel

APPEND ti_includesELSE- LA TRANSACCIOacuteN NO EXISTEMESSAGE s893(pz) WITH La transaccioacuten p_tcode no existeENDIFENDIFELSE- LA TRANSACCIOacuteN NO EXISTEMESSAGE s893(pz) WITH La transaccioacuten p_tcode no existeSTOPENDIFENDIF

ENDFORM INICIALIZA_TABELA

amp---------------------------------------------------------------------amp Form armar_alvamp--------------------------------------------------------------------- Armo el ALV----------------------------------------------------------------------FORM armar_alv

DATAl_repid TYPE sy-repid

MOVE sy-repid TO l_repid

CALL FUNCTION REUSE_ALV_BLOCK_LIST_INITEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMAND

IF p_ue IS NOT INITIALPERFORM construir_catalogo_exitPERFORM definir_layout USING TI_USER_EXITCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGEPERFORM sort TABLES ti_sortUSING TI_USER_EXIT

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_USER_EXITit_events = ti_eventsit_sort = ti_sorti_text = User-exitTABLESt_outtab = ti_user_exitEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

PERFORM construir_catalogo_uexitPERFORM definir_layout USING TI_FINAL

CHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_UEXITPERFORM sort TABLES ti_sortUSING TI_FINAL

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FINALit_events = ti_eventsit_sort = ti_sorti_text = User-exit TxCMODTABLESt_outtab = ti_finalEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_badi IS NOT INITIALPERFORM construir_catalogo_badiPERFORM definir_layout USING TI_BADICHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BADIPERFORM sort TABLES ti_sortUSING TI_BADI

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_BADIit_events = ti_eventsit_sort = ti_sorti_text = BadisTABLESt_outtab = ti_badiEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_bte IS NOT INITIALPERFORM construir_catalogo_btePERFORM definir_layout USING TI_BTECHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BTEPERFORM sort TABLES ti_sortUSING TI_BTE

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layout

it_fieldcat = ti_cati_tabname = TI_BTEit_events = ti_eventsit_sort = ti_sorti_text = BTETABLESt_outtab = ti_bteEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_enh IS NOT INITIALPERFORM construir_catalogo_enhPERFORM definir_layout USING TI_ENHCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHPERFORM sort TABLES ti_sortUSING TI_ENH

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHit_events = ti_eventsit_sort = ti_sorti_text = ENHTABLESt_outtab = ti_enhEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

PERFORM construir_catalogo_enhobjPERFORM definir_layout USING TI_ENHOBJCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHOBJPERFORM sort TABLES ti_sortUSING TI_ENHOBJ

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHOBJit_events = ti_eventsit_sort = ti_sorti_text = ENHOBJTABLESt_outtab = ti_enhobjEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_sust IS NOT INITIALPERFORM construir_catalogo_sustPERFORM definir_layout USING TI_SUSTCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_SUSTPERFORM sort TABLES ti_sortUSING TI_SUST

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_SUSTit_events = ti_eventsit_sort = ti_sorti_text = SustitucionesTABLESt_outtab = ti_sustEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_val IS NOT INITIALPERFORM construir_catalogo_valPERFORM definir_layout USING TI_VALCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_VALPERFORM sort TABLES ti_sortUSING TI_VAL

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_VALit_events = ti_eventsit_sort = ti_sorti_text = ValidacionesTABLESt_outtab = ti_valEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_fdex IS NOT INITIALPERFORM construir_catalogo_fdexPERFORM definir_layout USING TI_FDEXCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_FDEX

PERFORM sort TABLES ti_sortUSING TI_FDEX

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FDEXit_events = ti_eventsit_sort = ti_sorti_text = Field-exitTABLESt_outtab = ti_fdexEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

ENDFORM armar_alv

amp---------------------------------------------------------------------amp Form construir_catalogo_EXITamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_exit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_USER_EXITi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03

CF X c_text_04

ENDFORM construir_catalogo_EXIT

amp---------------------------------------------------------------------amp Form asignar_campo_a_catalogoamp--------------------------------------------------------------------- Asignar campo al catalogo ALV----------------------------------------------------------------------FORM asignar_campo_a_catalogo TABLES pt_cat STRUCTURE wa_catUSING p_fieldname LIKE wa_cat-fieldnamep_key LIKE wa_cat-keyp_col_pos TYPE cp_fix_column LIKE wa_cat-fix_columnp_hotspot LIKE wa_cat-hotspotp_do_sum LIKE wa_cat-do_sump_input LIKE wa_cat-inputp_checkbox LIKE wa_cat-checkboxp_no_out LIKE wa_cat-no_outp_icon LIKE wa_cat-iconp_reptext_ddic LIKE wa_cat-reptext_ddic

STATICS l_col_pos LIKE sy-cucol

Asignar atributos de campo en el catalogo de cabecera ALVCLEAR wa_catREAD TABLE pt_cat INTO wa_catWITH KEY fieldname = p_fieldname

CHECK sy-subrc EQ 0

IF NOT p_reptext_ddic IS INITIALwa_cat-seltext_l = wa_cat-seltext_m =wa_cat-seltext_s = wa_cat-reptext_ddic = p_reptext_ddicENDIF

IF p_col_pos EQ X Inicializo el conteo para ordenar las columnasl_col_pos = 1ELSEADD 1 TO l_col_posENDIF

wa_cat-fieldname = p_fieldnamewa_cat-key = p_keywa_cat-col_pos = l_col_poswa_cat-fix_column = p_fix_columnwa_cat-hotspot = p_hotspotwa_cat-do_sum = p_do_sumwa_cat-edit = wa_cat-input = p_inputwa_cat-checkbox = p_checkboxwa_cat-no_out = p_no_outwa_cat-icon = p_icon

MODIFY pt_cat FROM wa_cat INDEX sy-tabix

ENDFORM asignar_campo_a_catalogo

amp---------------------------------------------------------------------amp Form definir_layoutamp--------------------------------------------------------------------- Definir atributos del layout de reporte----------------------------------------------------------------------FORM definir_layout USING p_table TYPE slis_layout_alv-box_tabnameCHANGING p_layout TYPE slis_layout_alv

CLEAR p_layout

IF p_table NE TI_CIMP Marco el campo para la seleccioacutenp_layout-box_fieldname = SELp_layout-box_tabname = p_tableENDIFp_layout-zebra = Xp_layout-colwidth_optimize = Xp_layout-no_vline = p_layout-no_colhead = p_layout-lights_condense = Xp_layout-detail_popup = Xp_layout-detail_initial_lines = Xp_layout-flexible_key = p_layout-key_hotspot = p_layout-confirmation_prompt = X

ENDFORM definir_layout

amp---------------------------------------------------------------------amp Form construir_eventosamp--------------------------------------------------------------------- Asignar eventos soportados----------------------------------------------------------------------FORM construir_eventos USING p_form LIKE wa_events-formDATAl_type(1) TYPE n

REFRESH ti_eventsCLEAR wa_events

ALV Simple Block appendl_type = 2

Buscar secciones para eventosCALL FUNCTION REUSE_ALV_EVENTS_GETEXPORTINGi_list_type = l_typeIMPORTINGet_events = ti_events

Leer evento TOP_OF_PAGEREAD TABLE ti_events WITH KEY name = slis_ev_top_of_pageINTO wa_events Asignar Rutina FORM TOP_OF_PAGE a eventoIF sy-subrc = 0MOVE p_form TO wa_events-formMODIFY ti_events FROM wa_events INDEX sy-tabixENDIF

ENDFORM construir_eventos

amp---------------------------------------------------------------------amp Form top_of_pageamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_user_exitWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUser-exit

ENDFORM top_of_page

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_UEXITamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_uexit

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_finalWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUSER-EXITs TxSMOD

ENDFORM TOP_OF_PAGE_UEXIT

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_FDEXamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_fdex

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_fdexWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incFIELD-EXITs

ENDFORM TOP_OF_PAGE_FDEX

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BADIamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_badi

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_badiWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBADIs

ENDFORM TOP_OF_PAGE_BADI

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BTEamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_bte

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_bteWRITE sy-tfill TO l_tfill_cant

CONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBTEs

ENDFORM TOP_OF_PAGE_BTE

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enh

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_enhWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENH

amp---------------------------------------------------------------------amp Form sortamp--------------------------------------------------------------------- Creo el sort del ALV (FM)---------------------------------------------------------------------- --gtPT_sort Tabla --gtP_tabname Nombre de la tabla----------------------------------------------------------------------FORM sort TABLES pt_sortUSING p_tabname TYPE any

CLEAR pt_sort wa_sortREFRESH pt_sort

CASE p_tabnameWHEN TI_SUST

wa_sort-fieldname = SUBSTIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = SUBSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = CONSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN TI_VAL

wa_sort-fieldname = VALIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = VALSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN TI_ENHOBJ

wa_sort-fieldname = ENHNAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = VERSIONwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN OTHERS

IF p_tabname NE TI_FINAL

wa_sort-fieldname = TIPOwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

IF p_tabname NE TI_FDEX

wa_sort-fieldname = NIVELwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = PROGRAMAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = LINEAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

ENDIF

ELSE

wa_sort-fieldname = NAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = MEMBERwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sortENDIFENDCASE

ENDFORM sort

amp---------------------------------------------------------------------amp Form mostrar_listadoamp--------------------------------------------------------------------- Mostrar listado ALV----------------------------------------------------------------------FORM mostrar_listado

wa_print-reserve_lines = 2

CALL FUNCTION REUSE_ALV_BLOCK_LIST_DISPLAY

EXPORTINGis_print = wa_printEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM mostrar_listado

amp---------------------------------------------------------------------amp Form user_commandamp--------------------------------------------------------------------- Evaluar acciones del usuario----------------------------------------------------------------------FORM user_command USING ucomm LIKE sy-ucommsfields TYPE slis_selfield

DATA l_break TYPE c

Rescatar el registro seleccionadoCASE sfields-tabnameWHEN TI_USER_EXITREAD TABLE ti_user_exit INDEX sfields-tabindexWHEN TI_BADIREAD TABLE ti_badi INDEX sfields-tabindexWHEN TI_BTEREAD TABLE ti_bte INDEX sfields-tabindexWHEN TI_ENHREAD TABLE ti_enh INDEX sfields-tabindexWHEN TI_ENHOBJREAD TABLE ti_enhobj INDEX sfields-tabindexWHEN TI_FDEXREAD TABLE ti_fdex INDEX sfields-tabindexWHEN TI_FINALREAD TABLE ti_final INDEX sfields-tabindexWHEN TI_SUSTREAD TABLE ti_sust INDEX sfields-tabindexWHEN TI_VALREAD TABLE ti_val INDEX sfields-tabindexWHEN TI_CIMPREAD TABLE ti_cimp INDEX sfields-tabindexENDCASE

Seleccion de opcionCASE ucomm DOUBLE CLICKWHEN ampIC1 Evaluar valor de campo seleccionadoCHECK NOT sfields-value IS INITIAL

CASE sfields-tabnameWHEN TI_USER_EXIT USER-EXITIF ti_user_exit-tipo EQ sfields-value(4)SEARCH ti_user_exit-cf FOR c_enhanceCHECK sy-subrc EQ 0PERFORM visualizar_exit USING ti_user_exit-programati_user_exit-cf

ELSEIF ti_user_exit-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_user_exit-programati_user_exit-lineaMOVE X TO l_breakELSEIF ti_user_exit-break EQ sfields-value(4)OR ti_user_exit-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_user_exit-programati_user_exit-lineati_user_exit-breakMOVE X TO l_breakENDIF

WHEN TI_FINAL USER-EXIT Tx CMODIF ti_final-name EQ sfields-valueCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = ti_final-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSEIF ti_final-include EQ sfields-valuePERFORM visualizar_linea USING ti_final-programa1MOVE X TO l_breakENDIF

WHEN TI_BADI BadiIF ti_badi-tipo EQ sfields-value(4)PERFORM visualizar_badi USING ti_badi-cfELSEIF ti_badi-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_badi-programati_badi-lineaMOVE X TO l_breakELSEIF ti_badi-break EQ sfields-value(4)OR ti_badi-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_badi-programati_badi-lineati_badi-breakMOVE X TO l_breakENDIF

WHEN TI_BTE BTEIF ti_bte-tipo EQ sfields-value(4)PERFORM fibf USING ti_bte-cfELSEIF ti_bte-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_bte-programati_bte-lineaMOVE X TO l_breakELSEIF ti_bte-break EQ sfields-value(4)OR ti_bte-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_bte-programati_bte-linea

ti_bte-breakMOVE X TO l_breakENDIF

WHEN TI_ENH Punto de ampliacioacutenIF ti_enh-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_enh-programati_enh-lineaMOVE X TO l_breakELSEIF ti_enh-tipo EQ sfields-value(4)PERFORM bi_se18 USING ti_enh-cfENDIF

WHEN TI_ENHOBJ Punto de ampliacioacutenIF ti_enhobj-enhname EQ sfields-value(30)PERFORM bi_se19 USING ti_enhobj-enhnameENDIF

WHEN TI_SUST SustitucionesIF ti_sust-substid EQ sfields-value(7) ORti_sust-subseqnr EQ sfields-value(3)PERFORM visualizar_sust USING ti_sust-substidti_sust-subseqnrENDIF

WHEN TI_VAL ValidacionesIF ti_val-valid EQ sfields-value(7) ORti_val-valseqnr EQ sfields-value(3)PERFORM visualizar_val USING ti_val-validti_val-valseqnrENDIF

WHEN TI_FDEX Field-exitIF ti_fdex-tipo EQ sfields-valueSUBMIT rsmodprf AND RETURNELSEIF ti_fdex-cf(60) EQ sfields-value Visualizo el field-exitCALL FUNCTION RS_FUNCTION_SHOWEXPORTINGfuncname = ti_fdex-cf

CALL FUNCTION RS_NAVIGATION_MONITORENDIF

WHEN TI_CIMP Customer implementation

CASE sfields-fieldnameWHEN ENHNAMEPERFORM bi_se19 USING ti_cimp-enhnameWHEN ENHINCLUDEPERFORM visualizar_enh_cf USING ti_cimp-enhinclude

WHEN OTHERS DO NOTHING ENDCASE

WHEN OTHERS DO NOTHING ENDCASE

WHEN OTHERS DO NOTHING ENDCASE

IF l_break IS NOT INITIAL AND sfields-tabname NE TI_CIMPWAIT UP TO 1 SECONDSPERFORM cargar_breakENDIFsfields-refresh = X

ENDFORM user_command

amp---------------------------------------------------------------------amp Form visualizar_lineaamp--------------------------------------------------------------------- Visualizo la linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_linea USING p_programa TYPE sy-repidp_linea

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_programaobject_type = c_typeposition = p_lineaEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM visualizar_linea

amp---------------------------------------------------------------------amp Form buscar_exitamp--------------------------------------------------------------------- Buscar USER-EXIT----------------------------------------------------------------------FORM buscar_exit

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN USER-EXITSEARCH ti_programa-cf FOR c_user_exit- SE ENCONTRO UN USER-EXIT Y SE VERIFICA SI LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS PERFORMSEARCH ti_programa-cf FOR c_performCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LAS ASIGNACIONESSEARCH ti_programa-cf FOR c_igualCHECK sy-subrc NE 0

CLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INIacuteCIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF

ENDFORM buscar_exit

amp---------------------------------------------------------------------amp Form buscar_badiamp--------------------------------------------------------------------- Buscar BADI----------------------------------------------------------------------FORM buscar_badi

DATAl_subrc LIKE sy-subrc

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BADISEARCH ti_programa-cf FOR c_badi- SE ENCONTRO UNA BADI Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

SEARCH ti_programa-cf FOR c_includeIF sy-subrc NE 0CLEAR l_subrcSEARCH ti_programa-cf FOR c_methodIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_funcao_2IF sy-subrc NE 0SEARCH ti_programa-cf FOR c_performIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_type_refIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_formMOVE 4 TO l_subrcENDIFENDIFENDIFENDIF

IF l_subrc EQ 0CLEAR ti_badi

- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIFELSECHECK p_handl IS NOT INITIAL- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA INSTANCIA DE- UNA BADISEARCH ti_programa-cf FOR c_handler- SE ENCONTRO UNA INSTANCIA DE IMPLEMENACIOacuteN Y SE VERIFICA SI LA LINEA- NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

SEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0CLEAR ti_badi- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIF

ENDFORM buscar_badi

amp---------------------------------------------------------------------amp Form buscar_bteamp--------------------------------------------------------------------- Buscar BTE----------------------------------------------------------------------FORM buscar_bte

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OPEN_FI_PERFORM

- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endform

CHECK sy-subrc NE 0

CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte1- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OUTBOUND_CALL

- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0

CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF

ENDFORM buscar_bte

amp---------------------------------------------------------------------amp Form repid_f4amp--------------------------------------------------------------------- Ejecuto el F4 para buscar programas----------------------------------------------------------------------FORM repid_f4

CALL FUNCTION REPOSITORY_INFO_SYSTEM_F4EXPORTINGobject_type = PROGobject_name = p_progsuppress_selection = XIMPORTINGobject_name_selected = p_progEXCEPTIONS

cancel = 1wrong_type = 2OTHERS = 3

ENDFORM repid_f4

amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf

DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

SEARCH p_cf FOR 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 INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

READ TABLE lt_cf INDEX 4

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

CHECK sy-subrc IS INITIAL

Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten

textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer

CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4

IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF

WHEN OTHERS Do Nothing ENDCASE

ENDFORM visualizar_badi

amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf

DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

CLEAR d010inc modsap modact

Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid

IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF

SEARCH p_cf FOR c_enhance

CHECK sy-subrc IS INITIAL

REFRESH lt_cf

l_cf = 500 - sy-fdpos

MOVE p_cf+sy-fdpos(l_cf) TO l_linea

SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3

TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS

Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _

Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit

CHECK sy-subrc IS INITIAL

Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM

modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3

ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname

CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ENDIF

ENDFORM visualizar_exit

amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit

DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo

DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe

DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE

CHECK p_fdex IS NOT INITIAL

CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe

MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex

IF p_prog IS NOT INITIAL

MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF

Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog

LOOP AT lt_d020s

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

REFRESH lt_d021s

Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4

Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X

SEARCH lt_d021s-fnam FOR -

IF sy-subrc IS INITIAL

MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum

Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname

APPEND lt_campo

ENDIF

ENDLOOPENDLOOP

CHECK lt_campo[] IS NOT INITIAL

SORT lt_campo BY repid dnum tabname fieldname

DELETE ADJACENT DUPLICATES FROM lt_campo

Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname

SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l

LOOP AT lt_dd03l

CLEAR tddir tddirs

SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname

CHECK sy-subrc IS INITIAL

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog

CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF

Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf

IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF

READ TABLE lt_fe WITH KEY cf = lt_fe-cf

CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP

LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex

ENDLOOP

ENDFORM buscar_field_exit

amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf

DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c

SEARCH p_cf FOR c_bte

IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ELSE

SEARCH p_cf FOR c_bte1

CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ENDIF

IF l_tipo IS NOT INITIAL

PERFORM visualizar_bte USING l_tipol_linea

ELSECALL TRANSACTION FIBFENDIF

ENDFORM fibf

amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT

EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM breakpoint

amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_badi

amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE

i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_bte

amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X TIPO X X c_text_05CF X c_text_04

ENDFORM construir_catalogo_FDEX

amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc

DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

CHECK lt_break[] IS NOT INITIAL

IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix

MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF

IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix

MOVEti_badi-linea TO l_lineti_badi-programa TO l_program

READ TABLE lt_break INTO wa_break

WITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF

IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix

MOVEti_bte-linea TO l_lineti_bte-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF

ENDFORM cargar_break

amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

DATAl_tabix TYPE sy-tabix

l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

SELECT SINGLE FROM d010incWHERE include = p_programa

IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF

MOVEp_linea TO l_linep_programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM asignar_break

amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit

IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF

PERFORM get_objects Get Objects

ENDFORM buscar_user_exit

amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects

DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area

DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix

SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog

IF sy-subrc = 0

SORT ti_tadir BY obj_name devclass

SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass

IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF

- Get UserExit namesLOOP AT ti_jtab

SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E

APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area

l_fname = ti_final-member

CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include

LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP

CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP

ENDFORM get_objects

amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X

ENDFORM construir_catalogo_uexit

amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------

FORM visualizar_ampliacion

DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF

SELECT SINGLE FROM modsapWHERE member EQ l_member

IF sy-subrc IS INITIAL

Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member

ENDIF

ENDFORM visualizar_ampliacion

amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea

RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs

REFRESH r_event r_procs

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event

SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs

SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE

ENDFORM visualizar_bte

amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE

----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c

DATAl_linea(500) TYPE c

DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

MOVE lt_fields-value TO l_linea

PERFORM visualizar_bte USING p_tipol_linea

ENDFORM cargar_bte

amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface

DATAl_linea(500) TYPE c

DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE

InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF

ENDFORM visualizar_interface

amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones

CHECK p_sust IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922

ENDFORM buscar_sustituciones

amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST

ENDFORM construir_catalogo_sust

amp---------------------------------------------------------------------

amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones

ENDFORM TOP_OF_PAGE_SUST

amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4

CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_sust

amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones

CHECK p_val IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931

ENDFORM buscar_validaciones

amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID

ENDFORM construir_catalogo_val

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones

ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2

CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_val

amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto

DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF

SELECT SINGLE FROM modsapWHERE name EQ l_name

IF sy-subrc IS INITIAL

MOVE l_name TO l_member

SELECT SINGLE FROM modactWHERE member EQ l_member

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF

ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF

ENDFORM visualizar_proyecto

amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel

APPEND ti_enh

ENDIFENDIFENDIF

ENDFORM buscar_punto_ampliacioacuten

amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_enh

amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh

DATA l_obj_name TYPE enhobj-obj_name

DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name

CHECK p_enh IS NOT INITIAL

IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF

REFRESH lt_obj_name

LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP

SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name

ENDFORM buscar_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X

ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME

ENDFORM construir_catalogo_enhobj

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENHOBJ

amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM bi_se19

amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro

CLEAR ti_bdcdatati_bdcdata-program = program

ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata

ENDFORM BDC_DYNPRO

amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval

CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata

ENDFORM BDC_FIELD

amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa

DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)

CHECK ti_gb31t[] IS NOT INITIAL

DO

Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2

IF l_exit EQ XEXITENDIF

CHECK l_exit IS INITIAL

Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND

CHECK l_boolpool IS NOT INITIAL

MOVE l_boolpool TO l_repid

Visualizo el programaPERFORM visualizar_linea USING l_repid01

ENDDO

ENDFORM visualizar_programa

amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope

STATICS l_flag TYPE c

DATA l_tit(65) TYPE c

CHECK l_flag IS INITIAL

l_flag = X

WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline

4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM texto_tope

amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf

DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off

CHECK l_off IS NOT INITIAL

ADD 7 TO l_offl_cf = 500 - l_off

SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_enhspotname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1

invalid_object_type = 2OTHERS = 3

ENDFORM bi_se18

amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit

DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE

DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE

MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE

MOVE lt_fields-value TO l_nameENDIF

Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_

LOOP AT lt_tfdir

CLEARl_group l_include l_namespace l_str_area

l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl

IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl

CHECK sy-subrc IS INITIAL

Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP

CHECK l_flag IS INITIAL

La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value

ENDFORM visualizar_fm_exit

amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter

tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten

ENDFORM def_text_parameter

amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones

Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt

Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt

Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt

icon_create RESULT name text infoicon_create

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 17: buscar_ampliaciones FOROSAP

amp Form INICIALIZA_TABELAamp--------------------------------------------------------------------- text----------------------------------------------------------------------FORM inicializa_tabela

DATAe_tstc TYPE tstcl_tcode TYPE sy-tcode

REFRESH ti_includes

IF NOT p_prog IS INITIAL

MOVE p_prog TO ti_includes-nome0 TO ti_includes-nivelAPPEND ti_includes

- BUSCO EL PROGRAMAREAD REPORT ti_includes-nome INTO ti_programa

IF sy-subrc EQ 0REFRESH ti_programaELSE- EL PROGRAMA NO EXISTEMESSAGE s893(pz) WITH El programa p_prog no existeSTOPENDIF

ELSEIF NOT p_tcode IS INITIAL

SELECT SINGLE FROM tstcWHERE tcode EQ p_tcode

IF sy-subrc EQ 0

IF tstc-pgmna IS NOT INITIALMOVE tstc-pgmna TO ti_includes-nome0 TO ti_includes-nivelAPPEND ti_includesELSE Se trata de una transaccioacuten de paraacutemetros Obtengo la transaccioacuten asociadaCALL FUNCTION RS_TRANSACTION_SINGLE_GETEXPORTINGparameter_tcode = p_tcodeIMPORTINGtcode = l_tcode

SELECT SINGLE INTO e_tstcFROM tstcWHERE tcode EQ l_tcode

IF sy-subrc EQ 0MOVE e_tstc-pgmna TO ti_includes-nome0 TO ti_includes-nivel

APPEND ti_includesELSE- LA TRANSACCIOacuteN NO EXISTEMESSAGE s893(pz) WITH La transaccioacuten p_tcode no existeENDIFENDIFELSE- LA TRANSACCIOacuteN NO EXISTEMESSAGE s893(pz) WITH La transaccioacuten p_tcode no existeSTOPENDIFENDIF

ENDFORM INICIALIZA_TABELA

amp---------------------------------------------------------------------amp Form armar_alvamp--------------------------------------------------------------------- Armo el ALV----------------------------------------------------------------------FORM armar_alv

DATAl_repid TYPE sy-repid

MOVE sy-repid TO l_repid

CALL FUNCTION REUSE_ALV_BLOCK_LIST_INITEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMAND

IF p_ue IS NOT INITIALPERFORM construir_catalogo_exitPERFORM definir_layout USING TI_USER_EXITCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGEPERFORM sort TABLES ti_sortUSING TI_USER_EXIT

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_USER_EXITit_events = ti_eventsit_sort = ti_sorti_text = User-exitTABLESt_outtab = ti_user_exitEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

PERFORM construir_catalogo_uexitPERFORM definir_layout USING TI_FINAL

CHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_UEXITPERFORM sort TABLES ti_sortUSING TI_FINAL

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FINALit_events = ti_eventsit_sort = ti_sorti_text = User-exit TxCMODTABLESt_outtab = ti_finalEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_badi IS NOT INITIALPERFORM construir_catalogo_badiPERFORM definir_layout USING TI_BADICHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BADIPERFORM sort TABLES ti_sortUSING TI_BADI

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_BADIit_events = ti_eventsit_sort = ti_sorti_text = BadisTABLESt_outtab = ti_badiEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_bte IS NOT INITIALPERFORM construir_catalogo_btePERFORM definir_layout USING TI_BTECHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BTEPERFORM sort TABLES ti_sortUSING TI_BTE

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layout

it_fieldcat = ti_cati_tabname = TI_BTEit_events = ti_eventsit_sort = ti_sorti_text = BTETABLESt_outtab = ti_bteEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_enh IS NOT INITIALPERFORM construir_catalogo_enhPERFORM definir_layout USING TI_ENHCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHPERFORM sort TABLES ti_sortUSING TI_ENH

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHit_events = ti_eventsit_sort = ti_sorti_text = ENHTABLESt_outtab = ti_enhEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

PERFORM construir_catalogo_enhobjPERFORM definir_layout USING TI_ENHOBJCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHOBJPERFORM sort TABLES ti_sortUSING TI_ENHOBJ

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHOBJit_events = ti_eventsit_sort = ti_sorti_text = ENHOBJTABLESt_outtab = ti_enhobjEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_sust IS NOT INITIALPERFORM construir_catalogo_sustPERFORM definir_layout USING TI_SUSTCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_SUSTPERFORM sort TABLES ti_sortUSING TI_SUST

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_SUSTit_events = ti_eventsit_sort = ti_sorti_text = SustitucionesTABLESt_outtab = ti_sustEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_val IS NOT INITIALPERFORM construir_catalogo_valPERFORM definir_layout USING TI_VALCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_VALPERFORM sort TABLES ti_sortUSING TI_VAL

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_VALit_events = ti_eventsit_sort = ti_sorti_text = ValidacionesTABLESt_outtab = ti_valEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_fdex IS NOT INITIALPERFORM construir_catalogo_fdexPERFORM definir_layout USING TI_FDEXCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_FDEX

PERFORM sort TABLES ti_sortUSING TI_FDEX

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FDEXit_events = ti_eventsit_sort = ti_sorti_text = Field-exitTABLESt_outtab = ti_fdexEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

ENDFORM armar_alv

amp---------------------------------------------------------------------amp Form construir_catalogo_EXITamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_exit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_USER_EXITi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03

CF X c_text_04

ENDFORM construir_catalogo_EXIT

amp---------------------------------------------------------------------amp Form asignar_campo_a_catalogoamp--------------------------------------------------------------------- Asignar campo al catalogo ALV----------------------------------------------------------------------FORM asignar_campo_a_catalogo TABLES pt_cat STRUCTURE wa_catUSING p_fieldname LIKE wa_cat-fieldnamep_key LIKE wa_cat-keyp_col_pos TYPE cp_fix_column LIKE wa_cat-fix_columnp_hotspot LIKE wa_cat-hotspotp_do_sum LIKE wa_cat-do_sump_input LIKE wa_cat-inputp_checkbox LIKE wa_cat-checkboxp_no_out LIKE wa_cat-no_outp_icon LIKE wa_cat-iconp_reptext_ddic LIKE wa_cat-reptext_ddic

STATICS l_col_pos LIKE sy-cucol

Asignar atributos de campo en el catalogo de cabecera ALVCLEAR wa_catREAD TABLE pt_cat INTO wa_catWITH KEY fieldname = p_fieldname

CHECK sy-subrc EQ 0

IF NOT p_reptext_ddic IS INITIALwa_cat-seltext_l = wa_cat-seltext_m =wa_cat-seltext_s = wa_cat-reptext_ddic = p_reptext_ddicENDIF

IF p_col_pos EQ X Inicializo el conteo para ordenar las columnasl_col_pos = 1ELSEADD 1 TO l_col_posENDIF

wa_cat-fieldname = p_fieldnamewa_cat-key = p_keywa_cat-col_pos = l_col_poswa_cat-fix_column = p_fix_columnwa_cat-hotspot = p_hotspotwa_cat-do_sum = p_do_sumwa_cat-edit = wa_cat-input = p_inputwa_cat-checkbox = p_checkboxwa_cat-no_out = p_no_outwa_cat-icon = p_icon

MODIFY pt_cat FROM wa_cat INDEX sy-tabix

ENDFORM asignar_campo_a_catalogo

amp---------------------------------------------------------------------amp Form definir_layoutamp--------------------------------------------------------------------- Definir atributos del layout de reporte----------------------------------------------------------------------FORM definir_layout USING p_table TYPE slis_layout_alv-box_tabnameCHANGING p_layout TYPE slis_layout_alv

CLEAR p_layout

IF p_table NE TI_CIMP Marco el campo para la seleccioacutenp_layout-box_fieldname = SELp_layout-box_tabname = p_tableENDIFp_layout-zebra = Xp_layout-colwidth_optimize = Xp_layout-no_vline = p_layout-no_colhead = p_layout-lights_condense = Xp_layout-detail_popup = Xp_layout-detail_initial_lines = Xp_layout-flexible_key = p_layout-key_hotspot = p_layout-confirmation_prompt = X

ENDFORM definir_layout

amp---------------------------------------------------------------------amp Form construir_eventosamp--------------------------------------------------------------------- Asignar eventos soportados----------------------------------------------------------------------FORM construir_eventos USING p_form LIKE wa_events-formDATAl_type(1) TYPE n

REFRESH ti_eventsCLEAR wa_events

ALV Simple Block appendl_type = 2

Buscar secciones para eventosCALL FUNCTION REUSE_ALV_EVENTS_GETEXPORTINGi_list_type = l_typeIMPORTINGet_events = ti_events

Leer evento TOP_OF_PAGEREAD TABLE ti_events WITH KEY name = slis_ev_top_of_pageINTO wa_events Asignar Rutina FORM TOP_OF_PAGE a eventoIF sy-subrc = 0MOVE p_form TO wa_events-formMODIFY ti_events FROM wa_events INDEX sy-tabixENDIF

ENDFORM construir_eventos

amp---------------------------------------------------------------------amp Form top_of_pageamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_user_exitWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUser-exit

ENDFORM top_of_page

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_UEXITamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_uexit

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_finalWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUSER-EXITs TxSMOD

ENDFORM TOP_OF_PAGE_UEXIT

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_FDEXamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_fdex

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_fdexWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incFIELD-EXITs

ENDFORM TOP_OF_PAGE_FDEX

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BADIamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_badi

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_badiWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBADIs

ENDFORM TOP_OF_PAGE_BADI

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BTEamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_bte

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_bteWRITE sy-tfill TO l_tfill_cant

CONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBTEs

ENDFORM TOP_OF_PAGE_BTE

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enh

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_enhWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENH

amp---------------------------------------------------------------------amp Form sortamp--------------------------------------------------------------------- Creo el sort del ALV (FM)---------------------------------------------------------------------- --gtPT_sort Tabla --gtP_tabname Nombre de la tabla----------------------------------------------------------------------FORM sort TABLES pt_sortUSING p_tabname TYPE any

CLEAR pt_sort wa_sortREFRESH pt_sort

CASE p_tabnameWHEN TI_SUST

wa_sort-fieldname = SUBSTIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = SUBSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = CONSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN TI_VAL

wa_sort-fieldname = VALIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = VALSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN TI_ENHOBJ

wa_sort-fieldname = ENHNAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = VERSIONwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN OTHERS

IF p_tabname NE TI_FINAL

wa_sort-fieldname = TIPOwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

IF p_tabname NE TI_FDEX

wa_sort-fieldname = NIVELwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = PROGRAMAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = LINEAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

ENDIF

ELSE

wa_sort-fieldname = NAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = MEMBERwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sortENDIFENDCASE

ENDFORM sort

amp---------------------------------------------------------------------amp Form mostrar_listadoamp--------------------------------------------------------------------- Mostrar listado ALV----------------------------------------------------------------------FORM mostrar_listado

wa_print-reserve_lines = 2

CALL FUNCTION REUSE_ALV_BLOCK_LIST_DISPLAY

EXPORTINGis_print = wa_printEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM mostrar_listado

amp---------------------------------------------------------------------amp Form user_commandamp--------------------------------------------------------------------- Evaluar acciones del usuario----------------------------------------------------------------------FORM user_command USING ucomm LIKE sy-ucommsfields TYPE slis_selfield

DATA l_break TYPE c

Rescatar el registro seleccionadoCASE sfields-tabnameWHEN TI_USER_EXITREAD TABLE ti_user_exit INDEX sfields-tabindexWHEN TI_BADIREAD TABLE ti_badi INDEX sfields-tabindexWHEN TI_BTEREAD TABLE ti_bte INDEX sfields-tabindexWHEN TI_ENHREAD TABLE ti_enh INDEX sfields-tabindexWHEN TI_ENHOBJREAD TABLE ti_enhobj INDEX sfields-tabindexWHEN TI_FDEXREAD TABLE ti_fdex INDEX sfields-tabindexWHEN TI_FINALREAD TABLE ti_final INDEX sfields-tabindexWHEN TI_SUSTREAD TABLE ti_sust INDEX sfields-tabindexWHEN TI_VALREAD TABLE ti_val INDEX sfields-tabindexWHEN TI_CIMPREAD TABLE ti_cimp INDEX sfields-tabindexENDCASE

Seleccion de opcionCASE ucomm DOUBLE CLICKWHEN ampIC1 Evaluar valor de campo seleccionadoCHECK NOT sfields-value IS INITIAL

CASE sfields-tabnameWHEN TI_USER_EXIT USER-EXITIF ti_user_exit-tipo EQ sfields-value(4)SEARCH ti_user_exit-cf FOR c_enhanceCHECK sy-subrc EQ 0PERFORM visualizar_exit USING ti_user_exit-programati_user_exit-cf

ELSEIF ti_user_exit-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_user_exit-programati_user_exit-lineaMOVE X TO l_breakELSEIF ti_user_exit-break EQ sfields-value(4)OR ti_user_exit-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_user_exit-programati_user_exit-lineati_user_exit-breakMOVE X TO l_breakENDIF

WHEN TI_FINAL USER-EXIT Tx CMODIF ti_final-name EQ sfields-valueCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = ti_final-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSEIF ti_final-include EQ sfields-valuePERFORM visualizar_linea USING ti_final-programa1MOVE X TO l_breakENDIF

WHEN TI_BADI BadiIF ti_badi-tipo EQ sfields-value(4)PERFORM visualizar_badi USING ti_badi-cfELSEIF ti_badi-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_badi-programati_badi-lineaMOVE X TO l_breakELSEIF ti_badi-break EQ sfields-value(4)OR ti_badi-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_badi-programati_badi-lineati_badi-breakMOVE X TO l_breakENDIF

WHEN TI_BTE BTEIF ti_bte-tipo EQ sfields-value(4)PERFORM fibf USING ti_bte-cfELSEIF ti_bte-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_bte-programati_bte-lineaMOVE X TO l_breakELSEIF ti_bte-break EQ sfields-value(4)OR ti_bte-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_bte-programati_bte-linea

ti_bte-breakMOVE X TO l_breakENDIF

WHEN TI_ENH Punto de ampliacioacutenIF ti_enh-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_enh-programati_enh-lineaMOVE X TO l_breakELSEIF ti_enh-tipo EQ sfields-value(4)PERFORM bi_se18 USING ti_enh-cfENDIF

WHEN TI_ENHOBJ Punto de ampliacioacutenIF ti_enhobj-enhname EQ sfields-value(30)PERFORM bi_se19 USING ti_enhobj-enhnameENDIF

WHEN TI_SUST SustitucionesIF ti_sust-substid EQ sfields-value(7) ORti_sust-subseqnr EQ sfields-value(3)PERFORM visualizar_sust USING ti_sust-substidti_sust-subseqnrENDIF

WHEN TI_VAL ValidacionesIF ti_val-valid EQ sfields-value(7) ORti_val-valseqnr EQ sfields-value(3)PERFORM visualizar_val USING ti_val-validti_val-valseqnrENDIF

WHEN TI_FDEX Field-exitIF ti_fdex-tipo EQ sfields-valueSUBMIT rsmodprf AND RETURNELSEIF ti_fdex-cf(60) EQ sfields-value Visualizo el field-exitCALL FUNCTION RS_FUNCTION_SHOWEXPORTINGfuncname = ti_fdex-cf

CALL FUNCTION RS_NAVIGATION_MONITORENDIF

WHEN TI_CIMP Customer implementation

CASE sfields-fieldnameWHEN ENHNAMEPERFORM bi_se19 USING ti_cimp-enhnameWHEN ENHINCLUDEPERFORM visualizar_enh_cf USING ti_cimp-enhinclude

WHEN OTHERS DO NOTHING ENDCASE

WHEN OTHERS DO NOTHING ENDCASE

WHEN OTHERS DO NOTHING ENDCASE

IF l_break IS NOT INITIAL AND sfields-tabname NE TI_CIMPWAIT UP TO 1 SECONDSPERFORM cargar_breakENDIFsfields-refresh = X

ENDFORM user_command

amp---------------------------------------------------------------------amp Form visualizar_lineaamp--------------------------------------------------------------------- Visualizo la linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_linea USING p_programa TYPE sy-repidp_linea

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_programaobject_type = c_typeposition = p_lineaEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM visualizar_linea

amp---------------------------------------------------------------------amp Form buscar_exitamp--------------------------------------------------------------------- Buscar USER-EXIT----------------------------------------------------------------------FORM buscar_exit

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN USER-EXITSEARCH ti_programa-cf FOR c_user_exit- SE ENCONTRO UN USER-EXIT Y SE VERIFICA SI LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS PERFORMSEARCH ti_programa-cf FOR c_performCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LAS ASIGNACIONESSEARCH ti_programa-cf FOR c_igualCHECK sy-subrc NE 0

CLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INIacuteCIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF

ENDFORM buscar_exit

amp---------------------------------------------------------------------amp Form buscar_badiamp--------------------------------------------------------------------- Buscar BADI----------------------------------------------------------------------FORM buscar_badi

DATAl_subrc LIKE sy-subrc

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BADISEARCH ti_programa-cf FOR c_badi- SE ENCONTRO UNA BADI Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

SEARCH ti_programa-cf FOR c_includeIF sy-subrc NE 0CLEAR l_subrcSEARCH ti_programa-cf FOR c_methodIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_funcao_2IF sy-subrc NE 0SEARCH ti_programa-cf FOR c_performIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_type_refIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_formMOVE 4 TO l_subrcENDIFENDIFENDIFENDIF

IF l_subrc EQ 0CLEAR ti_badi

- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIFELSECHECK p_handl IS NOT INITIAL- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA INSTANCIA DE- UNA BADISEARCH ti_programa-cf FOR c_handler- SE ENCONTRO UNA INSTANCIA DE IMPLEMENACIOacuteN Y SE VERIFICA SI LA LINEA- NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

SEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0CLEAR ti_badi- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIF

ENDFORM buscar_badi

amp---------------------------------------------------------------------amp Form buscar_bteamp--------------------------------------------------------------------- Buscar BTE----------------------------------------------------------------------FORM buscar_bte

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OPEN_FI_PERFORM

- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endform

CHECK sy-subrc NE 0

CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte1- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OUTBOUND_CALL

- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0

CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF

ENDFORM buscar_bte

amp---------------------------------------------------------------------amp Form repid_f4amp--------------------------------------------------------------------- Ejecuto el F4 para buscar programas----------------------------------------------------------------------FORM repid_f4

CALL FUNCTION REPOSITORY_INFO_SYSTEM_F4EXPORTINGobject_type = PROGobject_name = p_progsuppress_selection = XIMPORTINGobject_name_selected = p_progEXCEPTIONS

cancel = 1wrong_type = 2OTHERS = 3

ENDFORM repid_f4

amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf

DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

SEARCH p_cf FOR 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 INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

READ TABLE lt_cf INDEX 4

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

CHECK sy-subrc IS INITIAL

Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten

textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer

CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4

IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF

WHEN OTHERS Do Nothing ENDCASE

ENDFORM visualizar_badi

amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf

DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

CLEAR d010inc modsap modact

Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid

IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF

SEARCH p_cf FOR c_enhance

CHECK sy-subrc IS INITIAL

REFRESH lt_cf

l_cf = 500 - sy-fdpos

MOVE p_cf+sy-fdpos(l_cf) TO l_linea

SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3

TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS

Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _

Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit

CHECK sy-subrc IS INITIAL

Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM

modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3

ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname

CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ENDIF

ENDFORM visualizar_exit

amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit

DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo

DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe

DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE

CHECK p_fdex IS NOT INITIAL

CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe

MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex

IF p_prog IS NOT INITIAL

MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF

Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog

LOOP AT lt_d020s

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

REFRESH lt_d021s

Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4

Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X

SEARCH lt_d021s-fnam FOR -

IF sy-subrc IS INITIAL

MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum

Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname

APPEND lt_campo

ENDIF

ENDLOOPENDLOOP

CHECK lt_campo[] IS NOT INITIAL

SORT lt_campo BY repid dnum tabname fieldname

DELETE ADJACENT DUPLICATES FROM lt_campo

Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname

SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l

LOOP AT lt_dd03l

CLEAR tddir tddirs

SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname

CHECK sy-subrc IS INITIAL

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog

CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF

Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf

IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF

READ TABLE lt_fe WITH KEY cf = lt_fe-cf

CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP

LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex

ENDLOOP

ENDFORM buscar_field_exit

amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf

DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c

SEARCH p_cf FOR c_bte

IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ELSE

SEARCH p_cf FOR c_bte1

CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ENDIF

IF l_tipo IS NOT INITIAL

PERFORM visualizar_bte USING l_tipol_linea

ELSECALL TRANSACTION FIBFENDIF

ENDFORM fibf

amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT

EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM breakpoint

amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_badi

amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE

i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_bte

amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X TIPO X X c_text_05CF X c_text_04

ENDFORM construir_catalogo_FDEX

amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc

DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

CHECK lt_break[] IS NOT INITIAL

IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix

MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF

IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix

MOVEti_badi-linea TO l_lineti_badi-programa TO l_program

READ TABLE lt_break INTO wa_break

WITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF

IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix

MOVEti_bte-linea TO l_lineti_bte-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF

ENDFORM cargar_break

amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

DATAl_tabix TYPE sy-tabix

l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

SELECT SINGLE FROM d010incWHERE include = p_programa

IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF

MOVEp_linea TO l_linep_programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM asignar_break

amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit

IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF

PERFORM get_objects Get Objects

ENDFORM buscar_user_exit

amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects

DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area

DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix

SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog

IF sy-subrc = 0

SORT ti_tadir BY obj_name devclass

SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass

IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF

- Get UserExit namesLOOP AT ti_jtab

SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E

APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area

l_fname = ti_final-member

CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include

LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP

CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP

ENDFORM get_objects

amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X

ENDFORM construir_catalogo_uexit

amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------

FORM visualizar_ampliacion

DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF

SELECT SINGLE FROM modsapWHERE member EQ l_member

IF sy-subrc IS INITIAL

Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member

ENDIF

ENDFORM visualizar_ampliacion

amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea

RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs

REFRESH r_event r_procs

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event

SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs

SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE

ENDFORM visualizar_bte

amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE

----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c

DATAl_linea(500) TYPE c

DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

MOVE lt_fields-value TO l_linea

PERFORM visualizar_bte USING p_tipol_linea

ENDFORM cargar_bte

amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface

DATAl_linea(500) TYPE c

DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE

InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF

ENDFORM visualizar_interface

amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones

CHECK p_sust IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922

ENDFORM buscar_sustituciones

amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST

ENDFORM construir_catalogo_sust

amp---------------------------------------------------------------------

amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones

ENDFORM TOP_OF_PAGE_SUST

amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4

CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_sust

amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones

CHECK p_val IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931

ENDFORM buscar_validaciones

amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID

ENDFORM construir_catalogo_val

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones

ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2

CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_val

amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto

DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF

SELECT SINGLE FROM modsapWHERE name EQ l_name

IF sy-subrc IS INITIAL

MOVE l_name TO l_member

SELECT SINGLE FROM modactWHERE member EQ l_member

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF

ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF

ENDFORM visualizar_proyecto

amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel

APPEND ti_enh

ENDIFENDIFENDIF

ENDFORM buscar_punto_ampliacioacuten

amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_enh

amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh

DATA l_obj_name TYPE enhobj-obj_name

DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name

CHECK p_enh IS NOT INITIAL

IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF

REFRESH lt_obj_name

LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP

SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name

ENDFORM buscar_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X

ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME

ENDFORM construir_catalogo_enhobj

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENHOBJ

amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM bi_se19

amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro

CLEAR ti_bdcdatati_bdcdata-program = program

ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata

ENDFORM BDC_DYNPRO

amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval

CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata

ENDFORM BDC_FIELD

amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa

DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)

CHECK ti_gb31t[] IS NOT INITIAL

DO

Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2

IF l_exit EQ XEXITENDIF

CHECK l_exit IS INITIAL

Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND

CHECK l_boolpool IS NOT INITIAL

MOVE l_boolpool TO l_repid

Visualizo el programaPERFORM visualizar_linea USING l_repid01

ENDDO

ENDFORM visualizar_programa

amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope

STATICS l_flag TYPE c

DATA l_tit(65) TYPE c

CHECK l_flag IS INITIAL

l_flag = X

WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline

4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM texto_tope

amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf

DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off

CHECK l_off IS NOT INITIAL

ADD 7 TO l_offl_cf = 500 - l_off

SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_enhspotname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1

invalid_object_type = 2OTHERS = 3

ENDFORM bi_se18

amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit

DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE

DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE

MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE

MOVE lt_fields-value TO l_nameENDIF

Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_

LOOP AT lt_tfdir

CLEARl_group l_include l_namespace l_str_area

l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl

IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl

CHECK sy-subrc IS INITIAL

Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP

CHECK l_flag IS INITIAL

La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value

ENDFORM visualizar_fm_exit

amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter

tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten

ENDFORM def_text_parameter

amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones

Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt

Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt

Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt

icon_create RESULT name text infoicon_create

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 18: buscar_ampliaciones FOROSAP

APPEND ti_includesELSE- LA TRANSACCIOacuteN NO EXISTEMESSAGE s893(pz) WITH La transaccioacuten p_tcode no existeENDIFENDIFELSE- LA TRANSACCIOacuteN NO EXISTEMESSAGE s893(pz) WITH La transaccioacuten p_tcode no existeSTOPENDIFENDIF

ENDFORM INICIALIZA_TABELA

amp---------------------------------------------------------------------amp Form armar_alvamp--------------------------------------------------------------------- Armo el ALV----------------------------------------------------------------------FORM armar_alv

DATAl_repid TYPE sy-repid

MOVE sy-repid TO l_repid

CALL FUNCTION REUSE_ALV_BLOCK_LIST_INITEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMAND

IF p_ue IS NOT INITIALPERFORM construir_catalogo_exitPERFORM definir_layout USING TI_USER_EXITCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGEPERFORM sort TABLES ti_sortUSING TI_USER_EXIT

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_USER_EXITit_events = ti_eventsit_sort = ti_sorti_text = User-exitTABLESt_outtab = ti_user_exitEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

PERFORM construir_catalogo_uexitPERFORM definir_layout USING TI_FINAL

CHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_UEXITPERFORM sort TABLES ti_sortUSING TI_FINAL

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FINALit_events = ti_eventsit_sort = ti_sorti_text = User-exit TxCMODTABLESt_outtab = ti_finalEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_badi IS NOT INITIALPERFORM construir_catalogo_badiPERFORM definir_layout USING TI_BADICHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BADIPERFORM sort TABLES ti_sortUSING TI_BADI

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_BADIit_events = ti_eventsit_sort = ti_sorti_text = BadisTABLESt_outtab = ti_badiEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_bte IS NOT INITIALPERFORM construir_catalogo_btePERFORM definir_layout USING TI_BTECHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BTEPERFORM sort TABLES ti_sortUSING TI_BTE

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layout

it_fieldcat = ti_cati_tabname = TI_BTEit_events = ti_eventsit_sort = ti_sorti_text = BTETABLESt_outtab = ti_bteEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_enh IS NOT INITIALPERFORM construir_catalogo_enhPERFORM definir_layout USING TI_ENHCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHPERFORM sort TABLES ti_sortUSING TI_ENH

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHit_events = ti_eventsit_sort = ti_sorti_text = ENHTABLESt_outtab = ti_enhEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

PERFORM construir_catalogo_enhobjPERFORM definir_layout USING TI_ENHOBJCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHOBJPERFORM sort TABLES ti_sortUSING TI_ENHOBJ

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHOBJit_events = ti_eventsit_sort = ti_sorti_text = ENHOBJTABLESt_outtab = ti_enhobjEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_sust IS NOT INITIALPERFORM construir_catalogo_sustPERFORM definir_layout USING TI_SUSTCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_SUSTPERFORM sort TABLES ti_sortUSING TI_SUST

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_SUSTit_events = ti_eventsit_sort = ti_sorti_text = SustitucionesTABLESt_outtab = ti_sustEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_val IS NOT INITIALPERFORM construir_catalogo_valPERFORM definir_layout USING TI_VALCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_VALPERFORM sort TABLES ti_sortUSING TI_VAL

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_VALit_events = ti_eventsit_sort = ti_sorti_text = ValidacionesTABLESt_outtab = ti_valEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_fdex IS NOT INITIALPERFORM construir_catalogo_fdexPERFORM definir_layout USING TI_FDEXCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_FDEX

PERFORM sort TABLES ti_sortUSING TI_FDEX

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FDEXit_events = ti_eventsit_sort = ti_sorti_text = Field-exitTABLESt_outtab = ti_fdexEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

ENDFORM armar_alv

amp---------------------------------------------------------------------amp Form construir_catalogo_EXITamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_exit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_USER_EXITi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03

CF X c_text_04

ENDFORM construir_catalogo_EXIT

amp---------------------------------------------------------------------amp Form asignar_campo_a_catalogoamp--------------------------------------------------------------------- Asignar campo al catalogo ALV----------------------------------------------------------------------FORM asignar_campo_a_catalogo TABLES pt_cat STRUCTURE wa_catUSING p_fieldname LIKE wa_cat-fieldnamep_key LIKE wa_cat-keyp_col_pos TYPE cp_fix_column LIKE wa_cat-fix_columnp_hotspot LIKE wa_cat-hotspotp_do_sum LIKE wa_cat-do_sump_input LIKE wa_cat-inputp_checkbox LIKE wa_cat-checkboxp_no_out LIKE wa_cat-no_outp_icon LIKE wa_cat-iconp_reptext_ddic LIKE wa_cat-reptext_ddic

STATICS l_col_pos LIKE sy-cucol

Asignar atributos de campo en el catalogo de cabecera ALVCLEAR wa_catREAD TABLE pt_cat INTO wa_catWITH KEY fieldname = p_fieldname

CHECK sy-subrc EQ 0

IF NOT p_reptext_ddic IS INITIALwa_cat-seltext_l = wa_cat-seltext_m =wa_cat-seltext_s = wa_cat-reptext_ddic = p_reptext_ddicENDIF

IF p_col_pos EQ X Inicializo el conteo para ordenar las columnasl_col_pos = 1ELSEADD 1 TO l_col_posENDIF

wa_cat-fieldname = p_fieldnamewa_cat-key = p_keywa_cat-col_pos = l_col_poswa_cat-fix_column = p_fix_columnwa_cat-hotspot = p_hotspotwa_cat-do_sum = p_do_sumwa_cat-edit = wa_cat-input = p_inputwa_cat-checkbox = p_checkboxwa_cat-no_out = p_no_outwa_cat-icon = p_icon

MODIFY pt_cat FROM wa_cat INDEX sy-tabix

ENDFORM asignar_campo_a_catalogo

amp---------------------------------------------------------------------amp Form definir_layoutamp--------------------------------------------------------------------- Definir atributos del layout de reporte----------------------------------------------------------------------FORM definir_layout USING p_table TYPE slis_layout_alv-box_tabnameCHANGING p_layout TYPE slis_layout_alv

CLEAR p_layout

IF p_table NE TI_CIMP Marco el campo para la seleccioacutenp_layout-box_fieldname = SELp_layout-box_tabname = p_tableENDIFp_layout-zebra = Xp_layout-colwidth_optimize = Xp_layout-no_vline = p_layout-no_colhead = p_layout-lights_condense = Xp_layout-detail_popup = Xp_layout-detail_initial_lines = Xp_layout-flexible_key = p_layout-key_hotspot = p_layout-confirmation_prompt = X

ENDFORM definir_layout

amp---------------------------------------------------------------------amp Form construir_eventosamp--------------------------------------------------------------------- Asignar eventos soportados----------------------------------------------------------------------FORM construir_eventos USING p_form LIKE wa_events-formDATAl_type(1) TYPE n

REFRESH ti_eventsCLEAR wa_events

ALV Simple Block appendl_type = 2

Buscar secciones para eventosCALL FUNCTION REUSE_ALV_EVENTS_GETEXPORTINGi_list_type = l_typeIMPORTINGet_events = ti_events

Leer evento TOP_OF_PAGEREAD TABLE ti_events WITH KEY name = slis_ev_top_of_pageINTO wa_events Asignar Rutina FORM TOP_OF_PAGE a eventoIF sy-subrc = 0MOVE p_form TO wa_events-formMODIFY ti_events FROM wa_events INDEX sy-tabixENDIF

ENDFORM construir_eventos

amp---------------------------------------------------------------------amp Form top_of_pageamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_user_exitWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUser-exit

ENDFORM top_of_page

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_UEXITamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_uexit

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_finalWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUSER-EXITs TxSMOD

ENDFORM TOP_OF_PAGE_UEXIT

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_FDEXamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_fdex

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_fdexWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incFIELD-EXITs

ENDFORM TOP_OF_PAGE_FDEX

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BADIamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_badi

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_badiWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBADIs

ENDFORM TOP_OF_PAGE_BADI

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BTEamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_bte

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_bteWRITE sy-tfill TO l_tfill_cant

CONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBTEs

ENDFORM TOP_OF_PAGE_BTE

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enh

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_enhWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENH

amp---------------------------------------------------------------------amp Form sortamp--------------------------------------------------------------------- Creo el sort del ALV (FM)---------------------------------------------------------------------- --gtPT_sort Tabla --gtP_tabname Nombre de la tabla----------------------------------------------------------------------FORM sort TABLES pt_sortUSING p_tabname TYPE any

CLEAR pt_sort wa_sortREFRESH pt_sort

CASE p_tabnameWHEN TI_SUST

wa_sort-fieldname = SUBSTIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = SUBSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = CONSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN TI_VAL

wa_sort-fieldname = VALIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = VALSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN TI_ENHOBJ

wa_sort-fieldname = ENHNAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = VERSIONwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN OTHERS

IF p_tabname NE TI_FINAL

wa_sort-fieldname = TIPOwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

IF p_tabname NE TI_FDEX

wa_sort-fieldname = NIVELwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = PROGRAMAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = LINEAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

ENDIF

ELSE

wa_sort-fieldname = NAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = MEMBERwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sortENDIFENDCASE

ENDFORM sort

amp---------------------------------------------------------------------amp Form mostrar_listadoamp--------------------------------------------------------------------- Mostrar listado ALV----------------------------------------------------------------------FORM mostrar_listado

wa_print-reserve_lines = 2

CALL FUNCTION REUSE_ALV_BLOCK_LIST_DISPLAY

EXPORTINGis_print = wa_printEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM mostrar_listado

amp---------------------------------------------------------------------amp Form user_commandamp--------------------------------------------------------------------- Evaluar acciones del usuario----------------------------------------------------------------------FORM user_command USING ucomm LIKE sy-ucommsfields TYPE slis_selfield

DATA l_break TYPE c

Rescatar el registro seleccionadoCASE sfields-tabnameWHEN TI_USER_EXITREAD TABLE ti_user_exit INDEX sfields-tabindexWHEN TI_BADIREAD TABLE ti_badi INDEX sfields-tabindexWHEN TI_BTEREAD TABLE ti_bte INDEX sfields-tabindexWHEN TI_ENHREAD TABLE ti_enh INDEX sfields-tabindexWHEN TI_ENHOBJREAD TABLE ti_enhobj INDEX sfields-tabindexWHEN TI_FDEXREAD TABLE ti_fdex INDEX sfields-tabindexWHEN TI_FINALREAD TABLE ti_final INDEX sfields-tabindexWHEN TI_SUSTREAD TABLE ti_sust INDEX sfields-tabindexWHEN TI_VALREAD TABLE ti_val INDEX sfields-tabindexWHEN TI_CIMPREAD TABLE ti_cimp INDEX sfields-tabindexENDCASE

Seleccion de opcionCASE ucomm DOUBLE CLICKWHEN ampIC1 Evaluar valor de campo seleccionadoCHECK NOT sfields-value IS INITIAL

CASE sfields-tabnameWHEN TI_USER_EXIT USER-EXITIF ti_user_exit-tipo EQ sfields-value(4)SEARCH ti_user_exit-cf FOR c_enhanceCHECK sy-subrc EQ 0PERFORM visualizar_exit USING ti_user_exit-programati_user_exit-cf

ELSEIF ti_user_exit-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_user_exit-programati_user_exit-lineaMOVE X TO l_breakELSEIF ti_user_exit-break EQ sfields-value(4)OR ti_user_exit-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_user_exit-programati_user_exit-lineati_user_exit-breakMOVE X TO l_breakENDIF

WHEN TI_FINAL USER-EXIT Tx CMODIF ti_final-name EQ sfields-valueCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = ti_final-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSEIF ti_final-include EQ sfields-valuePERFORM visualizar_linea USING ti_final-programa1MOVE X TO l_breakENDIF

WHEN TI_BADI BadiIF ti_badi-tipo EQ sfields-value(4)PERFORM visualizar_badi USING ti_badi-cfELSEIF ti_badi-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_badi-programati_badi-lineaMOVE X TO l_breakELSEIF ti_badi-break EQ sfields-value(4)OR ti_badi-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_badi-programati_badi-lineati_badi-breakMOVE X TO l_breakENDIF

WHEN TI_BTE BTEIF ti_bte-tipo EQ sfields-value(4)PERFORM fibf USING ti_bte-cfELSEIF ti_bte-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_bte-programati_bte-lineaMOVE X TO l_breakELSEIF ti_bte-break EQ sfields-value(4)OR ti_bte-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_bte-programati_bte-linea

ti_bte-breakMOVE X TO l_breakENDIF

WHEN TI_ENH Punto de ampliacioacutenIF ti_enh-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_enh-programati_enh-lineaMOVE X TO l_breakELSEIF ti_enh-tipo EQ sfields-value(4)PERFORM bi_se18 USING ti_enh-cfENDIF

WHEN TI_ENHOBJ Punto de ampliacioacutenIF ti_enhobj-enhname EQ sfields-value(30)PERFORM bi_se19 USING ti_enhobj-enhnameENDIF

WHEN TI_SUST SustitucionesIF ti_sust-substid EQ sfields-value(7) ORti_sust-subseqnr EQ sfields-value(3)PERFORM visualizar_sust USING ti_sust-substidti_sust-subseqnrENDIF

WHEN TI_VAL ValidacionesIF ti_val-valid EQ sfields-value(7) ORti_val-valseqnr EQ sfields-value(3)PERFORM visualizar_val USING ti_val-validti_val-valseqnrENDIF

WHEN TI_FDEX Field-exitIF ti_fdex-tipo EQ sfields-valueSUBMIT rsmodprf AND RETURNELSEIF ti_fdex-cf(60) EQ sfields-value Visualizo el field-exitCALL FUNCTION RS_FUNCTION_SHOWEXPORTINGfuncname = ti_fdex-cf

CALL FUNCTION RS_NAVIGATION_MONITORENDIF

WHEN TI_CIMP Customer implementation

CASE sfields-fieldnameWHEN ENHNAMEPERFORM bi_se19 USING ti_cimp-enhnameWHEN ENHINCLUDEPERFORM visualizar_enh_cf USING ti_cimp-enhinclude

WHEN OTHERS DO NOTHING ENDCASE

WHEN OTHERS DO NOTHING ENDCASE

WHEN OTHERS DO NOTHING ENDCASE

IF l_break IS NOT INITIAL AND sfields-tabname NE TI_CIMPWAIT UP TO 1 SECONDSPERFORM cargar_breakENDIFsfields-refresh = X

ENDFORM user_command

amp---------------------------------------------------------------------amp Form visualizar_lineaamp--------------------------------------------------------------------- Visualizo la linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_linea USING p_programa TYPE sy-repidp_linea

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_programaobject_type = c_typeposition = p_lineaEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM visualizar_linea

amp---------------------------------------------------------------------amp Form buscar_exitamp--------------------------------------------------------------------- Buscar USER-EXIT----------------------------------------------------------------------FORM buscar_exit

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN USER-EXITSEARCH ti_programa-cf FOR c_user_exit- SE ENCONTRO UN USER-EXIT Y SE VERIFICA SI LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS PERFORMSEARCH ti_programa-cf FOR c_performCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LAS ASIGNACIONESSEARCH ti_programa-cf FOR c_igualCHECK sy-subrc NE 0

CLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INIacuteCIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF

ENDFORM buscar_exit

amp---------------------------------------------------------------------amp Form buscar_badiamp--------------------------------------------------------------------- Buscar BADI----------------------------------------------------------------------FORM buscar_badi

DATAl_subrc LIKE sy-subrc

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BADISEARCH ti_programa-cf FOR c_badi- SE ENCONTRO UNA BADI Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

SEARCH ti_programa-cf FOR c_includeIF sy-subrc NE 0CLEAR l_subrcSEARCH ti_programa-cf FOR c_methodIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_funcao_2IF sy-subrc NE 0SEARCH ti_programa-cf FOR c_performIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_type_refIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_formMOVE 4 TO l_subrcENDIFENDIFENDIFENDIF

IF l_subrc EQ 0CLEAR ti_badi

- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIFELSECHECK p_handl IS NOT INITIAL- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA INSTANCIA DE- UNA BADISEARCH ti_programa-cf FOR c_handler- SE ENCONTRO UNA INSTANCIA DE IMPLEMENACIOacuteN Y SE VERIFICA SI LA LINEA- NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

SEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0CLEAR ti_badi- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIF

ENDFORM buscar_badi

amp---------------------------------------------------------------------amp Form buscar_bteamp--------------------------------------------------------------------- Buscar BTE----------------------------------------------------------------------FORM buscar_bte

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OPEN_FI_PERFORM

- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endform

CHECK sy-subrc NE 0

CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte1- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OUTBOUND_CALL

- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0

CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF

ENDFORM buscar_bte

amp---------------------------------------------------------------------amp Form repid_f4amp--------------------------------------------------------------------- Ejecuto el F4 para buscar programas----------------------------------------------------------------------FORM repid_f4

CALL FUNCTION REPOSITORY_INFO_SYSTEM_F4EXPORTINGobject_type = PROGobject_name = p_progsuppress_selection = XIMPORTINGobject_name_selected = p_progEXCEPTIONS

cancel = 1wrong_type = 2OTHERS = 3

ENDFORM repid_f4

amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf

DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

SEARCH p_cf FOR 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 INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

READ TABLE lt_cf INDEX 4

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

CHECK sy-subrc IS INITIAL

Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten

textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer

CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4

IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF

WHEN OTHERS Do Nothing ENDCASE

ENDFORM visualizar_badi

amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf

DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

CLEAR d010inc modsap modact

Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid

IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF

SEARCH p_cf FOR c_enhance

CHECK sy-subrc IS INITIAL

REFRESH lt_cf

l_cf = 500 - sy-fdpos

MOVE p_cf+sy-fdpos(l_cf) TO l_linea

SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3

TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS

Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _

Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit

CHECK sy-subrc IS INITIAL

Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM

modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3

ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname

CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ENDIF

ENDFORM visualizar_exit

amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit

DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo

DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe

DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE

CHECK p_fdex IS NOT INITIAL

CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe

MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex

IF p_prog IS NOT INITIAL

MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF

Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog

LOOP AT lt_d020s

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

REFRESH lt_d021s

Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4

Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X

SEARCH lt_d021s-fnam FOR -

IF sy-subrc IS INITIAL

MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum

Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname

APPEND lt_campo

ENDIF

ENDLOOPENDLOOP

CHECK lt_campo[] IS NOT INITIAL

SORT lt_campo BY repid dnum tabname fieldname

DELETE ADJACENT DUPLICATES FROM lt_campo

Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname

SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l

LOOP AT lt_dd03l

CLEAR tddir tddirs

SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname

CHECK sy-subrc IS INITIAL

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog

CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF

Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf

IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF

READ TABLE lt_fe WITH KEY cf = lt_fe-cf

CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP

LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex

ENDLOOP

ENDFORM buscar_field_exit

amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf

DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c

SEARCH p_cf FOR c_bte

IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ELSE

SEARCH p_cf FOR c_bte1

CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ENDIF

IF l_tipo IS NOT INITIAL

PERFORM visualizar_bte USING l_tipol_linea

ELSECALL TRANSACTION FIBFENDIF

ENDFORM fibf

amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT

EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM breakpoint

amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_badi

amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE

i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_bte

amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X TIPO X X c_text_05CF X c_text_04

ENDFORM construir_catalogo_FDEX

amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc

DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

CHECK lt_break[] IS NOT INITIAL

IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix

MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF

IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix

MOVEti_badi-linea TO l_lineti_badi-programa TO l_program

READ TABLE lt_break INTO wa_break

WITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF

IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix

MOVEti_bte-linea TO l_lineti_bte-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF

ENDFORM cargar_break

amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

DATAl_tabix TYPE sy-tabix

l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

SELECT SINGLE FROM d010incWHERE include = p_programa

IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF

MOVEp_linea TO l_linep_programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM asignar_break

amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit

IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF

PERFORM get_objects Get Objects

ENDFORM buscar_user_exit

amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects

DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area

DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix

SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog

IF sy-subrc = 0

SORT ti_tadir BY obj_name devclass

SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass

IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF

- Get UserExit namesLOOP AT ti_jtab

SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E

APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area

l_fname = ti_final-member

CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include

LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP

CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP

ENDFORM get_objects

amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X

ENDFORM construir_catalogo_uexit

amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------

FORM visualizar_ampliacion

DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF

SELECT SINGLE FROM modsapWHERE member EQ l_member

IF sy-subrc IS INITIAL

Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member

ENDIF

ENDFORM visualizar_ampliacion

amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea

RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs

REFRESH r_event r_procs

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event

SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs

SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE

ENDFORM visualizar_bte

amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE

----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c

DATAl_linea(500) TYPE c

DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

MOVE lt_fields-value TO l_linea

PERFORM visualizar_bte USING p_tipol_linea

ENDFORM cargar_bte

amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface

DATAl_linea(500) TYPE c

DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE

InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF

ENDFORM visualizar_interface

amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones

CHECK p_sust IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922

ENDFORM buscar_sustituciones

amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST

ENDFORM construir_catalogo_sust

amp---------------------------------------------------------------------

amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones

ENDFORM TOP_OF_PAGE_SUST

amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4

CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_sust

amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones

CHECK p_val IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931

ENDFORM buscar_validaciones

amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID

ENDFORM construir_catalogo_val

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones

ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2

CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_val

amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto

DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF

SELECT SINGLE FROM modsapWHERE name EQ l_name

IF sy-subrc IS INITIAL

MOVE l_name TO l_member

SELECT SINGLE FROM modactWHERE member EQ l_member

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF

ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF

ENDFORM visualizar_proyecto

amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel

APPEND ti_enh

ENDIFENDIFENDIF

ENDFORM buscar_punto_ampliacioacuten

amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_enh

amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh

DATA l_obj_name TYPE enhobj-obj_name

DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name

CHECK p_enh IS NOT INITIAL

IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF

REFRESH lt_obj_name

LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP

SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name

ENDFORM buscar_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X

ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME

ENDFORM construir_catalogo_enhobj

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENHOBJ

amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM bi_se19

amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro

CLEAR ti_bdcdatati_bdcdata-program = program

ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata

ENDFORM BDC_DYNPRO

amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval

CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata

ENDFORM BDC_FIELD

amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa

DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)

CHECK ti_gb31t[] IS NOT INITIAL

DO

Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2

IF l_exit EQ XEXITENDIF

CHECK l_exit IS INITIAL

Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND

CHECK l_boolpool IS NOT INITIAL

MOVE l_boolpool TO l_repid

Visualizo el programaPERFORM visualizar_linea USING l_repid01

ENDDO

ENDFORM visualizar_programa

amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope

STATICS l_flag TYPE c

DATA l_tit(65) TYPE c

CHECK l_flag IS INITIAL

l_flag = X

WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline

4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM texto_tope

amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf

DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off

CHECK l_off IS NOT INITIAL

ADD 7 TO l_offl_cf = 500 - l_off

SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_enhspotname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1

invalid_object_type = 2OTHERS = 3

ENDFORM bi_se18

amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit

DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE

DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE

MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE

MOVE lt_fields-value TO l_nameENDIF

Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_

LOOP AT lt_tfdir

CLEARl_group l_include l_namespace l_str_area

l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl

IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl

CHECK sy-subrc IS INITIAL

Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP

CHECK l_flag IS INITIAL

La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value

ENDFORM visualizar_fm_exit

amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter

tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten

ENDFORM def_text_parameter

amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones

Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt

Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt

Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt

icon_create RESULT name text infoicon_create

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 19: buscar_ampliaciones FOROSAP

CHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_UEXITPERFORM sort TABLES ti_sortUSING TI_FINAL

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FINALit_events = ti_eventsit_sort = ti_sorti_text = User-exit TxCMODTABLESt_outtab = ti_finalEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_badi IS NOT INITIALPERFORM construir_catalogo_badiPERFORM definir_layout USING TI_BADICHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BADIPERFORM sort TABLES ti_sortUSING TI_BADI

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_BADIit_events = ti_eventsit_sort = ti_sorti_text = BadisTABLESt_outtab = ti_badiEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_bte IS NOT INITIALPERFORM construir_catalogo_btePERFORM definir_layout USING TI_BTECHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_BTEPERFORM sort TABLES ti_sortUSING TI_BTE

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layout

it_fieldcat = ti_cati_tabname = TI_BTEit_events = ti_eventsit_sort = ti_sorti_text = BTETABLESt_outtab = ti_bteEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_enh IS NOT INITIALPERFORM construir_catalogo_enhPERFORM definir_layout USING TI_ENHCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHPERFORM sort TABLES ti_sortUSING TI_ENH

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHit_events = ti_eventsit_sort = ti_sorti_text = ENHTABLESt_outtab = ti_enhEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

PERFORM construir_catalogo_enhobjPERFORM definir_layout USING TI_ENHOBJCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHOBJPERFORM sort TABLES ti_sortUSING TI_ENHOBJ

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHOBJit_events = ti_eventsit_sort = ti_sorti_text = ENHOBJTABLESt_outtab = ti_enhobjEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_sust IS NOT INITIALPERFORM construir_catalogo_sustPERFORM definir_layout USING TI_SUSTCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_SUSTPERFORM sort TABLES ti_sortUSING TI_SUST

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_SUSTit_events = ti_eventsit_sort = ti_sorti_text = SustitucionesTABLESt_outtab = ti_sustEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_val IS NOT INITIALPERFORM construir_catalogo_valPERFORM definir_layout USING TI_VALCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_VALPERFORM sort TABLES ti_sortUSING TI_VAL

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_VALit_events = ti_eventsit_sort = ti_sorti_text = ValidacionesTABLESt_outtab = ti_valEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_fdex IS NOT INITIALPERFORM construir_catalogo_fdexPERFORM definir_layout USING TI_FDEXCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_FDEX

PERFORM sort TABLES ti_sortUSING TI_FDEX

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FDEXit_events = ti_eventsit_sort = ti_sorti_text = Field-exitTABLESt_outtab = ti_fdexEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

ENDFORM armar_alv

amp---------------------------------------------------------------------amp Form construir_catalogo_EXITamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_exit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_USER_EXITi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03

CF X c_text_04

ENDFORM construir_catalogo_EXIT

amp---------------------------------------------------------------------amp Form asignar_campo_a_catalogoamp--------------------------------------------------------------------- Asignar campo al catalogo ALV----------------------------------------------------------------------FORM asignar_campo_a_catalogo TABLES pt_cat STRUCTURE wa_catUSING p_fieldname LIKE wa_cat-fieldnamep_key LIKE wa_cat-keyp_col_pos TYPE cp_fix_column LIKE wa_cat-fix_columnp_hotspot LIKE wa_cat-hotspotp_do_sum LIKE wa_cat-do_sump_input LIKE wa_cat-inputp_checkbox LIKE wa_cat-checkboxp_no_out LIKE wa_cat-no_outp_icon LIKE wa_cat-iconp_reptext_ddic LIKE wa_cat-reptext_ddic

STATICS l_col_pos LIKE sy-cucol

Asignar atributos de campo en el catalogo de cabecera ALVCLEAR wa_catREAD TABLE pt_cat INTO wa_catWITH KEY fieldname = p_fieldname

CHECK sy-subrc EQ 0

IF NOT p_reptext_ddic IS INITIALwa_cat-seltext_l = wa_cat-seltext_m =wa_cat-seltext_s = wa_cat-reptext_ddic = p_reptext_ddicENDIF

IF p_col_pos EQ X Inicializo el conteo para ordenar las columnasl_col_pos = 1ELSEADD 1 TO l_col_posENDIF

wa_cat-fieldname = p_fieldnamewa_cat-key = p_keywa_cat-col_pos = l_col_poswa_cat-fix_column = p_fix_columnwa_cat-hotspot = p_hotspotwa_cat-do_sum = p_do_sumwa_cat-edit = wa_cat-input = p_inputwa_cat-checkbox = p_checkboxwa_cat-no_out = p_no_outwa_cat-icon = p_icon

MODIFY pt_cat FROM wa_cat INDEX sy-tabix

ENDFORM asignar_campo_a_catalogo

amp---------------------------------------------------------------------amp Form definir_layoutamp--------------------------------------------------------------------- Definir atributos del layout de reporte----------------------------------------------------------------------FORM definir_layout USING p_table TYPE slis_layout_alv-box_tabnameCHANGING p_layout TYPE slis_layout_alv

CLEAR p_layout

IF p_table NE TI_CIMP Marco el campo para la seleccioacutenp_layout-box_fieldname = SELp_layout-box_tabname = p_tableENDIFp_layout-zebra = Xp_layout-colwidth_optimize = Xp_layout-no_vline = p_layout-no_colhead = p_layout-lights_condense = Xp_layout-detail_popup = Xp_layout-detail_initial_lines = Xp_layout-flexible_key = p_layout-key_hotspot = p_layout-confirmation_prompt = X

ENDFORM definir_layout

amp---------------------------------------------------------------------amp Form construir_eventosamp--------------------------------------------------------------------- Asignar eventos soportados----------------------------------------------------------------------FORM construir_eventos USING p_form LIKE wa_events-formDATAl_type(1) TYPE n

REFRESH ti_eventsCLEAR wa_events

ALV Simple Block appendl_type = 2

Buscar secciones para eventosCALL FUNCTION REUSE_ALV_EVENTS_GETEXPORTINGi_list_type = l_typeIMPORTINGet_events = ti_events

Leer evento TOP_OF_PAGEREAD TABLE ti_events WITH KEY name = slis_ev_top_of_pageINTO wa_events Asignar Rutina FORM TOP_OF_PAGE a eventoIF sy-subrc = 0MOVE p_form TO wa_events-formMODIFY ti_events FROM wa_events INDEX sy-tabixENDIF

ENDFORM construir_eventos

amp---------------------------------------------------------------------amp Form top_of_pageamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_user_exitWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUser-exit

ENDFORM top_of_page

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_UEXITamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_uexit

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_finalWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUSER-EXITs TxSMOD

ENDFORM TOP_OF_PAGE_UEXIT

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_FDEXamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_fdex

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_fdexWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incFIELD-EXITs

ENDFORM TOP_OF_PAGE_FDEX

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BADIamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_badi

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_badiWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBADIs

ENDFORM TOP_OF_PAGE_BADI

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BTEamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_bte

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_bteWRITE sy-tfill TO l_tfill_cant

CONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBTEs

ENDFORM TOP_OF_PAGE_BTE

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enh

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_enhWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENH

amp---------------------------------------------------------------------amp Form sortamp--------------------------------------------------------------------- Creo el sort del ALV (FM)---------------------------------------------------------------------- --gtPT_sort Tabla --gtP_tabname Nombre de la tabla----------------------------------------------------------------------FORM sort TABLES pt_sortUSING p_tabname TYPE any

CLEAR pt_sort wa_sortREFRESH pt_sort

CASE p_tabnameWHEN TI_SUST

wa_sort-fieldname = SUBSTIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = SUBSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = CONSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN TI_VAL

wa_sort-fieldname = VALIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = VALSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN TI_ENHOBJ

wa_sort-fieldname = ENHNAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = VERSIONwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN OTHERS

IF p_tabname NE TI_FINAL

wa_sort-fieldname = TIPOwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

IF p_tabname NE TI_FDEX

wa_sort-fieldname = NIVELwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = PROGRAMAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = LINEAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

ENDIF

ELSE

wa_sort-fieldname = NAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = MEMBERwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sortENDIFENDCASE

ENDFORM sort

amp---------------------------------------------------------------------amp Form mostrar_listadoamp--------------------------------------------------------------------- Mostrar listado ALV----------------------------------------------------------------------FORM mostrar_listado

wa_print-reserve_lines = 2

CALL FUNCTION REUSE_ALV_BLOCK_LIST_DISPLAY

EXPORTINGis_print = wa_printEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM mostrar_listado

amp---------------------------------------------------------------------amp Form user_commandamp--------------------------------------------------------------------- Evaluar acciones del usuario----------------------------------------------------------------------FORM user_command USING ucomm LIKE sy-ucommsfields TYPE slis_selfield

DATA l_break TYPE c

Rescatar el registro seleccionadoCASE sfields-tabnameWHEN TI_USER_EXITREAD TABLE ti_user_exit INDEX sfields-tabindexWHEN TI_BADIREAD TABLE ti_badi INDEX sfields-tabindexWHEN TI_BTEREAD TABLE ti_bte INDEX sfields-tabindexWHEN TI_ENHREAD TABLE ti_enh INDEX sfields-tabindexWHEN TI_ENHOBJREAD TABLE ti_enhobj INDEX sfields-tabindexWHEN TI_FDEXREAD TABLE ti_fdex INDEX sfields-tabindexWHEN TI_FINALREAD TABLE ti_final INDEX sfields-tabindexWHEN TI_SUSTREAD TABLE ti_sust INDEX sfields-tabindexWHEN TI_VALREAD TABLE ti_val INDEX sfields-tabindexWHEN TI_CIMPREAD TABLE ti_cimp INDEX sfields-tabindexENDCASE

Seleccion de opcionCASE ucomm DOUBLE CLICKWHEN ampIC1 Evaluar valor de campo seleccionadoCHECK NOT sfields-value IS INITIAL

CASE sfields-tabnameWHEN TI_USER_EXIT USER-EXITIF ti_user_exit-tipo EQ sfields-value(4)SEARCH ti_user_exit-cf FOR c_enhanceCHECK sy-subrc EQ 0PERFORM visualizar_exit USING ti_user_exit-programati_user_exit-cf

ELSEIF ti_user_exit-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_user_exit-programati_user_exit-lineaMOVE X TO l_breakELSEIF ti_user_exit-break EQ sfields-value(4)OR ti_user_exit-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_user_exit-programati_user_exit-lineati_user_exit-breakMOVE X TO l_breakENDIF

WHEN TI_FINAL USER-EXIT Tx CMODIF ti_final-name EQ sfields-valueCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = ti_final-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSEIF ti_final-include EQ sfields-valuePERFORM visualizar_linea USING ti_final-programa1MOVE X TO l_breakENDIF

WHEN TI_BADI BadiIF ti_badi-tipo EQ sfields-value(4)PERFORM visualizar_badi USING ti_badi-cfELSEIF ti_badi-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_badi-programati_badi-lineaMOVE X TO l_breakELSEIF ti_badi-break EQ sfields-value(4)OR ti_badi-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_badi-programati_badi-lineati_badi-breakMOVE X TO l_breakENDIF

WHEN TI_BTE BTEIF ti_bte-tipo EQ sfields-value(4)PERFORM fibf USING ti_bte-cfELSEIF ti_bte-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_bte-programati_bte-lineaMOVE X TO l_breakELSEIF ti_bte-break EQ sfields-value(4)OR ti_bte-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_bte-programati_bte-linea

ti_bte-breakMOVE X TO l_breakENDIF

WHEN TI_ENH Punto de ampliacioacutenIF ti_enh-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_enh-programati_enh-lineaMOVE X TO l_breakELSEIF ti_enh-tipo EQ sfields-value(4)PERFORM bi_se18 USING ti_enh-cfENDIF

WHEN TI_ENHOBJ Punto de ampliacioacutenIF ti_enhobj-enhname EQ sfields-value(30)PERFORM bi_se19 USING ti_enhobj-enhnameENDIF

WHEN TI_SUST SustitucionesIF ti_sust-substid EQ sfields-value(7) ORti_sust-subseqnr EQ sfields-value(3)PERFORM visualizar_sust USING ti_sust-substidti_sust-subseqnrENDIF

WHEN TI_VAL ValidacionesIF ti_val-valid EQ sfields-value(7) ORti_val-valseqnr EQ sfields-value(3)PERFORM visualizar_val USING ti_val-validti_val-valseqnrENDIF

WHEN TI_FDEX Field-exitIF ti_fdex-tipo EQ sfields-valueSUBMIT rsmodprf AND RETURNELSEIF ti_fdex-cf(60) EQ sfields-value Visualizo el field-exitCALL FUNCTION RS_FUNCTION_SHOWEXPORTINGfuncname = ti_fdex-cf

CALL FUNCTION RS_NAVIGATION_MONITORENDIF

WHEN TI_CIMP Customer implementation

CASE sfields-fieldnameWHEN ENHNAMEPERFORM bi_se19 USING ti_cimp-enhnameWHEN ENHINCLUDEPERFORM visualizar_enh_cf USING ti_cimp-enhinclude

WHEN OTHERS DO NOTHING ENDCASE

WHEN OTHERS DO NOTHING ENDCASE

WHEN OTHERS DO NOTHING ENDCASE

IF l_break IS NOT INITIAL AND sfields-tabname NE TI_CIMPWAIT UP TO 1 SECONDSPERFORM cargar_breakENDIFsfields-refresh = X

ENDFORM user_command

amp---------------------------------------------------------------------amp Form visualizar_lineaamp--------------------------------------------------------------------- Visualizo la linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_linea USING p_programa TYPE sy-repidp_linea

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_programaobject_type = c_typeposition = p_lineaEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM visualizar_linea

amp---------------------------------------------------------------------amp Form buscar_exitamp--------------------------------------------------------------------- Buscar USER-EXIT----------------------------------------------------------------------FORM buscar_exit

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN USER-EXITSEARCH ti_programa-cf FOR c_user_exit- SE ENCONTRO UN USER-EXIT Y SE VERIFICA SI LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS PERFORMSEARCH ti_programa-cf FOR c_performCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LAS ASIGNACIONESSEARCH ti_programa-cf FOR c_igualCHECK sy-subrc NE 0

CLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INIacuteCIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF

ENDFORM buscar_exit

amp---------------------------------------------------------------------amp Form buscar_badiamp--------------------------------------------------------------------- Buscar BADI----------------------------------------------------------------------FORM buscar_badi

DATAl_subrc LIKE sy-subrc

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BADISEARCH ti_programa-cf FOR c_badi- SE ENCONTRO UNA BADI Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

SEARCH ti_programa-cf FOR c_includeIF sy-subrc NE 0CLEAR l_subrcSEARCH ti_programa-cf FOR c_methodIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_funcao_2IF sy-subrc NE 0SEARCH ti_programa-cf FOR c_performIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_type_refIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_formMOVE 4 TO l_subrcENDIFENDIFENDIFENDIF

IF l_subrc EQ 0CLEAR ti_badi

- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIFELSECHECK p_handl IS NOT INITIAL- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA INSTANCIA DE- UNA BADISEARCH ti_programa-cf FOR c_handler- SE ENCONTRO UNA INSTANCIA DE IMPLEMENACIOacuteN Y SE VERIFICA SI LA LINEA- NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

SEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0CLEAR ti_badi- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIF

ENDFORM buscar_badi

amp---------------------------------------------------------------------amp Form buscar_bteamp--------------------------------------------------------------------- Buscar BTE----------------------------------------------------------------------FORM buscar_bte

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OPEN_FI_PERFORM

- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endform

CHECK sy-subrc NE 0

CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte1- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OUTBOUND_CALL

- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0

CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF

ENDFORM buscar_bte

amp---------------------------------------------------------------------amp Form repid_f4amp--------------------------------------------------------------------- Ejecuto el F4 para buscar programas----------------------------------------------------------------------FORM repid_f4

CALL FUNCTION REPOSITORY_INFO_SYSTEM_F4EXPORTINGobject_type = PROGobject_name = p_progsuppress_selection = XIMPORTINGobject_name_selected = p_progEXCEPTIONS

cancel = 1wrong_type = 2OTHERS = 3

ENDFORM repid_f4

amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf

DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

SEARCH p_cf FOR 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 INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

READ TABLE lt_cf INDEX 4

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

CHECK sy-subrc IS INITIAL

Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten

textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer

CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4

IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF

WHEN OTHERS Do Nothing ENDCASE

ENDFORM visualizar_badi

amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf

DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

CLEAR d010inc modsap modact

Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid

IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF

SEARCH p_cf FOR c_enhance

CHECK sy-subrc IS INITIAL

REFRESH lt_cf

l_cf = 500 - sy-fdpos

MOVE p_cf+sy-fdpos(l_cf) TO l_linea

SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3

TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS

Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _

Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit

CHECK sy-subrc IS INITIAL

Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM

modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3

ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname

CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ENDIF

ENDFORM visualizar_exit

amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit

DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo

DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe

DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE

CHECK p_fdex IS NOT INITIAL

CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe

MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex

IF p_prog IS NOT INITIAL

MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF

Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog

LOOP AT lt_d020s

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

REFRESH lt_d021s

Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4

Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X

SEARCH lt_d021s-fnam FOR -

IF sy-subrc IS INITIAL

MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum

Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname

APPEND lt_campo

ENDIF

ENDLOOPENDLOOP

CHECK lt_campo[] IS NOT INITIAL

SORT lt_campo BY repid dnum tabname fieldname

DELETE ADJACENT DUPLICATES FROM lt_campo

Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname

SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l

LOOP AT lt_dd03l

CLEAR tddir tddirs

SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname

CHECK sy-subrc IS INITIAL

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog

CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF

Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf

IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF

READ TABLE lt_fe WITH KEY cf = lt_fe-cf

CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP

LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex

ENDLOOP

ENDFORM buscar_field_exit

amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf

DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c

SEARCH p_cf FOR c_bte

IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ELSE

SEARCH p_cf FOR c_bte1

CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ENDIF

IF l_tipo IS NOT INITIAL

PERFORM visualizar_bte USING l_tipol_linea

ELSECALL TRANSACTION FIBFENDIF

ENDFORM fibf

amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT

EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM breakpoint

amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_badi

amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE

i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_bte

amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X TIPO X X c_text_05CF X c_text_04

ENDFORM construir_catalogo_FDEX

amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc

DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

CHECK lt_break[] IS NOT INITIAL

IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix

MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF

IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix

MOVEti_badi-linea TO l_lineti_badi-programa TO l_program

READ TABLE lt_break INTO wa_break

WITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF

IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix

MOVEti_bte-linea TO l_lineti_bte-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF

ENDFORM cargar_break

amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

DATAl_tabix TYPE sy-tabix

l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

SELECT SINGLE FROM d010incWHERE include = p_programa

IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF

MOVEp_linea TO l_linep_programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM asignar_break

amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit

IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF

PERFORM get_objects Get Objects

ENDFORM buscar_user_exit

amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects

DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area

DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix

SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog

IF sy-subrc = 0

SORT ti_tadir BY obj_name devclass

SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass

IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF

- Get UserExit namesLOOP AT ti_jtab

SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E

APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area

l_fname = ti_final-member

CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include

LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP

CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP

ENDFORM get_objects

amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X

ENDFORM construir_catalogo_uexit

amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------

FORM visualizar_ampliacion

DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF

SELECT SINGLE FROM modsapWHERE member EQ l_member

IF sy-subrc IS INITIAL

Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member

ENDIF

ENDFORM visualizar_ampliacion

amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea

RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs

REFRESH r_event r_procs

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event

SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs

SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE

ENDFORM visualizar_bte

amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE

----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c

DATAl_linea(500) TYPE c

DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

MOVE lt_fields-value TO l_linea

PERFORM visualizar_bte USING p_tipol_linea

ENDFORM cargar_bte

amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface

DATAl_linea(500) TYPE c

DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE

InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF

ENDFORM visualizar_interface

amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones

CHECK p_sust IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922

ENDFORM buscar_sustituciones

amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST

ENDFORM construir_catalogo_sust

amp---------------------------------------------------------------------

amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones

ENDFORM TOP_OF_PAGE_SUST

amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4

CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_sust

amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones

CHECK p_val IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931

ENDFORM buscar_validaciones

amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID

ENDFORM construir_catalogo_val

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones

ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2

CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_val

amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto

DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF

SELECT SINGLE FROM modsapWHERE name EQ l_name

IF sy-subrc IS INITIAL

MOVE l_name TO l_member

SELECT SINGLE FROM modactWHERE member EQ l_member

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF

ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF

ENDFORM visualizar_proyecto

amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel

APPEND ti_enh

ENDIFENDIFENDIF

ENDFORM buscar_punto_ampliacioacuten

amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_enh

amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh

DATA l_obj_name TYPE enhobj-obj_name

DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name

CHECK p_enh IS NOT INITIAL

IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF

REFRESH lt_obj_name

LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP

SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name

ENDFORM buscar_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X

ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME

ENDFORM construir_catalogo_enhobj

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENHOBJ

amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM bi_se19

amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro

CLEAR ti_bdcdatati_bdcdata-program = program

ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata

ENDFORM BDC_DYNPRO

amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval

CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata

ENDFORM BDC_FIELD

amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa

DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)

CHECK ti_gb31t[] IS NOT INITIAL

DO

Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2

IF l_exit EQ XEXITENDIF

CHECK l_exit IS INITIAL

Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND

CHECK l_boolpool IS NOT INITIAL

MOVE l_boolpool TO l_repid

Visualizo el programaPERFORM visualizar_linea USING l_repid01

ENDDO

ENDFORM visualizar_programa

amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope

STATICS l_flag TYPE c

DATA l_tit(65) TYPE c

CHECK l_flag IS INITIAL

l_flag = X

WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline

4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM texto_tope

amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf

DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off

CHECK l_off IS NOT INITIAL

ADD 7 TO l_offl_cf = 500 - l_off

SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_enhspotname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1

invalid_object_type = 2OTHERS = 3

ENDFORM bi_se18

amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit

DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE

DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE

MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE

MOVE lt_fields-value TO l_nameENDIF

Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_

LOOP AT lt_tfdir

CLEARl_group l_include l_namespace l_str_area

l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl

IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl

CHECK sy-subrc IS INITIAL

Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP

CHECK l_flag IS INITIAL

La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value

ENDFORM visualizar_fm_exit

amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter

tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten

ENDFORM def_text_parameter

amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones

Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt

Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt

Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt

icon_create RESULT name text infoicon_create

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 20: buscar_ampliaciones FOROSAP

it_fieldcat = ti_cati_tabname = TI_BTEit_events = ti_eventsit_sort = ti_sorti_text = BTETABLESt_outtab = ti_bteEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_enh IS NOT INITIALPERFORM construir_catalogo_enhPERFORM definir_layout USING TI_ENHCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHPERFORM sort TABLES ti_sortUSING TI_ENH

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHit_events = ti_eventsit_sort = ti_sorti_text = ENHTABLESt_outtab = ti_enhEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

PERFORM construir_catalogo_enhobjPERFORM definir_layout USING TI_ENHOBJCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_ENHOBJPERFORM sort TABLES ti_sortUSING TI_ENHOBJ

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_ENHOBJit_events = ti_eventsit_sort = ti_sorti_text = ENHOBJTABLESt_outtab = ti_enhobjEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_sust IS NOT INITIALPERFORM construir_catalogo_sustPERFORM definir_layout USING TI_SUSTCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_SUSTPERFORM sort TABLES ti_sortUSING TI_SUST

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_SUSTit_events = ti_eventsit_sort = ti_sorti_text = SustitucionesTABLESt_outtab = ti_sustEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_val IS NOT INITIALPERFORM construir_catalogo_valPERFORM definir_layout USING TI_VALCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_VALPERFORM sort TABLES ti_sortUSING TI_VAL

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_VALit_events = ti_eventsit_sort = ti_sorti_text = ValidacionesTABLESt_outtab = ti_valEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_fdex IS NOT INITIALPERFORM construir_catalogo_fdexPERFORM definir_layout USING TI_FDEXCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_FDEX

PERFORM sort TABLES ti_sortUSING TI_FDEX

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FDEXit_events = ti_eventsit_sort = ti_sorti_text = Field-exitTABLESt_outtab = ti_fdexEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

ENDFORM armar_alv

amp---------------------------------------------------------------------amp Form construir_catalogo_EXITamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_exit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_USER_EXITi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03

CF X c_text_04

ENDFORM construir_catalogo_EXIT

amp---------------------------------------------------------------------amp Form asignar_campo_a_catalogoamp--------------------------------------------------------------------- Asignar campo al catalogo ALV----------------------------------------------------------------------FORM asignar_campo_a_catalogo TABLES pt_cat STRUCTURE wa_catUSING p_fieldname LIKE wa_cat-fieldnamep_key LIKE wa_cat-keyp_col_pos TYPE cp_fix_column LIKE wa_cat-fix_columnp_hotspot LIKE wa_cat-hotspotp_do_sum LIKE wa_cat-do_sump_input LIKE wa_cat-inputp_checkbox LIKE wa_cat-checkboxp_no_out LIKE wa_cat-no_outp_icon LIKE wa_cat-iconp_reptext_ddic LIKE wa_cat-reptext_ddic

STATICS l_col_pos LIKE sy-cucol

Asignar atributos de campo en el catalogo de cabecera ALVCLEAR wa_catREAD TABLE pt_cat INTO wa_catWITH KEY fieldname = p_fieldname

CHECK sy-subrc EQ 0

IF NOT p_reptext_ddic IS INITIALwa_cat-seltext_l = wa_cat-seltext_m =wa_cat-seltext_s = wa_cat-reptext_ddic = p_reptext_ddicENDIF

IF p_col_pos EQ X Inicializo el conteo para ordenar las columnasl_col_pos = 1ELSEADD 1 TO l_col_posENDIF

wa_cat-fieldname = p_fieldnamewa_cat-key = p_keywa_cat-col_pos = l_col_poswa_cat-fix_column = p_fix_columnwa_cat-hotspot = p_hotspotwa_cat-do_sum = p_do_sumwa_cat-edit = wa_cat-input = p_inputwa_cat-checkbox = p_checkboxwa_cat-no_out = p_no_outwa_cat-icon = p_icon

MODIFY pt_cat FROM wa_cat INDEX sy-tabix

ENDFORM asignar_campo_a_catalogo

amp---------------------------------------------------------------------amp Form definir_layoutamp--------------------------------------------------------------------- Definir atributos del layout de reporte----------------------------------------------------------------------FORM definir_layout USING p_table TYPE slis_layout_alv-box_tabnameCHANGING p_layout TYPE slis_layout_alv

CLEAR p_layout

IF p_table NE TI_CIMP Marco el campo para la seleccioacutenp_layout-box_fieldname = SELp_layout-box_tabname = p_tableENDIFp_layout-zebra = Xp_layout-colwidth_optimize = Xp_layout-no_vline = p_layout-no_colhead = p_layout-lights_condense = Xp_layout-detail_popup = Xp_layout-detail_initial_lines = Xp_layout-flexible_key = p_layout-key_hotspot = p_layout-confirmation_prompt = X

ENDFORM definir_layout

amp---------------------------------------------------------------------amp Form construir_eventosamp--------------------------------------------------------------------- Asignar eventos soportados----------------------------------------------------------------------FORM construir_eventos USING p_form LIKE wa_events-formDATAl_type(1) TYPE n

REFRESH ti_eventsCLEAR wa_events

ALV Simple Block appendl_type = 2

Buscar secciones para eventosCALL FUNCTION REUSE_ALV_EVENTS_GETEXPORTINGi_list_type = l_typeIMPORTINGet_events = ti_events

Leer evento TOP_OF_PAGEREAD TABLE ti_events WITH KEY name = slis_ev_top_of_pageINTO wa_events Asignar Rutina FORM TOP_OF_PAGE a eventoIF sy-subrc = 0MOVE p_form TO wa_events-formMODIFY ti_events FROM wa_events INDEX sy-tabixENDIF

ENDFORM construir_eventos

amp---------------------------------------------------------------------amp Form top_of_pageamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_user_exitWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUser-exit

ENDFORM top_of_page

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_UEXITamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_uexit

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_finalWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUSER-EXITs TxSMOD

ENDFORM TOP_OF_PAGE_UEXIT

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_FDEXamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_fdex

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_fdexWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incFIELD-EXITs

ENDFORM TOP_OF_PAGE_FDEX

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BADIamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_badi

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_badiWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBADIs

ENDFORM TOP_OF_PAGE_BADI

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BTEamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_bte

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_bteWRITE sy-tfill TO l_tfill_cant

CONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBTEs

ENDFORM TOP_OF_PAGE_BTE

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enh

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_enhWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENH

amp---------------------------------------------------------------------amp Form sortamp--------------------------------------------------------------------- Creo el sort del ALV (FM)---------------------------------------------------------------------- --gtPT_sort Tabla --gtP_tabname Nombre de la tabla----------------------------------------------------------------------FORM sort TABLES pt_sortUSING p_tabname TYPE any

CLEAR pt_sort wa_sortREFRESH pt_sort

CASE p_tabnameWHEN TI_SUST

wa_sort-fieldname = SUBSTIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = SUBSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = CONSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN TI_VAL

wa_sort-fieldname = VALIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = VALSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN TI_ENHOBJ

wa_sort-fieldname = ENHNAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = VERSIONwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN OTHERS

IF p_tabname NE TI_FINAL

wa_sort-fieldname = TIPOwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

IF p_tabname NE TI_FDEX

wa_sort-fieldname = NIVELwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = PROGRAMAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = LINEAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

ENDIF

ELSE

wa_sort-fieldname = NAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = MEMBERwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sortENDIFENDCASE

ENDFORM sort

amp---------------------------------------------------------------------amp Form mostrar_listadoamp--------------------------------------------------------------------- Mostrar listado ALV----------------------------------------------------------------------FORM mostrar_listado

wa_print-reserve_lines = 2

CALL FUNCTION REUSE_ALV_BLOCK_LIST_DISPLAY

EXPORTINGis_print = wa_printEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM mostrar_listado

amp---------------------------------------------------------------------amp Form user_commandamp--------------------------------------------------------------------- Evaluar acciones del usuario----------------------------------------------------------------------FORM user_command USING ucomm LIKE sy-ucommsfields TYPE slis_selfield

DATA l_break TYPE c

Rescatar el registro seleccionadoCASE sfields-tabnameWHEN TI_USER_EXITREAD TABLE ti_user_exit INDEX sfields-tabindexWHEN TI_BADIREAD TABLE ti_badi INDEX sfields-tabindexWHEN TI_BTEREAD TABLE ti_bte INDEX sfields-tabindexWHEN TI_ENHREAD TABLE ti_enh INDEX sfields-tabindexWHEN TI_ENHOBJREAD TABLE ti_enhobj INDEX sfields-tabindexWHEN TI_FDEXREAD TABLE ti_fdex INDEX sfields-tabindexWHEN TI_FINALREAD TABLE ti_final INDEX sfields-tabindexWHEN TI_SUSTREAD TABLE ti_sust INDEX sfields-tabindexWHEN TI_VALREAD TABLE ti_val INDEX sfields-tabindexWHEN TI_CIMPREAD TABLE ti_cimp INDEX sfields-tabindexENDCASE

Seleccion de opcionCASE ucomm DOUBLE CLICKWHEN ampIC1 Evaluar valor de campo seleccionadoCHECK NOT sfields-value IS INITIAL

CASE sfields-tabnameWHEN TI_USER_EXIT USER-EXITIF ti_user_exit-tipo EQ sfields-value(4)SEARCH ti_user_exit-cf FOR c_enhanceCHECK sy-subrc EQ 0PERFORM visualizar_exit USING ti_user_exit-programati_user_exit-cf

ELSEIF ti_user_exit-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_user_exit-programati_user_exit-lineaMOVE X TO l_breakELSEIF ti_user_exit-break EQ sfields-value(4)OR ti_user_exit-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_user_exit-programati_user_exit-lineati_user_exit-breakMOVE X TO l_breakENDIF

WHEN TI_FINAL USER-EXIT Tx CMODIF ti_final-name EQ sfields-valueCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = ti_final-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSEIF ti_final-include EQ sfields-valuePERFORM visualizar_linea USING ti_final-programa1MOVE X TO l_breakENDIF

WHEN TI_BADI BadiIF ti_badi-tipo EQ sfields-value(4)PERFORM visualizar_badi USING ti_badi-cfELSEIF ti_badi-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_badi-programati_badi-lineaMOVE X TO l_breakELSEIF ti_badi-break EQ sfields-value(4)OR ti_badi-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_badi-programati_badi-lineati_badi-breakMOVE X TO l_breakENDIF

WHEN TI_BTE BTEIF ti_bte-tipo EQ sfields-value(4)PERFORM fibf USING ti_bte-cfELSEIF ti_bte-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_bte-programati_bte-lineaMOVE X TO l_breakELSEIF ti_bte-break EQ sfields-value(4)OR ti_bte-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_bte-programati_bte-linea

ti_bte-breakMOVE X TO l_breakENDIF

WHEN TI_ENH Punto de ampliacioacutenIF ti_enh-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_enh-programati_enh-lineaMOVE X TO l_breakELSEIF ti_enh-tipo EQ sfields-value(4)PERFORM bi_se18 USING ti_enh-cfENDIF

WHEN TI_ENHOBJ Punto de ampliacioacutenIF ti_enhobj-enhname EQ sfields-value(30)PERFORM bi_se19 USING ti_enhobj-enhnameENDIF

WHEN TI_SUST SustitucionesIF ti_sust-substid EQ sfields-value(7) ORti_sust-subseqnr EQ sfields-value(3)PERFORM visualizar_sust USING ti_sust-substidti_sust-subseqnrENDIF

WHEN TI_VAL ValidacionesIF ti_val-valid EQ sfields-value(7) ORti_val-valseqnr EQ sfields-value(3)PERFORM visualizar_val USING ti_val-validti_val-valseqnrENDIF

WHEN TI_FDEX Field-exitIF ti_fdex-tipo EQ sfields-valueSUBMIT rsmodprf AND RETURNELSEIF ti_fdex-cf(60) EQ sfields-value Visualizo el field-exitCALL FUNCTION RS_FUNCTION_SHOWEXPORTINGfuncname = ti_fdex-cf

CALL FUNCTION RS_NAVIGATION_MONITORENDIF

WHEN TI_CIMP Customer implementation

CASE sfields-fieldnameWHEN ENHNAMEPERFORM bi_se19 USING ti_cimp-enhnameWHEN ENHINCLUDEPERFORM visualizar_enh_cf USING ti_cimp-enhinclude

WHEN OTHERS DO NOTHING ENDCASE

WHEN OTHERS DO NOTHING ENDCASE

WHEN OTHERS DO NOTHING ENDCASE

IF l_break IS NOT INITIAL AND sfields-tabname NE TI_CIMPWAIT UP TO 1 SECONDSPERFORM cargar_breakENDIFsfields-refresh = X

ENDFORM user_command

amp---------------------------------------------------------------------amp Form visualizar_lineaamp--------------------------------------------------------------------- Visualizo la linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_linea USING p_programa TYPE sy-repidp_linea

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_programaobject_type = c_typeposition = p_lineaEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM visualizar_linea

amp---------------------------------------------------------------------amp Form buscar_exitamp--------------------------------------------------------------------- Buscar USER-EXIT----------------------------------------------------------------------FORM buscar_exit

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN USER-EXITSEARCH ti_programa-cf FOR c_user_exit- SE ENCONTRO UN USER-EXIT Y SE VERIFICA SI LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS PERFORMSEARCH ti_programa-cf FOR c_performCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LAS ASIGNACIONESSEARCH ti_programa-cf FOR c_igualCHECK sy-subrc NE 0

CLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INIacuteCIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF

ENDFORM buscar_exit

amp---------------------------------------------------------------------amp Form buscar_badiamp--------------------------------------------------------------------- Buscar BADI----------------------------------------------------------------------FORM buscar_badi

DATAl_subrc LIKE sy-subrc

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BADISEARCH ti_programa-cf FOR c_badi- SE ENCONTRO UNA BADI Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

SEARCH ti_programa-cf FOR c_includeIF sy-subrc NE 0CLEAR l_subrcSEARCH ti_programa-cf FOR c_methodIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_funcao_2IF sy-subrc NE 0SEARCH ti_programa-cf FOR c_performIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_type_refIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_formMOVE 4 TO l_subrcENDIFENDIFENDIFENDIF

IF l_subrc EQ 0CLEAR ti_badi

- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIFELSECHECK p_handl IS NOT INITIAL- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA INSTANCIA DE- UNA BADISEARCH ti_programa-cf FOR c_handler- SE ENCONTRO UNA INSTANCIA DE IMPLEMENACIOacuteN Y SE VERIFICA SI LA LINEA- NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

SEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0CLEAR ti_badi- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIF

ENDFORM buscar_badi

amp---------------------------------------------------------------------amp Form buscar_bteamp--------------------------------------------------------------------- Buscar BTE----------------------------------------------------------------------FORM buscar_bte

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OPEN_FI_PERFORM

- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endform

CHECK sy-subrc NE 0

CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte1- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OUTBOUND_CALL

- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0

CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF

ENDFORM buscar_bte

amp---------------------------------------------------------------------amp Form repid_f4amp--------------------------------------------------------------------- Ejecuto el F4 para buscar programas----------------------------------------------------------------------FORM repid_f4

CALL FUNCTION REPOSITORY_INFO_SYSTEM_F4EXPORTINGobject_type = PROGobject_name = p_progsuppress_selection = XIMPORTINGobject_name_selected = p_progEXCEPTIONS

cancel = 1wrong_type = 2OTHERS = 3

ENDFORM repid_f4

amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf

DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

SEARCH p_cf FOR 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 INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

READ TABLE lt_cf INDEX 4

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

CHECK sy-subrc IS INITIAL

Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten

textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer

CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4

IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF

WHEN OTHERS Do Nothing ENDCASE

ENDFORM visualizar_badi

amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf

DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

CLEAR d010inc modsap modact

Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid

IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF

SEARCH p_cf FOR c_enhance

CHECK sy-subrc IS INITIAL

REFRESH lt_cf

l_cf = 500 - sy-fdpos

MOVE p_cf+sy-fdpos(l_cf) TO l_linea

SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3

TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS

Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _

Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit

CHECK sy-subrc IS INITIAL

Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM

modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3

ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname

CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ENDIF

ENDFORM visualizar_exit

amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit

DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo

DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe

DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE

CHECK p_fdex IS NOT INITIAL

CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe

MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex

IF p_prog IS NOT INITIAL

MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF

Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog

LOOP AT lt_d020s

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

REFRESH lt_d021s

Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4

Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X

SEARCH lt_d021s-fnam FOR -

IF sy-subrc IS INITIAL

MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum

Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname

APPEND lt_campo

ENDIF

ENDLOOPENDLOOP

CHECK lt_campo[] IS NOT INITIAL

SORT lt_campo BY repid dnum tabname fieldname

DELETE ADJACENT DUPLICATES FROM lt_campo

Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname

SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l

LOOP AT lt_dd03l

CLEAR tddir tddirs

SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname

CHECK sy-subrc IS INITIAL

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog

CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF

Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf

IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF

READ TABLE lt_fe WITH KEY cf = lt_fe-cf

CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP

LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex

ENDLOOP

ENDFORM buscar_field_exit

amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf

DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c

SEARCH p_cf FOR c_bte

IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ELSE

SEARCH p_cf FOR c_bte1

CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ENDIF

IF l_tipo IS NOT INITIAL

PERFORM visualizar_bte USING l_tipol_linea

ELSECALL TRANSACTION FIBFENDIF

ENDFORM fibf

amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT

EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM breakpoint

amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_badi

amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE

i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_bte

amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X TIPO X X c_text_05CF X c_text_04

ENDFORM construir_catalogo_FDEX

amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc

DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

CHECK lt_break[] IS NOT INITIAL

IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix

MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF

IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix

MOVEti_badi-linea TO l_lineti_badi-programa TO l_program

READ TABLE lt_break INTO wa_break

WITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF

IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix

MOVEti_bte-linea TO l_lineti_bte-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF

ENDFORM cargar_break

amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

DATAl_tabix TYPE sy-tabix

l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

SELECT SINGLE FROM d010incWHERE include = p_programa

IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF

MOVEp_linea TO l_linep_programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM asignar_break

amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit

IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF

PERFORM get_objects Get Objects

ENDFORM buscar_user_exit

amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects

DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area

DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix

SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog

IF sy-subrc = 0

SORT ti_tadir BY obj_name devclass

SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass

IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF

- Get UserExit namesLOOP AT ti_jtab

SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E

APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area

l_fname = ti_final-member

CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include

LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP

CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP

ENDFORM get_objects

amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X

ENDFORM construir_catalogo_uexit

amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------

FORM visualizar_ampliacion

DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF

SELECT SINGLE FROM modsapWHERE member EQ l_member

IF sy-subrc IS INITIAL

Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member

ENDIF

ENDFORM visualizar_ampliacion

amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea

RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs

REFRESH r_event r_procs

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event

SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs

SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE

ENDFORM visualizar_bte

amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE

----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c

DATAl_linea(500) TYPE c

DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

MOVE lt_fields-value TO l_linea

PERFORM visualizar_bte USING p_tipol_linea

ENDFORM cargar_bte

amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface

DATAl_linea(500) TYPE c

DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE

InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF

ENDFORM visualizar_interface

amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones

CHECK p_sust IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922

ENDFORM buscar_sustituciones

amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST

ENDFORM construir_catalogo_sust

amp---------------------------------------------------------------------

amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones

ENDFORM TOP_OF_PAGE_SUST

amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4

CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_sust

amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones

CHECK p_val IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931

ENDFORM buscar_validaciones

amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID

ENDFORM construir_catalogo_val

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones

ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2

CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_val

amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto

DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF

SELECT SINGLE FROM modsapWHERE name EQ l_name

IF sy-subrc IS INITIAL

MOVE l_name TO l_member

SELECT SINGLE FROM modactWHERE member EQ l_member

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF

ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF

ENDFORM visualizar_proyecto

amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel

APPEND ti_enh

ENDIFENDIFENDIF

ENDFORM buscar_punto_ampliacioacuten

amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_enh

amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh

DATA l_obj_name TYPE enhobj-obj_name

DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name

CHECK p_enh IS NOT INITIAL

IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF

REFRESH lt_obj_name

LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP

SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name

ENDFORM buscar_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X

ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME

ENDFORM construir_catalogo_enhobj

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENHOBJ

amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM bi_se19

amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro

CLEAR ti_bdcdatati_bdcdata-program = program

ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata

ENDFORM BDC_DYNPRO

amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval

CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata

ENDFORM BDC_FIELD

amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa

DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)

CHECK ti_gb31t[] IS NOT INITIAL

DO

Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2

IF l_exit EQ XEXITENDIF

CHECK l_exit IS INITIAL

Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND

CHECK l_boolpool IS NOT INITIAL

MOVE l_boolpool TO l_repid

Visualizo el programaPERFORM visualizar_linea USING l_repid01

ENDDO

ENDFORM visualizar_programa

amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope

STATICS l_flag TYPE c

DATA l_tit(65) TYPE c

CHECK l_flag IS INITIAL

l_flag = X

WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline

4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM texto_tope

amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf

DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off

CHECK l_off IS NOT INITIAL

ADD 7 TO l_offl_cf = 500 - l_off

SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_enhspotname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1

invalid_object_type = 2OTHERS = 3

ENDFORM bi_se18

amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit

DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE

DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE

MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE

MOVE lt_fields-value TO l_nameENDIF

Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_

LOOP AT lt_tfdir

CLEARl_group l_include l_namespace l_str_area

l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl

IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl

CHECK sy-subrc IS INITIAL

Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP

CHECK l_flag IS INITIAL

La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value

ENDFORM visualizar_fm_exit

amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter

tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten

ENDFORM def_text_parameter

amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones

Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt

Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt

Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt

icon_create RESULT name text infoicon_create

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 21: buscar_ampliaciones FOROSAP

ENDIF

IF p_sust IS NOT INITIALPERFORM construir_catalogo_sustPERFORM definir_layout USING TI_SUSTCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_SUSTPERFORM sort TABLES ti_sortUSING TI_SUST

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_SUSTit_events = ti_eventsit_sort = ti_sorti_text = SustitucionesTABLESt_outtab = ti_sustEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_val IS NOT INITIALPERFORM construir_catalogo_valPERFORM definir_layout USING TI_VALCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_VALPERFORM sort TABLES ti_sortUSING TI_VAL

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_VALit_events = ti_eventsit_sort = ti_sorti_text = ValidacionesTABLESt_outtab = ti_valEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

IF p_fdex IS NOT INITIALPERFORM construir_catalogo_fdexPERFORM definir_layout USING TI_FDEXCHANGING wa_layoutPERFORM construir_eventos USING TOP_OF_PAGE_FDEX

PERFORM sort TABLES ti_sortUSING TI_FDEX

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FDEXit_events = ti_eventsit_sort = ti_sorti_text = Field-exitTABLESt_outtab = ti_fdexEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

ENDFORM armar_alv

amp---------------------------------------------------------------------amp Form construir_catalogo_EXITamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_exit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_USER_EXITi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03

CF X c_text_04

ENDFORM construir_catalogo_EXIT

amp---------------------------------------------------------------------amp Form asignar_campo_a_catalogoamp--------------------------------------------------------------------- Asignar campo al catalogo ALV----------------------------------------------------------------------FORM asignar_campo_a_catalogo TABLES pt_cat STRUCTURE wa_catUSING p_fieldname LIKE wa_cat-fieldnamep_key LIKE wa_cat-keyp_col_pos TYPE cp_fix_column LIKE wa_cat-fix_columnp_hotspot LIKE wa_cat-hotspotp_do_sum LIKE wa_cat-do_sump_input LIKE wa_cat-inputp_checkbox LIKE wa_cat-checkboxp_no_out LIKE wa_cat-no_outp_icon LIKE wa_cat-iconp_reptext_ddic LIKE wa_cat-reptext_ddic

STATICS l_col_pos LIKE sy-cucol

Asignar atributos de campo en el catalogo de cabecera ALVCLEAR wa_catREAD TABLE pt_cat INTO wa_catWITH KEY fieldname = p_fieldname

CHECK sy-subrc EQ 0

IF NOT p_reptext_ddic IS INITIALwa_cat-seltext_l = wa_cat-seltext_m =wa_cat-seltext_s = wa_cat-reptext_ddic = p_reptext_ddicENDIF

IF p_col_pos EQ X Inicializo el conteo para ordenar las columnasl_col_pos = 1ELSEADD 1 TO l_col_posENDIF

wa_cat-fieldname = p_fieldnamewa_cat-key = p_keywa_cat-col_pos = l_col_poswa_cat-fix_column = p_fix_columnwa_cat-hotspot = p_hotspotwa_cat-do_sum = p_do_sumwa_cat-edit = wa_cat-input = p_inputwa_cat-checkbox = p_checkboxwa_cat-no_out = p_no_outwa_cat-icon = p_icon

MODIFY pt_cat FROM wa_cat INDEX sy-tabix

ENDFORM asignar_campo_a_catalogo

amp---------------------------------------------------------------------amp Form definir_layoutamp--------------------------------------------------------------------- Definir atributos del layout de reporte----------------------------------------------------------------------FORM definir_layout USING p_table TYPE slis_layout_alv-box_tabnameCHANGING p_layout TYPE slis_layout_alv

CLEAR p_layout

IF p_table NE TI_CIMP Marco el campo para la seleccioacutenp_layout-box_fieldname = SELp_layout-box_tabname = p_tableENDIFp_layout-zebra = Xp_layout-colwidth_optimize = Xp_layout-no_vline = p_layout-no_colhead = p_layout-lights_condense = Xp_layout-detail_popup = Xp_layout-detail_initial_lines = Xp_layout-flexible_key = p_layout-key_hotspot = p_layout-confirmation_prompt = X

ENDFORM definir_layout

amp---------------------------------------------------------------------amp Form construir_eventosamp--------------------------------------------------------------------- Asignar eventos soportados----------------------------------------------------------------------FORM construir_eventos USING p_form LIKE wa_events-formDATAl_type(1) TYPE n

REFRESH ti_eventsCLEAR wa_events

ALV Simple Block appendl_type = 2

Buscar secciones para eventosCALL FUNCTION REUSE_ALV_EVENTS_GETEXPORTINGi_list_type = l_typeIMPORTINGet_events = ti_events

Leer evento TOP_OF_PAGEREAD TABLE ti_events WITH KEY name = slis_ev_top_of_pageINTO wa_events Asignar Rutina FORM TOP_OF_PAGE a eventoIF sy-subrc = 0MOVE p_form TO wa_events-formMODIFY ti_events FROM wa_events INDEX sy-tabixENDIF

ENDFORM construir_eventos

amp---------------------------------------------------------------------amp Form top_of_pageamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_user_exitWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUser-exit

ENDFORM top_of_page

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_UEXITamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_uexit

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_finalWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUSER-EXITs TxSMOD

ENDFORM TOP_OF_PAGE_UEXIT

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_FDEXamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_fdex

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_fdexWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incFIELD-EXITs

ENDFORM TOP_OF_PAGE_FDEX

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BADIamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_badi

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_badiWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBADIs

ENDFORM TOP_OF_PAGE_BADI

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BTEamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_bte

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_bteWRITE sy-tfill TO l_tfill_cant

CONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBTEs

ENDFORM TOP_OF_PAGE_BTE

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enh

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_enhWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENH

amp---------------------------------------------------------------------amp Form sortamp--------------------------------------------------------------------- Creo el sort del ALV (FM)---------------------------------------------------------------------- --gtPT_sort Tabla --gtP_tabname Nombre de la tabla----------------------------------------------------------------------FORM sort TABLES pt_sortUSING p_tabname TYPE any

CLEAR pt_sort wa_sortREFRESH pt_sort

CASE p_tabnameWHEN TI_SUST

wa_sort-fieldname = SUBSTIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = SUBSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = CONSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN TI_VAL

wa_sort-fieldname = VALIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = VALSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN TI_ENHOBJ

wa_sort-fieldname = ENHNAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = VERSIONwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN OTHERS

IF p_tabname NE TI_FINAL

wa_sort-fieldname = TIPOwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

IF p_tabname NE TI_FDEX

wa_sort-fieldname = NIVELwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = PROGRAMAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = LINEAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

ENDIF

ELSE

wa_sort-fieldname = NAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = MEMBERwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sortENDIFENDCASE

ENDFORM sort

amp---------------------------------------------------------------------amp Form mostrar_listadoamp--------------------------------------------------------------------- Mostrar listado ALV----------------------------------------------------------------------FORM mostrar_listado

wa_print-reserve_lines = 2

CALL FUNCTION REUSE_ALV_BLOCK_LIST_DISPLAY

EXPORTINGis_print = wa_printEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM mostrar_listado

amp---------------------------------------------------------------------amp Form user_commandamp--------------------------------------------------------------------- Evaluar acciones del usuario----------------------------------------------------------------------FORM user_command USING ucomm LIKE sy-ucommsfields TYPE slis_selfield

DATA l_break TYPE c

Rescatar el registro seleccionadoCASE sfields-tabnameWHEN TI_USER_EXITREAD TABLE ti_user_exit INDEX sfields-tabindexWHEN TI_BADIREAD TABLE ti_badi INDEX sfields-tabindexWHEN TI_BTEREAD TABLE ti_bte INDEX sfields-tabindexWHEN TI_ENHREAD TABLE ti_enh INDEX sfields-tabindexWHEN TI_ENHOBJREAD TABLE ti_enhobj INDEX sfields-tabindexWHEN TI_FDEXREAD TABLE ti_fdex INDEX sfields-tabindexWHEN TI_FINALREAD TABLE ti_final INDEX sfields-tabindexWHEN TI_SUSTREAD TABLE ti_sust INDEX sfields-tabindexWHEN TI_VALREAD TABLE ti_val INDEX sfields-tabindexWHEN TI_CIMPREAD TABLE ti_cimp INDEX sfields-tabindexENDCASE

Seleccion de opcionCASE ucomm DOUBLE CLICKWHEN ampIC1 Evaluar valor de campo seleccionadoCHECK NOT sfields-value IS INITIAL

CASE sfields-tabnameWHEN TI_USER_EXIT USER-EXITIF ti_user_exit-tipo EQ sfields-value(4)SEARCH ti_user_exit-cf FOR c_enhanceCHECK sy-subrc EQ 0PERFORM visualizar_exit USING ti_user_exit-programati_user_exit-cf

ELSEIF ti_user_exit-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_user_exit-programati_user_exit-lineaMOVE X TO l_breakELSEIF ti_user_exit-break EQ sfields-value(4)OR ti_user_exit-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_user_exit-programati_user_exit-lineati_user_exit-breakMOVE X TO l_breakENDIF

WHEN TI_FINAL USER-EXIT Tx CMODIF ti_final-name EQ sfields-valueCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = ti_final-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSEIF ti_final-include EQ sfields-valuePERFORM visualizar_linea USING ti_final-programa1MOVE X TO l_breakENDIF

WHEN TI_BADI BadiIF ti_badi-tipo EQ sfields-value(4)PERFORM visualizar_badi USING ti_badi-cfELSEIF ti_badi-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_badi-programati_badi-lineaMOVE X TO l_breakELSEIF ti_badi-break EQ sfields-value(4)OR ti_badi-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_badi-programati_badi-lineati_badi-breakMOVE X TO l_breakENDIF

WHEN TI_BTE BTEIF ti_bte-tipo EQ sfields-value(4)PERFORM fibf USING ti_bte-cfELSEIF ti_bte-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_bte-programati_bte-lineaMOVE X TO l_breakELSEIF ti_bte-break EQ sfields-value(4)OR ti_bte-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_bte-programati_bte-linea

ti_bte-breakMOVE X TO l_breakENDIF

WHEN TI_ENH Punto de ampliacioacutenIF ti_enh-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_enh-programati_enh-lineaMOVE X TO l_breakELSEIF ti_enh-tipo EQ sfields-value(4)PERFORM bi_se18 USING ti_enh-cfENDIF

WHEN TI_ENHOBJ Punto de ampliacioacutenIF ti_enhobj-enhname EQ sfields-value(30)PERFORM bi_se19 USING ti_enhobj-enhnameENDIF

WHEN TI_SUST SustitucionesIF ti_sust-substid EQ sfields-value(7) ORti_sust-subseqnr EQ sfields-value(3)PERFORM visualizar_sust USING ti_sust-substidti_sust-subseqnrENDIF

WHEN TI_VAL ValidacionesIF ti_val-valid EQ sfields-value(7) ORti_val-valseqnr EQ sfields-value(3)PERFORM visualizar_val USING ti_val-validti_val-valseqnrENDIF

WHEN TI_FDEX Field-exitIF ti_fdex-tipo EQ sfields-valueSUBMIT rsmodprf AND RETURNELSEIF ti_fdex-cf(60) EQ sfields-value Visualizo el field-exitCALL FUNCTION RS_FUNCTION_SHOWEXPORTINGfuncname = ti_fdex-cf

CALL FUNCTION RS_NAVIGATION_MONITORENDIF

WHEN TI_CIMP Customer implementation

CASE sfields-fieldnameWHEN ENHNAMEPERFORM bi_se19 USING ti_cimp-enhnameWHEN ENHINCLUDEPERFORM visualizar_enh_cf USING ti_cimp-enhinclude

WHEN OTHERS DO NOTHING ENDCASE

WHEN OTHERS DO NOTHING ENDCASE

WHEN OTHERS DO NOTHING ENDCASE

IF l_break IS NOT INITIAL AND sfields-tabname NE TI_CIMPWAIT UP TO 1 SECONDSPERFORM cargar_breakENDIFsfields-refresh = X

ENDFORM user_command

amp---------------------------------------------------------------------amp Form visualizar_lineaamp--------------------------------------------------------------------- Visualizo la linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_linea USING p_programa TYPE sy-repidp_linea

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_programaobject_type = c_typeposition = p_lineaEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM visualizar_linea

amp---------------------------------------------------------------------amp Form buscar_exitamp--------------------------------------------------------------------- Buscar USER-EXIT----------------------------------------------------------------------FORM buscar_exit

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN USER-EXITSEARCH ti_programa-cf FOR c_user_exit- SE ENCONTRO UN USER-EXIT Y SE VERIFICA SI LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS PERFORMSEARCH ti_programa-cf FOR c_performCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LAS ASIGNACIONESSEARCH ti_programa-cf FOR c_igualCHECK sy-subrc NE 0

CLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INIacuteCIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF

ENDFORM buscar_exit

amp---------------------------------------------------------------------amp Form buscar_badiamp--------------------------------------------------------------------- Buscar BADI----------------------------------------------------------------------FORM buscar_badi

DATAl_subrc LIKE sy-subrc

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BADISEARCH ti_programa-cf FOR c_badi- SE ENCONTRO UNA BADI Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

SEARCH ti_programa-cf FOR c_includeIF sy-subrc NE 0CLEAR l_subrcSEARCH ti_programa-cf FOR c_methodIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_funcao_2IF sy-subrc NE 0SEARCH ti_programa-cf FOR c_performIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_type_refIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_formMOVE 4 TO l_subrcENDIFENDIFENDIFENDIF

IF l_subrc EQ 0CLEAR ti_badi

- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIFELSECHECK p_handl IS NOT INITIAL- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA INSTANCIA DE- UNA BADISEARCH ti_programa-cf FOR c_handler- SE ENCONTRO UNA INSTANCIA DE IMPLEMENACIOacuteN Y SE VERIFICA SI LA LINEA- NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

SEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0CLEAR ti_badi- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIF

ENDFORM buscar_badi

amp---------------------------------------------------------------------amp Form buscar_bteamp--------------------------------------------------------------------- Buscar BTE----------------------------------------------------------------------FORM buscar_bte

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OPEN_FI_PERFORM

- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endform

CHECK sy-subrc NE 0

CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte1- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OUTBOUND_CALL

- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0

CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF

ENDFORM buscar_bte

amp---------------------------------------------------------------------amp Form repid_f4amp--------------------------------------------------------------------- Ejecuto el F4 para buscar programas----------------------------------------------------------------------FORM repid_f4

CALL FUNCTION REPOSITORY_INFO_SYSTEM_F4EXPORTINGobject_type = PROGobject_name = p_progsuppress_selection = XIMPORTINGobject_name_selected = p_progEXCEPTIONS

cancel = 1wrong_type = 2OTHERS = 3

ENDFORM repid_f4

amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf

DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

SEARCH p_cf FOR 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 INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

READ TABLE lt_cf INDEX 4

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

CHECK sy-subrc IS INITIAL

Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten

textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer

CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4

IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF

WHEN OTHERS Do Nothing ENDCASE

ENDFORM visualizar_badi

amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf

DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

CLEAR d010inc modsap modact

Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid

IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF

SEARCH p_cf FOR c_enhance

CHECK sy-subrc IS INITIAL

REFRESH lt_cf

l_cf = 500 - sy-fdpos

MOVE p_cf+sy-fdpos(l_cf) TO l_linea

SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3

TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS

Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _

Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit

CHECK sy-subrc IS INITIAL

Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM

modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3

ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname

CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ENDIF

ENDFORM visualizar_exit

amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit

DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo

DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe

DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE

CHECK p_fdex IS NOT INITIAL

CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe

MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex

IF p_prog IS NOT INITIAL

MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF

Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog

LOOP AT lt_d020s

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

REFRESH lt_d021s

Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4

Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X

SEARCH lt_d021s-fnam FOR -

IF sy-subrc IS INITIAL

MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum

Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname

APPEND lt_campo

ENDIF

ENDLOOPENDLOOP

CHECK lt_campo[] IS NOT INITIAL

SORT lt_campo BY repid dnum tabname fieldname

DELETE ADJACENT DUPLICATES FROM lt_campo

Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname

SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l

LOOP AT lt_dd03l

CLEAR tddir tddirs

SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname

CHECK sy-subrc IS INITIAL

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog

CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF

Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf

IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF

READ TABLE lt_fe WITH KEY cf = lt_fe-cf

CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP

LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex

ENDLOOP

ENDFORM buscar_field_exit

amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf

DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c

SEARCH p_cf FOR c_bte

IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ELSE

SEARCH p_cf FOR c_bte1

CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ENDIF

IF l_tipo IS NOT INITIAL

PERFORM visualizar_bte USING l_tipol_linea

ELSECALL TRANSACTION FIBFENDIF

ENDFORM fibf

amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT

EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM breakpoint

amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_badi

amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE

i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_bte

amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X TIPO X X c_text_05CF X c_text_04

ENDFORM construir_catalogo_FDEX

amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc

DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

CHECK lt_break[] IS NOT INITIAL

IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix

MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF

IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix

MOVEti_badi-linea TO l_lineti_badi-programa TO l_program

READ TABLE lt_break INTO wa_break

WITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF

IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix

MOVEti_bte-linea TO l_lineti_bte-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF

ENDFORM cargar_break

amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

DATAl_tabix TYPE sy-tabix

l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

SELECT SINGLE FROM d010incWHERE include = p_programa

IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF

MOVEp_linea TO l_linep_programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM asignar_break

amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit

IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF

PERFORM get_objects Get Objects

ENDFORM buscar_user_exit

amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects

DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area

DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix

SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog

IF sy-subrc = 0

SORT ti_tadir BY obj_name devclass

SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass

IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF

- Get UserExit namesLOOP AT ti_jtab

SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E

APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area

l_fname = ti_final-member

CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include

LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP

CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP

ENDFORM get_objects

amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X

ENDFORM construir_catalogo_uexit

amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------

FORM visualizar_ampliacion

DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF

SELECT SINGLE FROM modsapWHERE member EQ l_member

IF sy-subrc IS INITIAL

Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member

ENDIF

ENDFORM visualizar_ampliacion

amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea

RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs

REFRESH r_event r_procs

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event

SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs

SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE

ENDFORM visualizar_bte

amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE

----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c

DATAl_linea(500) TYPE c

DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

MOVE lt_fields-value TO l_linea

PERFORM visualizar_bte USING p_tipol_linea

ENDFORM cargar_bte

amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface

DATAl_linea(500) TYPE c

DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE

InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF

ENDFORM visualizar_interface

amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones

CHECK p_sust IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922

ENDFORM buscar_sustituciones

amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST

ENDFORM construir_catalogo_sust

amp---------------------------------------------------------------------

amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones

ENDFORM TOP_OF_PAGE_SUST

amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4

CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_sust

amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones

CHECK p_val IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931

ENDFORM buscar_validaciones

amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID

ENDFORM construir_catalogo_val

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones

ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2

CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_val

amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto

DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF

SELECT SINGLE FROM modsapWHERE name EQ l_name

IF sy-subrc IS INITIAL

MOVE l_name TO l_member

SELECT SINGLE FROM modactWHERE member EQ l_member

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF

ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF

ENDFORM visualizar_proyecto

amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel

APPEND ti_enh

ENDIFENDIFENDIF

ENDFORM buscar_punto_ampliacioacuten

amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_enh

amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh

DATA l_obj_name TYPE enhobj-obj_name

DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name

CHECK p_enh IS NOT INITIAL

IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF

REFRESH lt_obj_name

LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP

SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name

ENDFORM buscar_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X

ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME

ENDFORM construir_catalogo_enhobj

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENHOBJ

amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM bi_se19

amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro

CLEAR ti_bdcdatati_bdcdata-program = program

ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata

ENDFORM BDC_DYNPRO

amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval

CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata

ENDFORM BDC_FIELD

amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa

DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)

CHECK ti_gb31t[] IS NOT INITIAL

DO

Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2

IF l_exit EQ XEXITENDIF

CHECK l_exit IS INITIAL

Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND

CHECK l_boolpool IS NOT INITIAL

MOVE l_boolpool TO l_repid

Visualizo el programaPERFORM visualizar_linea USING l_repid01

ENDDO

ENDFORM visualizar_programa

amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope

STATICS l_flag TYPE c

DATA l_tit(65) TYPE c

CHECK l_flag IS INITIAL

l_flag = X

WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline

4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM texto_tope

amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf

DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off

CHECK l_off IS NOT INITIAL

ADD 7 TO l_offl_cf = 500 - l_off

SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_enhspotname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1

invalid_object_type = 2OTHERS = 3

ENDFORM bi_se18

amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit

DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE

DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE

MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE

MOVE lt_fields-value TO l_nameENDIF

Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_

LOOP AT lt_tfdir

CLEARl_group l_include l_namespace l_str_area

l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl

IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl

CHECK sy-subrc IS INITIAL

Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP

CHECK l_flag IS INITIAL

La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value

ENDFORM visualizar_fm_exit

amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter

tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten

ENDFORM def_text_parameter

amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones

Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt

Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt

Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt

icon_create RESULT name text infoicon_create

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 22: buscar_ampliaciones FOROSAP

PERFORM sort TABLES ti_sortUSING TI_FDEX

CALL FUNCTION REUSE_ALV_BLOCK_LIST_APPENDEXPORTINGis_layout = wa_layoutit_fieldcat = ti_cati_tabname = TI_FDEXit_events = ti_eventsit_sort = ti_sorti_text = Field-exitTABLESt_outtab = ti_fdexEXCEPTIONSprogram_error = 1maximum_of_appends_reached = 2OTHERS = 3

ENDIF

ENDFORM armar_alv

amp---------------------------------------------------------------------amp Form construir_catalogo_EXITamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_exit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_USER_EXITi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03

CF X c_text_04

ENDFORM construir_catalogo_EXIT

amp---------------------------------------------------------------------amp Form asignar_campo_a_catalogoamp--------------------------------------------------------------------- Asignar campo al catalogo ALV----------------------------------------------------------------------FORM asignar_campo_a_catalogo TABLES pt_cat STRUCTURE wa_catUSING p_fieldname LIKE wa_cat-fieldnamep_key LIKE wa_cat-keyp_col_pos TYPE cp_fix_column LIKE wa_cat-fix_columnp_hotspot LIKE wa_cat-hotspotp_do_sum LIKE wa_cat-do_sump_input LIKE wa_cat-inputp_checkbox LIKE wa_cat-checkboxp_no_out LIKE wa_cat-no_outp_icon LIKE wa_cat-iconp_reptext_ddic LIKE wa_cat-reptext_ddic

STATICS l_col_pos LIKE sy-cucol

Asignar atributos de campo en el catalogo de cabecera ALVCLEAR wa_catREAD TABLE pt_cat INTO wa_catWITH KEY fieldname = p_fieldname

CHECK sy-subrc EQ 0

IF NOT p_reptext_ddic IS INITIALwa_cat-seltext_l = wa_cat-seltext_m =wa_cat-seltext_s = wa_cat-reptext_ddic = p_reptext_ddicENDIF

IF p_col_pos EQ X Inicializo el conteo para ordenar las columnasl_col_pos = 1ELSEADD 1 TO l_col_posENDIF

wa_cat-fieldname = p_fieldnamewa_cat-key = p_keywa_cat-col_pos = l_col_poswa_cat-fix_column = p_fix_columnwa_cat-hotspot = p_hotspotwa_cat-do_sum = p_do_sumwa_cat-edit = wa_cat-input = p_inputwa_cat-checkbox = p_checkboxwa_cat-no_out = p_no_outwa_cat-icon = p_icon

MODIFY pt_cat FROM wa_cat INDEX sy-tabix

ENDFORM asignar_campo_a_catalogo

amp---------------------------------------------------------------------amp Form definir_layoutamp--------------------------------------------------------------------- Definir atributos del layout de reporte----------------------------------------------------------------------FORM definir_layout USING p_table TYPE slis_layout_alv-box_tabnameCHANGING p_layout TYPE slis_layout_alv

CLEAR p_layout

IF p_table NE TI_CIMP Marco el campo para la seleccioacutenp_layout-box_fieldname = SELp_layout-box_tabname = p_tableENDIFp_layout-zebra = Xp_layout-colwidth_optimize = Xp_layout-no_vline = p_layout-no_colhead = p_layout-lights_condense = Xp_layout-detail_popup = Xp_layout-detail_initial_lines = Xp_layout-flexible_key = p_layout-key_hotspot = p_layout-confirmation_prompt = X

ENDFORM definir_layout

amp---------------------------------------------------------------------amp Form construir_eventosamp--------------------------------------------------------------------- Asignar eventos soportados----------------------------------------------------------------------FORM construir_eventos USING p_form LIKE wa_events-formDATAl_type(1) TYPE n

REFRESH ti_eventsCLEAR wa_events

ALV Simple Block appendl_type = 2

Buscar secciones para eventosCALL FUNCTION REUSE_ALV_EVENTS_GETEXPORTINGi_list_type = l_typeIMPORTINGet_events = ti_events

Leer evento TOP_OF_PAGEREAD TABLE ti_events WITH KEY name = slis_ev_top_of_pageINTO wa_events Asignar Rutina FORM TOP_OF_PAGE a eventoIF sy-subrc = 0MOVE p_form TO wa_events-formMODIFY ti_events FROM wa_events INDEX sy-tabixENDIF

ENDFORM construir_eventos

amp---------------------------------------------------------------------amp Form top_of_pageamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_user_exitWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUser-exit

ENDFORM top_of_page

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_UEXITamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_uexit

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_finalWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUSER-EXITs TxSMOD

ENDFORM TOP_OF_PAGE_UEXIT

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_FDEXamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_fdex

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_fdexWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incFIELD-EXITs

ENDFORM TOP_OF_PAGE_FDEX

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BADIamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_badi

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_badiWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBADIs

ENDFORM TOP_OF_PAGE_BADI

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BTEamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_bte

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_bteWRITE sy-tfill TO l_tfill_cant

CONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBTEs

ENDFORM TOP_OF_PAGE_BTE

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enh

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_enhWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENH

amp---------------------------------------------------------------------amp Form sortamp--------------------------------------------------------------------- Creo el sort del ALV (FM)---------------------------------------------------------------------- --gtPT_sort Tabla --gtP_tabname Nombre de la tabla----------------------------------------------------------------------FORM sort TABLES pt_sortUSING p_tabname TYPE any

CLEAR pt_sort wa_sortREFRESH pt_sort

CASE p_tabnameWHEN TI_SUST

wa_sort-fieldname = SUBSTIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = SUBSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = CONSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN TI_VAL

wa_sort-fieldname = VALIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = VALSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN TI_ENHOBJ

wa_sort-fieldname = ENHNAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = VERSIONwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN OTHERS

IF p_tabname NE TI_FINAL

wa_sort-fieldname = TIPOwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

IF p_tabname NE TI_FDEX

wa_sort-fieldname = NIVELwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = PROGRAMAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = LINEAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

ENDIF

ELSE

wa_sort-fieldname = NAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = MEMBERwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sortENDIFENDCASE

ENDFORM sort

amp---------------------------------------------------------------------amp Form mostrar_listadoamp--------------------------------------------------------------------- Mostrar listado ALV----------------------------------------------------------------------FORM mostrar_listado

wa_print-reserve_lines = 2

CALL FUNCTION REUSE_ALV_BLOCK_LIST_DISPLAY

EXPORTINGis_print = wa_printEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM mostrar_listado

amp---------------------------------------------------------------------amp Form user_commandamp--------------------------------------------------------------------- Evaluar acciones del usuario----------------------------------------------------------------------FORM user_command USING ucomm LIKE sy-ucommsfields TYPE slis_selfield

DATA l_break TYPE c

Rescatar el registro seleccionadoCASE sfields-tabnameWHEN TI_USER_EXITREAD TABLE ti_user_exit INDEX sfields-tabindexWHEN TI_BADIREAD TABLE ti_badi INDEX sfields-tabindexWHEN TI_BTEREAD TABLE ti_bte INDEX sfields-tabindexWHEN TI_ENHREAD TABLE ti_enh INDEX sfields-tabindexWHEN TI_ENHOBJREAD TABLE ti_enhobj INDEX sfields-tabindexWHEN TI_FDEXREAD TABLE ti_fdex INDEX sfields-tabindexWHEN TI_FINALREAD TABLE ti_final INDEX sfields-tabindexWHEN TI_SUSTREAD TABLE ti_sust INDEX sfields-tabindexWHEN TI_VALREAD TABLE ti_val INDEX sfields-tabindexWHEN TI_CIMPREAD TABLE ti_cimp INDEX sfields-tabindexENDCASE

Seleccion de opcionCASE ucomm DOUBLE CLICKWHEN ampIC1 Evaluar valor de campo seleccionadoCHECK NOT sfields-value IS INITIAL

CASE sfields-tabnameWHEN TI_USER_EXIT USER-EXITIF ti_user_exit-tipo EQ sfields-value(4)SEARCH ti_user_exit-cf FOR c_enhanceCHECK sy-subrc EQ 0PERFORM visualizar_exit USING ti_user_exit-programati_user_exit-cf

ELSEIF ti_user_exit-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_user_exit-programati_user_exit-lineaMOVE X TO l_breakELSEIF ti_user_exit-break EQ sfields-value(4)OR ti_user_exit-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_user_exit-programati_user_exit-lineati_user_exit-breakMOVE X TO l_breakENDIF

WHEN TI_FINAL USER-EXIT Tx CMODIF ti_final-name EQ sfields-valueCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = ti_final-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSEIF ti_final-include EQ sfields-valuePERFORM visualizar_linea USING ti_final-programa1MOVE X TO l_breakENDIF

WHEN TI_BADI BadiIF ti_badi-tipo EQ sfields-value(4)PERFORM visualizar_badi USING ti_badi-cfELSEIF ti_badi-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_badi-programati_badi-lineaMOVE X TO l_breakELSEIF ti_badi-break EQ sfields-value(4)OR ti_badi-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_badi-programati_badi-lineati_badi-breakMOVE X TO l_breakENDIF

WHEN TI_BTE BTEIF ti_bte-tipo EQ sfields-value(4)PERFORM fibf USING ti_bte-cfELSEIF ti_bte-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_bte-programati_bte-lineaMOVE X TO l_breakELSEIF ti_bte-break EQ sfields-value(4)OR ti_bte-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_bte-programati_bte-linea

ti_bte-breakMOVE X TO l_breakENDIF

WHEN TI_ENH Punto de ampliacioacutenIF ti_enh-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_enh-programati_enh-lineaMOVE X TO l_breakELSEIF ti_enh-tipo EQ sfields-value(4)PERFORM bi_se18 USING ti_enh-cfENDIF

WHEN TI_ENHOBJ Punto de ampliacioacutenIF ti_enhobj-enhname EQ sfields-value(30)PERFORM bi_se19 USING ti_enhobj-enhnameENDIF

WHEN TI_SUST SustitucionesIF ti_sust-substid EQ sfields-value(7) ORti_sust-subseqnr EQ sfields-value(3)PERFORM visualizar_sust USING ti_sust-substidti_sust-subseqnrENDIF

WHEN TI_VAL ValidacionesIF ti_val-valid EQ sfields-value(7) ORti_val-valseqnr EQ sfields-value(3)PERFORM visualizar_val USING ti_val-validti_val-valseqnrENDIF

WHEN TI_FDEX Field-exitIF ti_fdex-tipo EQ sfields-valueSUBMIT rsmodprf AND RETURNELSEIF ti_fdex-cf(60) EQ sfields-value Visualizo el field-exitCALL FUNCTION RS_FUNCTION_SHOWEXPORTINGfuncname = ti_fdex-cf

CALL FUNCTION RS_NAVIGATION_MONITORENDIF

WHEN TI_CIMP Customer implementation

CASE sfields-fieldnameWHEN ENHNAMEPERFORM bi_se19 USING ti_cimp-enhnameWHEN ENHINCLUDEPERFORM visualizar_enh_cf USING ti_cimp-enhinclude

WHEN OTHERS DO NOTHING ENDCASE

WHEN OTHERS DO NOTHING ENDCASE

WHEN OTHERS DO NOTHING ENDCASE

IF l_break IS NOT INITIAL AND sfields-tabname NE TI_CIMPWAIT UP TO 1 SECONDSPERFORM cargar_breakENDIFsfields-refresh = X

ENDFORM user_command

amp---------------------------------------------------------------------amp Form visualizar_lineaamp--------------------------------------------------------------------- Visualizo la linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_linea USING p_programa TYPE sy-repidp_linea

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_programaobject_type = c_typeposition = p_lineaEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM visualizar_linea

amp---------------------------------------------------------------------amp Form buscar_exitamp--------------------------------------------------------------------- Buscar USER-EXIT----------------------------------------------------------------------FORM buscar_exit

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN USER-EXITSEARCH ti_programa-cf FOR c_user_exit- SE ENCONTRO UN USER-EXIT Y SE VERIFICA SI LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS PERFORMSEARCH ti_programa-cf FOR c_performCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LAS ASIGNACIONESSEARCH ti_programa-cf FOR c_igualCHECK sy-subrc NE 0

CLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INIacuteCIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF

ENDFORM buscar_exit

amp---------------------------------------------------------------------amp Form buscar_badiamp--------------------------------------------------------------------- Buscar BADI----------------------------------------------------------------------FORM buscar_badi

DATAl_subrc LIKE sy-subrc

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BADISEARCH ti_programa-cf FOR c_badi- SE ENCONTRO UNA BADI Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

SEARCH ti_programa-cf FOR c_includeIF sy-subrc NE 0CLEAR l_subrcSEARCH ti_programa-cf FOR c_methodIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_funcao_2IF sy-subrc NE 0SEARCH ti_programa-cf FOR c_performIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_type_refIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_formMOVE 4 TO l_subrcENDIFENDIFENDIFENDIF

IF l_subrc EQ 0CLEAR ti_badi

- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIFELSECHECK p_handl IS NOT INITIAL- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA INSTANCIA DE- UNA BADISEARCH ti_programa-cf FOR c_handler- SE ENCONTRO UNA INSTANCIA DE IMPLEMENACIOacuteN Y SE VERIFICA SI LA LINEA- NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

SEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0CLEAR ti_badi- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIF

ENDFORM buscar_badi

amp---------------------------------------------------------------------amp Form buscar_bteamp--------------------------------------------------------------------- Buscar BTE----------------------------------------------------------------------FORM buscar_bte

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OPEN_FI_PERFORM

- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endform

CHECK sy-subrc NE 0

CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte1- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OUTBOUND_CALL

- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0

CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF

ENDFORM buscar_bte

amp---------------------------------------------------------------------amp Form repid_f4amp--------------------------------------------------------------------- Ejecuto el F4 para buscar programas----------------------------------------------------------------------FORM repid_f4

CALL FUNCTION REPOSITORY_INFO_SYSTEM_F4EXPORTINGobject_type = PROGobject_name = p_progsuppress_selection = XIMPORTINGobject_name_selected = p_progEXCEPTIONS

cancel = 1wrong_type = 2OTHERS = 3

ENDFORM repid_f4

amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf

DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

SEARCH p_cf FOR 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 INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

READ TABLE lt_cf INDEX 4

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

CHECK sy-subrc IS INITIAL

Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten

textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer

CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4

IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF

WHEN OTHERS Do Nothing ENDCASE

ENDFORM visualizar_badi

amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf

DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

CLEAR d010inc modsap modact

Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid

IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF

SEARCH p_cf FOR c_enhance

CHECK sy-subrc IS INITIAL

REFRESH lt_cf

l_cf = 500 - sy-fdpos

MOVE p_cf+sy-fdpos(l_cf) TO l_linea

SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3

TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS

Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _

Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit

CHECK sy-subrc IS INITIAL

Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM

modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3

ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname

CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ENDIF

ENDFORM visualizar_exit

amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit

DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo

DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe

DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE

CHECK p_fdex IS NOT INITIAL

CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe

MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex

IF p_prog IS NOT INITIAL

MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF

Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog

LOOP AT lt_d020s

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

REFRESH lt_d021s

Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4

Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X

SEARCH lt_d021s-fnam FOR -

IF sy-subrc IS INITIAL

MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum

Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname

APPEND lt_campo

ENDIF

ENDLOOPENDLOOP

CHECK lt_campo[] IS NOT INITIAL

SORT lt_campo BY repid dnum tabname fieldname

DELETE ADJACENT DUPLICATES FROM lt_campo

Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname

SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l

LOOP AT lt_dd03l

CLEAR tddir tddirs

SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname

CHECK sy-subrc IS INITIAL

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog

CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF

Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf

IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF

READ TABLE lt_fe WITH KEY cf = lt_fe-cf

CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP

LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex

ENDLOOP

ENDFORM buscar_field_exit

amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf

DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c

SEARCH p_cf FOR c_bte

IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ELSE

SEARCH p_cf FOR c_bte1

CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ENDIF

IF l_tipo IS NOT INITIAL

PERFORM visualizar_bte USING l_tipol_linea

ELSECALL TRANSACTION FIBFENDIF

ENDFORM fibf

amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT

EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM breakpoint

amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_badi

amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE

i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_bte

amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X TIPO X X c_text_05CF X c_text_04

ENDFORM construir_catalogo_FDEX

amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc

DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

CHECK lt_break[] IS NOT INITIAL

IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix

MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF

IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix

MOVEti_badi-linea TO l_lineti_badi-programa TO l_program

READ TABLE lt_break INTO wa_break

WITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF

IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix

MOVEti_bte-linea TO l_lineti_bte-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF

ENDFORM cargar_break

amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

DATAl_tabix TYPE sy-tabix

l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

SELECT SINGLE FROM d010incWHERE include = p_programa

IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF

MOVEp_linea TO l_linep_programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM asignar_break

amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit

IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF

PERFORM get_objects Get Objects

ENDFORM buscar_user_exit

amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects

DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area

DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix

SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog

IF sy-subrc = 0

SORT ti_tadir BY obj_name devclass

SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass

IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF

- Get UserExit namesLOOP AT ti_jtab

SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E

APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area

l_fname = ti_final-member

CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include

LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP

CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP

ENDFORM get_objects

amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X

ENDFORM construir_catalogo_uexit

amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------

FORM visualizar_ampliacion

DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF

SELECT SINGLE FROM modsapWHERE member EQ l_member

IF sy-subrc IS INITIAL

Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member

ENDIF

ENDFORM visualizar_ampliacion

amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea

RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs

REFRESH r_event r_procs

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event

SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs

SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE

ENDFORM visualizar_bte

amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE

----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c

DATAl_linea(500) TYPE c

DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

MOVE lt_fields-value TO l_linea

PERFORM visualizar_bte USING p_tipol_linea

ENDFORM cargar_bte

amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface

DATAl_linea(500) TYPE c

DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE

InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF

ENDFORM visualizar_interface

amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones

CHECK p_sust IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922

ENDFORM buscar_sustituciones

amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST

ENDFORM construir_catalogo_sust

amp---------------------------------------------------------------------

amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones

ENDFORM TOP_OF_PAGE_SUST

amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4

CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_sust

amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones

CHECK p_val IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931

ENDFORM buscar_validaciones

amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID

ENDFORM construir_catalogo_val

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones

ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2

CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_val

amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto

DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF

SELECT SINGLE FROM modsapWHERE name EQ l_name

IF sy-subrc IS INITIAL

MOVE l_name TO l_member

SELECT SINGLE FROM modactWHERE member EQ l_member

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF

ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF

ENDFORM visualizar_proyecto

amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel

APPEND ti_enh

ENDIFENDIFENDIF

ENDFORM buscar_punto_ampliacioacuten

amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_enh

amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh

DATA l_obj_name TYPE enhobj-obj_name

DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name

CHECK p_enh IS NOT INITIAL

IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF

REFRESH lt_obj_name

LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP

SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name

ENDFORM buscar_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X

ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME

ENDFORM construir_catalogo_enhobj

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENHOBJ

amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM bi_se19

amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro

CLEAR ti_bdcdatati_bdcdata-program = program

ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata

ENDFORM BDC_DYNPRO

amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval

CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata

ENDFORM BDC_FIELD

amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa

DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)

CHECK ti_gb31t[] IS NOT INITIAL

DO

Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2

IF l_exit EQ XEXITENDIF

CHECK l_exit IS INITIAL

Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND

CHECK l_boolpool IS NOT INITIAL

MOVE l_boolpool TO l_repid

Visualizo el programaPERFORM visualizar_linea USING l_repid01

ENDDO

ENDFORM visualizar_programa

amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope

STATICS l_flag TYPE c

DATA l_tit(65) TYPE c

CHECK l_flag IS INITIAL

l_flag = X

WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline

4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM texto_tope

amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf

DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off

CHECK l_off IS NOT INITIAL

ADD 7 TO l_offl_cf = 500 - l_off

SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_enhspotname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1

invalid_object_type = 2OTHERS = 3

ENDFORM bi_se18

amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit

DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE

DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE

MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE

MOVE lt_fields-value TO l_nameENDIF

Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_

LOOP AT lt_tfdir

CLEARl_group l_include l_namespace l_str_area

l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl

IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl

CHECK sy-subrc IS INITIAL

Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP

CHECK l_flag IS INITIAL

La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value

ENDFORM visualizar_fm_exit

amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter

tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten

ENDFORM def_text_parameter

amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones

Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt

Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt

Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt

icon_create RESULT name text infoicon_create

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 23: buscar_ampliaciones FOROSAP

CF X c_text_04

ENDFORM construir_catalogo_EXIT

amp---------------------------------------------------------------------amp Form asignar_campo_a_catalogoamp--------------------------------------------------------------------- Asignar campo al catalogo ALV----------------------------------------------------------------------FORM asignar_campo_a_catalogo TABLES pt_cat STRUCTURE wa_catUSING p_fieldname LIKE wa_cat-fieldnamep_key LIKE wa_cat-keyp_col_pos TYPE cp_fix_column LIKE wa_cat-fix_columnp_hotspot LIKE wa_cat-hotspotp_do_sum LIKE wa_cat-do_sump_input LIKE wa_cat-inputp_checkbox LIKE wa_cat-checkboxp_no_out LIKE wa_cat-no_outp_icon LIKE wa_cat-iconp_reptext_ddic LIKE wa_cat-reptext_ddic

STATICS l_col_pos LIKE sy-cucol

Asignar atributos de campo en el catalogo de cabecera ALVCLEAR wa_catREAD TABLE pt_cat INTO wa_catWITH KEY fieldname = p_fieldname

CHECK sy-subrc EQ 0

IF NOT p_reptext_ddic IS INITIALwa_cat-seltext_l = wa_cat-seltext_m =wa_cat-seltext_s = wa_cat-reptext_ddic = p_reptext_ddicENDIF

IF p_col_pos EQ X Inicializo el conteo para ordenar las columnasl_col_pos = 1ELSEADD 1 TO l_col_posENDIF

wa_cat-fieldname = p_fieldnamewa_cat-key = p_keywa_cat-col_pos = l_col_poswa_cat-fix_column = p_fix_columnwa_cat-hotspot = p_hotspotwa_cat-do_sum = p_do_sumwa_cat-edit = wa_cat-input = p_inputwa_cat-checkbox = p_checkboxwa_cat-no_out = p_no_outwa_cat-icon = p_icon

MODIFY pt_cat FROM wa_cat INDEX sy-tabix

ENDFORM asignar_campo_a_catalogo

amp---------------------------------------------------------------------amp Form definir_layoutamp--------------------------------------------------------------------- Definir atributos del layout de reporte----------------------------------------------------------------------FORM definir_layout USING p_table TYPE slis_layout_alv-box_tabnameCHANGING p_layout TYPE slis_layout_alv

CLEAR p_layout

IF p_table NE TI_CIMP Marco el campo para la seleccioacutenp_layout-box_fieldname = SELp_layout-box_tabname = p_tableENDIFp_layout-zebra = Xp_layout-colwidth_optimize = Xp_layout-no_vline = p_layout-no_colhead = p_layout-lights_condense = Xp_layout-detail_popup = Xp_layout-detail_initial_lines = Xp_layout-flexible_key = p_layout-key_hotspot = p_layout-confirmation_prompt = X

ENDFORM definir_layout

amp---------------------------------------------------------------------amp Form construir_eventosamp--------------------------------------------------------------------- Asignar eventos soportados----------------------------------------------------------------------FORM construir_eventos USING p_form LIKE wa_events-formDATAl_type(1) TYPE n

REFRESH ti_eventsCLEAR wa_events

ALV Simple Block appendl_type = 2

Buscar secciones para eventosCALL FUNCTION REUSE_ALV_EVENTS_GETEXPORTINGi_list_type = l_typeIMPORTINGet_events = ti_events

Leer evento TOP_OF_PAGEREAD TABLE ti_events WITH KEY name = slis_ev_top_of_pageINTO wa_events Asignar Rutina FORM TOP_OF_PAGE a eventoIF sy-subrc = 0MOVE p_form TO wa_events-formMODIFY ti_events FROM wa_events INDEX sy-tabixENDIF

ENDFORM construir_eventos

amp---------------------------------------------------------------------amp Form top_of_pageamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_user_exitWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUser-exit

ENDFORM top_of_page

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_UEXITamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_uexit

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_finalWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUSER-EXITs TxSMOD

ENDFORM TOP_OF_PAGE_UEXIT

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_FDEXamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_fdex

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_fdexWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incFIELD-EXITs

ENDFORM TOP_OF_PAGE_FDEX

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BADIamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_badi

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_badiWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBADIs

ENDFORM TOP_OF_PAGE_BADI

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BTEamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_bte

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_bteWRITE sy-tfill TO l_tfill_cant

CONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBTEs

ENDFORM TOP_OF_PAGE_BTE

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enh

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_enhWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENH

amp---------------------------------------------------------------------amp Form sortamp--------------------------------------------------------------------- Creo el sort del ALV (FM)---------------------------------------------------------------------- --gtPT_sort Tabla --gtP_tabname Nombre de la tabla----------------------------------------------------------------------FORM sort TABLES pt_sortUSING p_tabname TYPE any

CLEAR pt_sort wa_sortREFRESH pt_sort

CASE p_tabnameWHEN TI_SUST

wa_sort-fieldname = SUBSTIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = SUBSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = CONSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN TI_VAL

wa_sort-fieldname = VALIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = VALSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN TI_ENHOBJ

wa_sort-fieldname = ENHNAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = VERSIONwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN OTHERS

IF p_tabname NE TI_FINAL

wa_sort-fieldname = TIPOwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

IF p_tabname NE TI_FDEX

wa_sort-fieldname = NIVELwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = PROGRAMAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = LINEAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

ENDIF

ELSE

wa_sort-fieldname = NAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = MEMBERwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sortENDIFENDCASE

ENDFORM sort

amp---------------------------------------------------------------------amp Form mostrar_listadoamp--------------------------------------------------------------------- Mostrar listado ALV----------------------------------------------------------------------FORM mostrar_listado

wa_print-reserve_lines = 2

CALL FUNCTION REUSE_ALV_BLOCK_LIST_DISPLAY

EXPORTINGis_print = wa_printEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM mostrar_listado

amp---------------------------------------------------------------------amp Form user_commandamp--------------------------------------------------------------------- Evaluar acciones del usuario----------------------------------------------------------------------FORM user_command USING ucomm LIKE sy-ucommsfields TYPE slis_selfield

DATA l_break TYPE c

Rescatar el registro seleccionadoCASE sfields-tabnameWHEN TI_USER_EXITREAD TABLE ti_user_exit INDEX sfields-tabindexWHEN TI_BADIREAD TABLE ti_badi INDEX sfields-tabindexWHEN TI_BTEREAD TABLE ti_bte INDEX sfields-tabindexWHEN TI_ENHREAD TABLE ti_enh INDEX sfields-tabindexWHEN TI_ENHOBJREAD TABLE ti_enhobj INDEX sfields-tabindexWHEN TI_FDEXREAD TABLE ti_fdex INDEX sfields-tabindexWHEN TI_FINALREAD TABLE ti_final INDEX sfields-tabindexWHEN TI_SUSTREAD TABLE ti_sust INDEX sfields-tabindexWHEN TI_VALREAD TABLE ti_val INDEX sfields-tabindexWHEN TI_CIMPREAD TABLE ti_cimp INDEX sfields-tabindexENDCASE

Seleccion de opcionCASE ucomm DOUBLE CLICKWHEN ampIC1 Evaluar valor de campo seleccionadoCHECK NOT sfields-value IS INITIAL

CASE sfields-tabnameWHEN TI_USER_EXIT USER-EXITIF ti_user_exit-tipo EQ sfields-value(4)SEARCH ti_user_exit-cf FOR c_enhanceCHECK sy-subrc EQ 0PERFORM visualizar_exit USING ti_user_exit-programati_user_exit-cf

ELSEIF ti_user_exit-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_user_exit-programati_user_exit-lineaMOVE X TO l_breakELSEIF ti_user_exit-break EQ sfields-value(4)OR ti_user_exit-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_user_exit-programati_user_exit-lineati_user_exit-breakMOVE X TO l_breakENDIF

WHEN TI_FINAL USER-EXIT Tx CMODIF ti_final-name EQ sfields-valueCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = ti_final-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSEIF ti_final-include EQ sfields-valuePERFORM visualizar_linea USING ti_final-programa1MOVE X TO l_breakENDIF

WHEN TI_BADI BadiIF ti_badi-tipo EQ sfields-value(4)PERFORM visualizar_badi USING ti_badi-cfELSEIF ti_badi-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_badi-programati_badi-lineaMOVE X TO l_breakELSEIF ti_badi-break EQ sfields-value(4)OR ti_badi-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_badi-programati_badi-lineati_badi-breakMOVE X TO l_breakENDIF

WHEN TI_BTE BTEIF ti_bte-tipo EQ sfields-value(4)PERFORM fibf USING ti_bte-cfELSEIF ti_bte-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_bte-programati_bte-lineaMOVE X TO l_breakELSEIF ti_bte-break EQ sfields-value(4)OR ti_bte-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_bte-programati_bte-linea

ti_bte-breakMOVE X TO l_breakENDIF

WHEN TI_ENH Punto de ampliacioacutenIF ti_enh-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_enh-programati_enh-lineaMOVE X TO l_breakELSEIF ti_enh-tipo EQ sfields-value(4)PERFORM bi_se18 USING ti_enh-cfENDIF

WHEN TI_ENHOBJ Punto de ampliacioacutenIF ti_enhobj-enhname EQ sfields-value(30)PERFORM bi_se19 USING ti_enhobj-enhnameENDIF

WHEN TI_SUST SustitucionesIF ti_sust-substid EQ sfields-value(7) ORti_sust-subseqnr EQ sfields-value(3)PERFORM visualizar_sust USING ti_sust-substidti_sust-subseqnrENDIF

WHEN TI_VAL ValidacionesIF ti_val-valid EQ sfields-value(7) ORti_val-valseqnr EQ sfields-value(3)PERFORM visualizar_val USING ti_val-validti_val-valseqnrENDIF

WHEN TI_FDEX Field-exitIF ti_fdex-tipo EQ sfields-valueSUBMIT rsmodprf AND RETURNELSEIF ti_fdex-cf(60) EQ sfields-value Visualizo el field-exitCALL FUNCTION RS_FUNCTION_SHOWEXPORTINGfuncname = ti_fdex-cf

CALL FUNCTION RS_NAVIGATION_MONITORENDIF

WHEN TI_CIMP Customer implementation

CASE sfields-fieldnameWHEN ENHNAMEPERFORM bi_se19 USING ti_cimp-enhnameWHEN ENHINCLUDEPERFORM visualizar_enh_cf USING ti_cimp-enhinclude

WHEN OTHERS DO NOTHING ENDCASE

WHEN OTHERS DO NOTHING ENDCASE

WHEN OTHERS DO NOTHING ENDCASE

IF l_break IS NOT INITIAL AND sfields-tabname NE TI_CIMPWAIT UP TO 1 SECONDSPERFORM cargar_breakENDIFsfields-refresh = X

ENDFORM user_command

amp---------------------------------------------------------------------amp Form visualizar_lineaamp--------------------------------------------------------------------- Visualizo la linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_linea USING p_programa TYPE sy-repidp_linea

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_programaobject_type = c_typeposition = p_lineaEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM visualizar_linea

amp---------------------------------------------------------------------amp Form buscar_exitamp--------------------------------------------------------------------- Buscar USER-EXIT----------------------------------------------------------------------FORM buscar_exit

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN USER-EXITSEARCH ti_programa-cf FOR c_user_exit- SE ENCONTRO UN USER-EXIT Y SE VERIFICA SI LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS PERFORMSEARCH ti_programa-cf FOR c_performCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LAS ASIGNACIONESSEARCH ti_programa-cf FOR c_igualCHECK sy-subrc NE 0

CLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INIacuteCIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF

ENDFORM buscar_exit

amp---------------------------------------------------------------------amp Form buscar_badiamp--------------------------------------------------------------------- Buscar BADI----------------------------------------------------------------------FORM buscar_badi

DATAl_subrc LIKE sy-subrc

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BADISEARCH ti_programa-cf FOR c_badi- SE ENCONTRO UNA BADI Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

SEARCH ti_programa-cf FOR c_includeIF sy-subrc NE 0CLEAR l_subrcSEARCH ti_programa-cf FOR c_methodIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_funcao_2IF sy-subrc NE 0SEARCH ti_programa-cf FOR c_performIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_type_refIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_formMOVE 4 TO l_subrcENDIFENDIFENDIFENDIF

IF l_subrc EQ 0CLEAR ti_badi

- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIFELSECHECK p_handl IS NOT INITIAL- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA INSTANCIA DE- UNA BADISEARCH ti_programa-cf FOR c_handler- SE ENCONTRO UNA INSTANCIA DE IMPLEMENACIOacuteN Y SE VERIFICA SI LA LINEA- NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

SEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0CLEAR ti_badi- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIF

ENDFORM buscar_badi

amp---------------------------------------------------------------------amp Form buscar_bteamp--------------------------------------------------------------------- Buscar BTE----------------------------------------------------------------------FORM buscar_bte

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OPEN_FI_PERFORM

- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endform

CHECK sy-subrc NE 0

CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte1- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OUTBOUND_CALL

- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0

CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF

ENDFORM buscar_bte

amp---------------------------------------------------------------------amp Form repid_f4amp--------------------------------------------------------------------- Ejecuto el F4 para buscar programas----------------------------------------------------------------------FORM repid_f4

CALL FUNCTION REPOSITORY_INFO_SYSTEM_F4EXPORTINGobject_type = PROGobject_name = p_progsuppress_selection = XIMPORTINGobject_name_selected = p_progEXCEPTIONS

cancel = 1wrong_type = 2OTHERS = 3

ENDFORM repid_f4

amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf

DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

SEARCH p_cf FOR 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 INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

READ TABLE lt_cf INDEX 4

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

CHECK sy-subrc IS INITIAL

Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten

textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer

CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4

IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF

WHEN OTHERS Do Nothing ENDCASE

ENDFORM visualizar_badi

amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf

DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

CLEAR d010inc modsap modact

Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid

IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF

SEARCH p_cf FOR c_enhance

CHECK sy-subrc IS INITIAL

REFRESH lt_cf

l_cf = 500 - sy-fdpos

MOVE p_cf+sy-fdpos(l_cf) TO l_linea

SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3

TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS

Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _

Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit

CHECK sy-subrc IS INITIAL

Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM

modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3

ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname

CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ENDIF

ENDFORM visualizar_exit

amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit

DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo

DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe

DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE

CHECK p_fdex IS NOT INITIAL

CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe

MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex

IF p_prog IS NOT INITIAL

MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF

Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog

LOOP AT lt_d020s

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

REFRESH lt_d021s

Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4

Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X

SEARCH lt_d021s-fnam FOR -

IF sy-subrc IS INITIAL

MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum

Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname

APPEND lt_campo

ENDIF

ENDLOOPENDLOOP

CHECK lt_campo[] IS NOT INITIAL

SORT lt_campo BY repid dnum tabname fieldname

DELETE ADJACENT DUPLICATES FROM lt_campo

Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname

SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l

LOOP AT lt_dd03l

CLEAR tddir tddirs

SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname

CHECK sy-subrc IS INITIAL

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog

CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF

Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf

IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF

READ TABLE lt_fe WITH KEY cf = lt_fe-cf

CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP

LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex

ENDLOOP

ENDFORM buscar_field_exit

amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf

DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c

SEARCH p_cf FOR c_bte

IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ELSE

SEARCH p_cf FOR c_bte1

CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ENDIF

IF l_tipo IS NOT INITIAL

PERFORM visualizar_bte USING l_tipol_linea

ELSECALL TRANSACTION FIBFENDIF

ENDFORM fibf

amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT

EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM breakpoint

amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_badi

amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE

i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_bte

amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X TIPO X X c_text_05CF X c_text_04

ENDFORM construir_catalogo_FDEX

amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc

DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

CHECK lt_break[] IS NOT INITIAL

IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix

MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF

IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix

MOVEti_badi-linea TO l_lineti_badi-programa TO l_program

READ TABLE lt_break INTO wa_break

WITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF

IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix

MOVEti_bte-linea TO l_lineti_bte-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF

ENDFORM cargar_break

amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

DATAl_tabix TYPE sy-tabix

l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

SELECT SINGLE FROM d010incWHERE include = p_programa

IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF

MOVEp_linea TO l_linep_programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM asignar_break

amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit

IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF

PERFORM get_objects Get Objects

ENDFORM buscar_user_exit

amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects

DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area

DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix

SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog

IF sy-subrc = 0

SORT ti_tadir BY obj_name devclass

SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass

IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF

- Get UserExit namesLOOP AT ti_jtab

SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E

APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area

l_fname = ti_final-member

CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include

LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP

CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP

ENDFORM get_objects

amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X

ENDFORM construir_catalogo_uexit

amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------

FORM visualizar_ampliacion

DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF

SELECT SINGLE FROM modsapWHERE member EQ l_member

IF sy-subrc IS INITIAL

Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member

ENDIF

ENDFORM visualizar_ampliacion

amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea

RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs

REFRESH r_event r_procs

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event

SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs

SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE

ENDFORM visualizar_bte

amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE

----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c

DATAl_linea(500) TYPE c

DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

MOVE lt_fields-value TO l_linea

PERFORM visualizar_bte USING p_tipol_linea

ENDFORM cargar_bte

amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface

DATAl_linea(500) TYPE c

DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE

InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF

ENDFORM visualizar_interface

amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones

CHECK p_sust IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922

ENDFORM buscar_sustituciones

amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST

ENDFORM construir_catalogo_sust

amp---------------------------------------------------------------------

amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones

ENDFORM TOP_OF_PAGE_SUST

amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4

CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_sust

amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones

CHECK p_val IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931

ENDFORM buscar_validaciones

amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID

ENDFORM construir_catalogo_val

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones

ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2

CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_val

amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto

DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF

SELECT SINGLE FROM modsapWHERE name EQ l_name

IF sy-subrc IS INITIAL

MOVE l_name TO l_member

SELECT SINGLE FROM modactWHERE member EQ l_member

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF

ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF

ENDFORM visualizar_proyecto

amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel

APPEND ti_enh

ENDIFENDIFENDIF

ENDFORM buscar_punto_ampliacioacuten

amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_enh

amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh

DATA l_obj_name TYPE enhobj-obj_name

DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name

CHECK p_enh IS NOT INITIAL

IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF

REFRESH lt_obj_name

LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP

SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name

ENDFORM buscar_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X

ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME

ENDFORM construir_catalogo_enhobj

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENHOBJ

amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM bi_se19

amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro

CLEAR ti_bdcdatati_bdcdata-program = program

ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata

ENDFORM BDC_DYNPRO

amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval

CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata

ENDFORM BDC_FIELD

amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa

DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)

CHECK ti_gb31t[] IS NOT INITIAL

DO

Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2

IF l_exit EQ XEXITENDIF

CHECK l_exit IS INITIAL

Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND

CHECK l_boolpool IS NOT INITIAL

MOVE l_boolpool TO l_repid

Visualizo el programaPERFORM visualizar_linea USING l_repid01

ENDDO

ENDFORM visualizar_programa

amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope

STATICS l_flag TYPE c

DATA l_tit(65) TYPE c

CHECK l_flag IS INITIAL

l_flag = X

WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline

4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM texto_tope

amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf

DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off

CHECK l_off IS NOT INITIAL

ADD 7 TO l_offl_cf = 500 - l_off

SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_enhspotname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1

invalid_object_type = 2OTHERS = 3

ENDFORM bi_se18

amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit

DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE

DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE

MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE

MOVE lt_fields-value TO l_nameENDIF

Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_

LOOP AT lt_tfdir

CLEARl_group l_include l_namespace l_str_area

l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl

IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl

CHECK sy-subrc IS INITIAL

Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP

CHECK l_flag IS INITIAL

La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value

ENDFORM visualizar_fm_exit

amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter

tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten

ENDFORM def_text_parameter

amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones

Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt

Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt

Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt

icon_create RESULT name text infoicon_create

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 24: buscar_ampliaciones FOROSAP

amp---------------------------------------------------------------------amp Form definir_layoutamp--------------------------------------------------------------------- Definir atributos del layout de reporte----------------------------------------------------------------------FORM definir_layout USING p_table TYPE slis_layout_alv-box_tabnameCHANGING p_layout TYPE slis_layout_alv

CLEAR p_layout

IF p_table NE TI_CIMP Marco el campo para la seleccioacutenp_layout-box_fieldname = SELp_layout-box_tabname = p_tableENDIFp_layout-zebra = Xp_layout-colwidth_optimize = Xp_layout-no_vline = p_layout-no_colhead = p_layout-lights_condense = Xp_layout-detail_popup = Xp_layout-detail_initial_lines = Xp_layout-flexible_key = p_layout-key_hotspot = p_layout-confirmation_prompt = X

ENDFORM definir_layout

amp---------------------------------------------------------------------amp Form construir_eventosamp--------------------------------------------------------------------- Asignar eventos soportados----------------------------------------------------------------------FORM construir_eventos USING p_form LIKE wa_events-formDATAl_type(1) TYPE n

REFRESH ti_eventsCLEAR wa_events

ALV Simple Block appendl_type = 2

Buscar secciones para eventosCALL FUNCTION REUSE_ALV_EVENTS_GETEXPORTINGi_list_type = l_typeIMPORTINGet_events = ti_events

Leer evento TOP_OF_PAGEREAD TABLE ti_events WITH KEY name = slis_ev_top_of_pageINTO wa_events Asignar Rutina FORM TOP_OF_PAGE a eventoIF sy-subrc = 0MOVE p_form TO wa_events-formMODIFY ti_events FROM wa_events INDEX sy-tabixENDIF

ENDFORM construir_eventos

amp---------------------------------------------------------------------amp Form top_of_pageamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_user_exitWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUser-exit

ENDFORM top_of_page

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_UEXITamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_uexit

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_finalWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUSER-EXITs TxSMOD

ENDFORM TOP_OF_PAGE_UEXIT

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_FDEXamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_fdex

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_fdexWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incFIELD-EXITs

ENDFORM TOP_OF_PAGE_FDEX

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BADIamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_badi

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_badiWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBADIs

ENDFORM TOP_OF_PAGE_BADI

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BTEamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_bte

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_bteWRITE sy-tfill TO l_tfill_cant

CONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBTEs

ENDFORM TOP_OF_PAGE_BTE

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enh

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_enhWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENH

amp---------------------------------------------------------------------amp Form sortamp--------------------------------------------------------------------- Creo el sort del ALV (FM)---------------------------------------------------------------------- --gtPT_sort Tabla --gtP_tabname Nombre de la tabla----------------------------------------------------------------------FORM sort TABLES pt_sortUSING p_tabname TYPE any

CLEAR pt_sort wa_sortREFRESH pt_sort

CASE p_tabnameWHEN TI_SUST

wa_sort-fieldname = SUBSTIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = SUBSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = CONSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN TI_VAL

wa_sort-fieldname = VALIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = VALSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN TI_ENHOBJ

wa_sort-fieldname = ENHNAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = VERSIONwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN OTHERS

IF p_tabname NE TI_FINAL

wa_sort-fieldname = TIPOwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

IF p_tabname NE TI_FDEX

wa_sort-fieldname = NIVELwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = PROGRAMAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = LINEAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

ENDIF

ELSE

wa_sort-fieldname = NAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = MEMBERwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sortENDIFENDCASE

ENDFORM sort

amp---------------------------------------------------------------------amp Form mostrar_listadoamp--------------------------------------------------------------------- Mostrar listado ALV----------------------------------------------------------------------FORM mostrar_listado

wa_print-reserve_lines = 2

CALL FUNCTION REUSE_ALV_BLOCK_LIST_DISPLAY

EXPORTINGis_print = wa_printEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM mostrar_listado

amp---------------------------------------------------------------------amp Form user_commandamp--------------------------------------------------------------------- Evaluar acciones del usuario----------------------------------------------------------------------FORM user_command USING ucomm LIKE sy-ucommsfields TYPE slis_selfield

DATA l_break TYPE c

Rescatar el registro seleccionadoCASE sfields-tabnameWHEN TI_USER_EXITREAD TABLE ti_user_exit INDEX sfields-tabindexWHEN TI_BADIREAD TABLE ti_badi INDEX sfields-tabindexWHEN TI_BTEREAD TABLE ti_bte INDEX sfields-tabindexWHEN TI_ENHREAD TABLE ti_enh INDEX sfields-tabindexWHEN TI_ENHOBJREAD TABLE ti_enhobj INDEX sfields-tabindexWHEN TI_FDEXREAD TABLE ti_fdex INDEX sfields-tabindexWHEN TI_FINALREAD TABLE ti_final INDEX sfields-tabindexWHEN TI_SUSTREAD TABLE ti_sust INDEX sfields-tabindexWHEN TI_VALREAD TABLE ti_val INDEX sfields-tabindexWHEN TI_CIMPREAD TABLE ti_cimp INDEX sfields-tabindexENDCASE

Seleccion de opcionCASE ucomm DOUBLE CLICKWHEN ampIC1 Evaluar valor de campo seleccionadoCHECK NOT sfields-value IS INITIAL

CASE sfields-tabnameWHEN TI_USER_EXIT USER-EXITIF ti_user_exit-tipo EQ sfields-value(4)SEARCH ti_user_exit-cf FOR c_enhanceCHECK sy-subrc EQ 0PERFORM visualizar_exit USING ti_user_exit-programati_user_exit-cf

ELSEIF ti_user_exit-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_user_exit-programati_user_exit-lineaMOVE X TO l_breakELSEIF ti_user_exit-break EQ sfields-value(4)OR ti_user_exit-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_user_exit-programati_user_exit-lineati_user_exit-breakMOVE X TO l_breakENDIF

WHEN TI_FINAL USER-EXIT Tx CMODIF ti_final-name EQ sfields-valueCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = ti_final-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSEIF ti_final-include EQ sfields-valuePERFORM visualizar_linea USING ti_final-programa1MOVE X TO l_breakENDIF

WHEN TI_BADI BadiIF ti_badi-tipo EQ sfields-value(4)PERFORM visualizar_badi USING ti_badi-cfELSEIF ti_badi-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_badi-programati_badi-lineaMOVE X TO l_breakELSEIF ti_badi-break EQ sfields-value(4)OR ti_badi-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_badi-programati_badi-lineati_badi-breakMOVE X TO l_breakENDIF

WHEN TI_BTE BTEIF ti_bte-tipo EQ sfields-value(4)PERFORM fibf USING ti_bte-cfELSEIF ti_bte-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_bte-programati_bte-lineaMOVE X TO l_breakELSEIF ti_bte-break EQ sfields-value(4)OR ti_bte-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_bte-programati_bte-linea

ti_bte-breakMOVE X TO l_breakENDIF

WHEN TI_ENH Punto de ampliacioacutenIF ti_enh-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_enh-programati_enh-lineaMOVE X TO l_breakELSEIF ti_enh-tipo EQ sfields-value(4)PERFORM bi_se18 USING ti_enh-cfENDIF

WHEN TI_ENHOBJ Punto de ampliacioacutenIF ti_enhobj-enhname EQ sfields-value(30)PERFORM bi_se19 USING ti_enhobj-enhnameENDIF

WHEN TI_SUST SustitucionesIF ti_sust-substid EQ sfields-value(7) ORti_sust-subseqnr EQ sfields-value(3)PERFORM visualizar_sust USING ti_sust-substidti_sust-subseqnrENDIF

WHEN TI_VAL ValidacionesIF ti_val-valid EQ sfields-value(7) ORti_val-valseqnr EQ sfields-value(3)PERFORM visualizar_val USING ti_val-validti_val-valseqnrENDIF

WHEN TI_FDEX Field-exitIF ti_fdex-tipo EQ sfields-valueSUBMIT rsmodprf AND RETURNELSEIF ti_fdex-cf(60) EQ sfields-value Visualizo el field-exitCALL FUNCTION RS_FUNCTION_SHOWEXPORTINGfuncname = ti_fdex-cf

CALL FUNCTION RS_NAVIGATION_MONITORENDIF

WHEN TI_CIMP Customer implementation

CASE sfields-fieldnameWHEN ENHNAMEPERFORM bi_se19 USING ti_cimp-enhnameWHEN ENHINCLUDEPERFORM visualizar_enh_cf USING ti_cimp-enhinclude

WHEN OTHERS DO NOTHING ENDCASE

WHEN OTHERS DO NOTHING ENDCASE

WHEN OTHERS DO NOTHING ENDCASE

IF l_break IS NOT INITIAL AND sfields-tabname NE TI_CIMPWAIT UP TO 1 SECONDSPERFORM cargar_breakENDIFsfields-refresh = X

ENDFORM user_command

amp---------------------------------------------------------------------amp Form visualizar_lineaamp--------------------------------------------------------------------- Visualizo la linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_linea USING p_programa TYPE sy-repidp_linea

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_programaobject_type = c_typeposition = p_lineaEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM visualizar_linea

amp---------------------------------------------------------------------amp Form buscar_exitamp--------------------------------------------------------------------- Buscar USER-EXIT----------------------------------------------------------------------FORM buscar_exit

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN USER-EXITSEARCH ti_programa-cf FOR c_user_exit- SE ENCONTRO UN USER-EXIT Y SE VERIFICA SI LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS PERFORMSEARCH ti_programa-cf FOR c_performCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LAS ASIGNACIONESSEARCH ti_programa-cf FOR c_igualCHECK sy-subrc NE 0

CLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INIacuteCIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF

ENDFORM buscar_exit

amp---------------------------------------------------------------------amp Form buscar_badiamp--------------------------------------------------------------------- Buscar BADI----------------------------------------------------------------------FORM buscar_badi

DATAl_subrc LIKE sy-subrc

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BADISEARCH ti_programa-cf FOR c_badi- SE ENCONTRO UNA BADI Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

SEARCH ti_programa-cf FOR c_includeIF sy-subrc NE 0CLEAR l_subrcSEARCH ti_programa-cf FOR c_methodIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_funcao_2IF sy-subrc NE 0SEARCH ti_programa-cf FOR c_performIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_type_refIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_formMOVE 4 TO l_subrcENDIFENDIFENDIFENDIF

IF l_subrc EQ 0CLEAR ti_badi

- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIFELSECHECK p_handl IS NOT INITIAL- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA INSTANCIA DE- UNA BADISEARCH ti_programa-cf FOR c_handler- SE ENCONTRO UNA INSTANCIA DE IMPLEMENACIOacuteN Y SE VERIFICA SI LA LINEA- NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

SEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0CLEAR ti_badi- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIF

ENDFORM buscar_badi

amp---------------------------------------------------------------------amp Form buscar_bteamp--------------------------------------------------------------------- Buscar BTE----------------------------------------------------------------------FORM buscar_bte

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OPEN_FI_PERFORM

- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endform

CHECK sy-subrc NE 0

CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte1- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OUTBOUND_CALL

- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0

CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF

ENDFORM buscar_bte

amp---------------------------------------------------------------------amp Form repid_f4amp--------------------------------------------------------------------- Ejecuto el F4 para buscar programas----------------------------------------------------------------------FORM repid_f4

CALL FUNCTION REPOSITORY_INFO_SYSTEM_F4EXPORTINGobject_type = PROGobject_name = p_progsuppress_selection = XIMPORTINGobject_name_selected = p_progEXCEPTIONS

cancel = 1wrong_type = 2OTHERS = 3

ENDFORM repid_f4

amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf

DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

SEARCH p_cf FOR 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 INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

READ TABLE lt_cf INDEX 4

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

CHECK sy-subrc IS INITIAL

Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten

textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer

CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4

IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF

WHEN OTHERS Do Nothing ENDCASE

ENDFORM visualizar_badi

amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf

DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

CLEAR d010inc modsap modact

Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid

IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF

SEARCH p_cf FOR c_enhance

CHECK sy-subrc IS INITIAL

REFRESH lt_cf

l_cf = 500 - sy-fdpos

MOVE p_cf+sy-fdpos(l_cf) TO l_linea

SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3

TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS

Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _

Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit

CHECK sy-subrc IS INITIAL

Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM

modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3

ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname

CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ENDIF

ENDFORM visualizar_exit

amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit

DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo

DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe

DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE

CHECK p_fdex IS NOT INITIAL

CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe

MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex

IF p_prog IS NOT INITIAL

MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF

Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog

LOOP AT lt_d020s

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

REFRESH lt_d021s

Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4

Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X

SEARCH lt_d021s-fnam FOR -

IF sy-subrc IS INITIAL

MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum

Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname

APPEND lt_campo

ENDIF

ENDLOOPENDLOOP

CHECK lt_campo[] IS NOT INITIAL

SORT lt_campo BY repid dnum tabname fieldname

DELETE ADJACENT DUPLICATES FROM lt_campo

Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname

SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l

LOOP AT lt_dd03l

CLEAR tddir tddirs

SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname

CHECK sy-subrc IS INITIAL

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog

CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF

Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf

IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF

READ TABLE lt_fe WITH KEY cf = lt_fe-cf

CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP

LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex

ENDLOOP

ENDFORM buscar_field_exit

amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf

DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c

SEARCH p_cf FOR c_bte

IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ELSE

SEARCH p_cf FOR c_bte1

CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ENDIF

IF l_tipo IS NOT INITIAL

PERFORM visualizar_bte USING l_tipol_linea

ELSECALL TRANSACTION FIBFENDIF

ENDFORM fibf

amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT

EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM breakpoint

amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_badi

amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE

i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_bte

amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X TIPO X X c_text_05CF X c_text_04

ENDFORM construir_catalogo_FDEX

amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc

DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

CHECK lt_break[] IS NOT INITIAL

IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix

MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF

IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix

MOVEti_badi-linea TO l_lineti_badi-programa TO l_program

READ TABLE lt_break INTO wa_break

WITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF

IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix

MOVEti_bte-linea TO l_lineti_bte-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF

ENDFORM cargar_break

amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

DATAl_tabix TYPE sy-tabix

l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

SELECT SINGLE FROM d010incWHERE include = p_programa

IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF

MOVEp_linea TO l_linep_programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM asignar_break

amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit

IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF

PERFORM get_objects Get Objects

ENDFORM buscar_user_exit

amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects

DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area

DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix

SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog

IF sy-subrc = 0

SORT ti_tadir BY obj_name devclass

SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass

IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF

- Get UserExit namesLOOP AT ti_jtab

SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E

APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area

l_fname = ti_final-member

CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include

LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP

CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP

ENDFORM get_objects

amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X

ENDFORM construir_catalogo_uexit

amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------

FORM visualizar_ampliacion

DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF

SELECT SINGLE FROM modsapWHERE member EQ l_member

IF sy-subrc IS INITIAL

Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member

ENDIF

ENDFORM visualizar_ampliacion

amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea

RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs

REFRESH r_event r_procs

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event

SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs

SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE

ENDFORM visualizar_bte

amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE

----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c

DATAl_linea(500) TYPE c

DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

MOVE lt_fields-value TO l_linea

PERFORM visualizar_bte USING p_tipol_linea

ENDFORM cargar_bte

amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface

DATAl_linea(500) TYPE c

DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE

InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF

ENDFORM visualizar_interface

amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones

CHECK p_sust IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922

ENDFORM buscar_sustituciones

amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST

ENDFORM construir_catalogo_sust

amp---------------------------------------------------------------------

amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones

ENDFORM TOP_OF_PAGE_SUST

amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4

CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_sust

amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones

CHECK p_val IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931

ENDFORM buscar_validaciones

amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID

ENDFORM construir_catalogo_val

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones

ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2

CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_val

amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto

DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF

SELECT SINGLE FROM modsapWHERE name EQ l_name

IF sy-subrc IS INITIAL

MOVE l_name TO l_member

SELECT SINGLE FROM modactWHERE member EQ l_member

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF

ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF

ENDFORM visualizar_proyecto

amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel

APPEND ti_enh

ENDIFENDIFENDIF

ENDFORM buscar_punto_ampliacioacuten

amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_enh

amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh

DATA l_obj_name TYPE enhobj-obj_name

DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name

CHECK p_enh IS NOT INITIAL

IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF

REFRESH lt_obj_name

LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP

SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name

ENDFORM buscar_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X

ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME

ENDFORM construir_catalogo_enhobj

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENHOBJ

amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM bi_se19

amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro

CLEAR ti_bdcdatati_bdcdata-program = program

ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata

ENDFORM BDC_DYNPRO

amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval

CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata

ENDFORM BDC_FIELD

amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa

DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)

CHECK ti_gb31t[] IS NOT INITIAL

DO

Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2

IF l_exit EQ XEXITENDIF

CHECK l_exit IS INITIAL

Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND

CHECK l_boolpool IS NOT INITIAL

MOVE l_boolpool TO l_repid

Visualizo el programaPERFORM visualizar_linea USING l_repid01

ENDDO

ENDFORM visualizar_programa

amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope

STATICS l_flag TYPE c

DATA l_tit(65) TYPE c

CHECK l_flag IS INITIAL

l_flag = X

WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline

4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM texto_tope

amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf

DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off

CHECK l_off IS NOT INITIAL

ADD 7 TO l_offl_cf = 500 - l_off

SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_enhspotname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1

invalid_object_type = 2OTHERS = 3

ENDFORM bi_se18

amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit

DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE

DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE

MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE

MOVE lt_fields-value TO l_nameENDIF

Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_

LOOP AT lt_tfdir

CLEARl_group l_include l_namespace l_str_area

l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl

IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl

CHECK sy-subrc IS INITIAL

Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP

CHECK l_flag IS INITIAL

La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value

ENDFORM visualizar_fm_exit

amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter

tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten

ENDFORM def_text_parameter

amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones

Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt

Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt

Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt

icon_create RESULT name text infoicon_create

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 25: buscar_ampliaciones FOROSAP

ENDFORM construir_eventos

amp---------------------------------------------------------------------amp Form top_of_pageamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_user_exitWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUser-exit

ENDFORM top_of_page

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_UEXITamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_uexit

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_finalWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incUSER-EXITs TxSMOD

ENDFORM TOP_OF_PAGE_UEXIT

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_FDEXamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_fdex

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_fdexWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incFIELD-EXITs

ENDFORM TOP_OF_PAGE_FDEX

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BADIamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_badi

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_badiWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBADIs

ENDFORM TOP_OF_PAGE_BADI

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BTEamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_bte

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_bteWRITE sy-tfill TO l_tfill_cant

CONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBTEs

ENDFORM TOP_OF_PAGE_BTE

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enh

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_enhWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENH

amp---------------------------------------------------------------------amp Form sortamp--------------------------------------------------------------------- Creo el sort del ALV (FM)---------------------------------------------------------------------- --gtPT_sort Tabla --gtP_tabname Nombre de la tabla----------------------------------------------------------------------FORM sort TABLES pt_sortUSING p_tabname TYPE any

CLEAR pt_sort wa_sortREFRESH pt_sort

CASE p_tabnameWHEN TI_SUST

wa_sort-fieldname = SUBSTIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = SUBSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = CONSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN TI_VAL

wa_sort-fieldname = VALIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = VALSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN TI_ENHOBJ

wa_sort-fieldname = ENHNAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = VERSIONwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN OTHERS

IF p_tabname NE TI_FINAL

wa_sort-fieldname = TIPOwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

IF p_tabname NE TI_FDEX

wa_sort-fieldname = NIVELwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = PROGRAMAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = LINEAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

ENDIF

ELSE

wa_sort-fieldname = NAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = MEMBERwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sortENDIFENDCASE

ENDFORM sort

amp---------------------------------------------------------------------amp Form mostrar_listadoamp--------------------------------------------------------------------- Mostrar listado ALV----------------------------------------------------------------------FORM mostrar_listado

wa_print-reserve_lines = 2

CALL FUNCTION REUSE_ALV_BLOCK_LIST_DISPLAY

EXPORTINGis_print = wa_printEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM mostrar_listado

amp---------------------------------------------------------------------amp Form user_commandamp--------------------------------------------------------------------- Evaluar acciones del usuario----------------------------------------------------------------------FORM user_command USING ucomm LIKE sy-ucommsfields TYPE slis_selfield

DATA l_break TYPE c

Rescatar el registro seleccionadoCASE sfields-tabnameWHEN TI_USER_EXITREAD TABLE ti_user_exit INDEX sfields-tabindexWHEN TI_BADIREAD TABLE ti_badi INDEX sfields-tabindexWHEN TI_BTEREAD TABLE ti_bte INDEX sfields-tabindexWHEN TI_ENHREAD TABLE ti_enh INDEX sfields-tabindexWHEN TI_ENHOBJREAD TABLE ti_enhobj INDEX sfields-tabindexWHEN TI_FDEXREAD TABLE ti_fdex INDEX sfields-tabindexWHEN TI_FINALREAD TABLE ti_final INDEX sfields-tabindexWHEN TI_SUSTREAD TABLE ti_sust INDEX sfields-tabindexWHEN TI_VALREAD TABLE ti_val INDEX sfields-tabindexWHEN TI_CIMPREAD TABLE ti_cimp INDEX sfields-tabindexENDCASE

Seleccion de opcionCASE ucomm DOUBLE CLICKWHEN ampIC1 Evaluar valor de campo seleccionadoCHECK NOT sfields-value IS INITIAL

CASE sfields-tabnameWHEN TI_USER_EXIT USER-EXITIF ti_user_exit-tipo EQ sfields-value(4)SEARCH ti_user_exit-cf FOR c_enhanceCHECK sy-subrc EQ 0PERFORM visualizar_exit USING ti_user_exit-programati_user_exit-cf

ELSEIF ti_user_exit-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_user_exit-programati_user_exit-lineaMOVE X TO l_breakELSEIF ti_user_exit-break EQ sfields-value(4)OR ti_user_exit-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_user_exit-programati_user_exit-lineati_user_exit-breakMOVE X TO l_breakENDIF

WHEN TI_FINAL USER-EXIT Tx CMODIF ti_final-name EQ sfields-valueCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = ti_final-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSEIF ti_final-include EQ sfields-valuePERFORM visualizar_linea USING ti_final-programa1MOVE X TO l_breakENDIF

WHEN TI_BADI BadiIF ti_badi-tipo EQ sfields-value(4)PERFORM visualizar_badi USING ti_badi-cfELSEIF ti_badi-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_badi-programati_badi-lineaMOVE X TO l_breakELSEIF ti_badi-break EQ sfields-value(4)OR ti_badi-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_badi-programati_badi-lineati_badi-breakMOVE X TO l_breakENDIF

WHEN TI_BTE BTEIF ti_bte-tipo EQ sfields-value(4)PERFORM fibf USING ti_bte-cfELSEIF ti_bte-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_bte-programati_bte-lineaMOVE X TO l_breakELSEIF ti_bte-break EQ sfields-value(4)OR ti_bte-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_bte-programati_bte-linea

ti_bte-breakMOVE X TO l_breakENDIF

WHEN TI_ENH Punto de ampliacioacutenIF ti_enh-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_enh-programati_enh-lineaMOVE X TO l_breakELSEIF ti_enh-tipo EQ sfields-value(4)PERFORM bi_se18 USING ti_enh-cfENDIF

WHEN TI_ENHOBJ Punto de ampliacioacutenIF ti_enhobj-enhname EQ sfields-value(30)PERFORM bi_se19 USING ti_enhobj-enhnameENDIF

WHEN TI_SUST SustitucionesIF ti_sust-substid EQ sfields-value(7) ORti_sust-subseqnr EQ sfields-value(3)PERFORM visualizar_sust USING ti_sust-substidti_sust-subseqnrENDIF

WHEN TI_VAL ValidacionesIF ti_val-valid EQ sfields-value(7) ORti_val-valseqnr EQ sfields-value(3)PERFORM visualizar_val USING ti_val-validti_val-valseqnrENDIF

WHEN TI_FDEX Field-exitIF ti_fdex-tipo EQ sfields-valueSUBMIT rsmodprf AND RETURNELSEIF ti_fdex-cf(60) EQ sfields-value Visualizo el field-exitCALL FUNCTION RS_FUNCTION_SHOWEXPORTINGfuncname = ti_fdex-cf

CALL FUNCTION RS_NAVIGATION_MONITORENDIF

WHEN TI_CIMP Customer implementation

CASE sfields-fieldnameWHEN ENHNAMEPERFORM bi_se19 USING ti_cimp-enhnameWHEN ENHINCLUDEPERFORM visualizar_enh_cf USING ti_cimp-enhinclude

WHEN OTHERS DO NOTHING ENDCASE

WHEN OTHERS DO NOTHING ENDCASE

WHEN OTHERS DO NOTHING ENDCASE

IF l_break IS NOT INITIAL AND sfields-tabname NE TI_CIMPWAIT UP TO 1 SECONDSPERFORM cargar_breakENDIFsfields-refresh = X

ENDFORM user_command

amp---------------------------------------------------------------------amp Form visualizar_lineaamp--------------------------------------------------------------------- Visualizo la linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_linea USING p_programa TYPE sy-repidp_linea

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_programaobject_type = c_typeposition = p_lineaEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM visualizar_linea

amp---------------------------------------------------------------------amp Form buscar_exitamp--------------------------------------------------------------------- Buscar USER-EXIT----------------------------------------------------------------------FORM buscar_exit

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN USER-EXITSEARCH ti_programa-cf FOR c_user_exit- SE ENCONTRO UN USER-EXIT Y SE VERIFICA SI LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS PERFORMSEARCH ti_programa-cf FOR c_performCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LAS ASIGNACIONESSEARCH ti_programa-cf FOR c_igualCHECK sy-subrc NE 0

CLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INIacuteCIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF

ENDFORM buscar_exit

amp---------------------------------------------------------------------amp Form buscar_badiamp--------------------------------------------------------------------- Buscar BADI----------------------------------------------------------------------FORM buscar_badi

DATAl_subrc LIKE sy-subrc

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BADISEARCH ti_programa-cf FOR c_badi- SE ENCONTRO UNA BADI Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

SEARCH ti_programa-cf FOR c_includeIF sy-subrc NE 0CLEAR l_subrcSEARCH ti_programa-cf FOR c_methodIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_funcao_2IF sy-subrc NE 0SEARCH ti_programa-cf FOR c_performIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_type_refIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_formMOVE 4 TO l_subrcENDIFENDIFENDIFENDIF

IF l_subrc EQ 0CLEAR ti_badi

- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIFELSECHECK p_handl IS NOT INITIAL- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA INSTANCIA DE- UNA BADISEARCH ti_programa-cf FOR c_handler- SE ENCONTRO UNA INSTANCIA DE IMPLEMENACIOacuteN Y SE VERIFICA SI LA LINEA- NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

SEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0CLEAR ti_badi- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIF

ENDFORM buscar_badi

amp---------------------------------------------------------------------amp Form buscar_bteamp--------------------------------------------------------------------- Buscar BTE----------------------------------------------------------------------FORM buscar_bte

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OPEN_FI_PERFORM

- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endform

CHECK sy-subrc NE 0

CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte1- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OUTBOUND_CALL

- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0

CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF

ENDFORM buscar_bte

amp---------------------------------------------------------------------amp Form repid_f4amp--------------------------------------------------------------------- Ejecuto el F4 para buscar programas----------------------------------------------------------------------FORM repid_f4

CALL FUNCTION REPOSITORY_INFO_SYSTEM_F4EXPORTINGobject_type = PROGobject_name = p_progsuppress_selection = XIMPORTINGobject_name_selected = p_progEXCEPTIONS

cancel = 1wrong_type = 2OTHERS = 3

ENDFORM repid_f4

amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf

DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

SEARCH p_cf FOR 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 INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

READ TABLE lt_cf INDEX 4

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

CHECK sy-subrc IS INITIAL

Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten

textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer

CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4

IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF

WHEN OTHERS Do Nothing ENDCASE

ENDFORM visualizar_badi

amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf

DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

CLEAR d010inc modsap modact

Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid

IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF

SEARCH p_cf FOR c_enhance

CHECK sy-subrc IS INITIAL

REFRESH lt_cf

l_cf = 500 - sy-fdpos

MOVE p_cf+sy-fdpos(l_cf) TO l_linea

SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3

TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS

Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _

Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit

CHECK sy-subrc IS INITIAL

Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM

modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3

ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname

CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ENDIF

ENDFORM visualizar_exit

amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit

DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo

DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe

DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE

CHECK p_fdex IS NOT INITIAL

CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe

MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex

IF p_prog IS NOT INITIAL

MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF

Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog

LOOP AT lt_d020s

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

REFRESH lt_d021s

Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4

Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X

SEARCH lt_d021s-fnam FOR -

IF sy-subrc IS INITIAL

MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum

Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname

APPEND lt_campo

ENDIF

ENDLOOPENDLOOP

CHECK lt_campo[] IS NOT INITIAL

SORT lt_campo BY repid dnum tabname fieldname

DELETE ADJACENT DUPLICATES FROM lt_campo

Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname

SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l

LOOP AT lt_dd03l

CLEAR tddir tddirs

SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname

CHECK sy-subrc IS INITIAL

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog

CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF

Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf

IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF

READ TABLE lt_fe WITH KEY cf = lt_fe-cf

CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP

LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex

ENDLOOP

ENDFORM buscar_field_exit

amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf

DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c

SEARCH p_cf FOR c_bte

IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ELSE

SEARCH p_cf FOR c_bte1

CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ENDIF

IF l_tipo IS NOT INITIAL

PERFORM visualizar_bte USING l_tipol_linea

ELSECALL TRANSACTION FIBFENDIF

ENDFORM fibf

amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT

EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM breakpoint

amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_badi

amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE

i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_bte

amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X TIPO X X c_text_05CF X c_text_04

ENDFORM construir_catalogo_FDEX

amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc

DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

CHECK lt_break[] IS NOT INITIAL

IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix

MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF

IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix

MOVEti_badi-linea TO l_lineti_badi-programa TO l_program

READ TABLE lt_break INTO wa_break

WITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF

IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix

MOVEti_bte-linea TO l_lineti_bte-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF

ENDFORM cargar_break

amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

DATAl_tabix TYPE sy-tabix

l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

SELECT SINGLE FROM d010incWHERE include = p_programa

IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF

MOVEp_linea TO l_linep_programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM asignar_break

amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit

IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF

PERFORM get_objects Get Objects

ENDFORM buscar_user_exit

amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects

DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area

DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix

SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog

IF sy-subrc = 0

SORT ti_tadir BY obj_name devclass

SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass

IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF

- Get UserExit namesLOOP AT ti_jtab

SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E

APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area

l_fname = ti_final-member

CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include

LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP

CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP

ENDFORM get_objects

amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X

ENDFORM construir_catalogo_uexit

amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------

FORM visualizar_ampliacion

DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF

SELECT SINGLE FROM modsapWHERE member EQ l_member

IF sy-subrc IS INITIAL

Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member

ENDIF

ENDFORM visualizar_ampliacion

amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea

RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs

REFRESH r_event r_procs

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event

SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs

SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE

ENDFORM visualizar_bte

amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE

----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c

DATAl_linea(500) TYPE c

DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

MOVE lt_fields-value TO l_linea

PERFORM visualizar_bte USING p_tipol_linea

ENDFORM cargar_bte

amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface

DATAl_linea(500) TYPE c

DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE

InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF

ENDFORM visualizar_interface

amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones

CHECK p_sust IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922

ENDFORM buscar_sustituciones

amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST

ENDFORM construir_catalogo_sust

amp---------------------------------------------------------------------

amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones

ENDFORM TOP_OF_PAGE_SUST

amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4

CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_sust

amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones

CHECK p_val IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931

ENDFORM buscar_validaciones

amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID

ENDFORM construir_catalogo_val

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones

ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2

CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_val

amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto

DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF

SELECT SINGLE FROM modsapWHERE name EQ l_name

IF sy-subrc IS INITIAL

MOVE l_name TO l_member

SELECT SINGLE FROM modactWHERE member EQ l_member

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF

ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF

ENDFORM visualizar_proyecto

amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel

APPEND ti_enh

ENDIFENDIFENDIF

ENDFORM buscar_punto_ampliacioacuten

amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_enh

amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh

DATA l_obj_name TYPE enhobj-obj_name

DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name

CHECK p_enh IS NOT INITIAL

IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF

REFRESH lt_obj_name

LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP

SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name

ENDFORM buscar_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X

ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME

ENDFORM construir_catalogo_enhobj

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENHOBJ

amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM bi_se19

amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro

CLEAR ti_bdcdatati_bdcdata-program = program

ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata

ENDFORM BDC_DYNPRO

amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval

CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata

ENDFORM BDC_FIELD

amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa

DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)

CHECK ti_gb31t[] IS NOT INITIAL

DO

Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2

IF l_exit EQ XEXITENDIF

CHECK l_exit IS INITIAL

Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND

CHECK l_boolpool IS NOT INITIAL

MOVE l_boolpool TO l_repid

Visualizo el programaPERFORM visualizar_linea USING l_repid01

ENDDO

ENDFORM visualizar_programa

amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope

STATICS l_flag TYPE c

DATA l_tit(65) TYPE c

CHECK l_flag IS INITIAL

l_flag = X

WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline

4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM texto_tope

amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf

DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off

CHECK l_off IS NOT INITIAL

ADD 7 TO l_offl_cf = 500 - l_off

SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_enhspotname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1

invalid_object_type = 2OTHERS = 3

ENDFORM bi_se18

amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit

DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE

DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE

MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE

MOVE lt_fields-value TO l_nameENDIF

Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_

LOOP AT lt_tfdir

CLEARl_group l_include l_namespace l_str_area

l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl

IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl

CHECK sy-subrc IS INITIAL

Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP

CHECK l_flag IS INITIAL

La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value

ENDFORM visualizar_fm_exit

amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter

tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten

ENDFORM def_text_parameter

amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones

Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt

Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt

Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt

icon_create RESULT name text infoicon_create

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 26: buscar_ampliaciones FOROSAP

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_fdexWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incFIELD-EXITs

ENDFORM TOP_OF_PAGE_FDEX

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BADIamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_badi

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_badiWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBADIs

ENDFORM TOP_OF_PAGE_BADI

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_BTEamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_bte

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_bteWRITE sy-tfill TO l_tfill_cant

CONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBTEs

ENDFORM TOP_OF_PAGE_BTE

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enh

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_enhWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENH

amp---------------------------------------------------------------------amp Form sortamp--------------------------------------------------------------------- Creo el sort del ALV (FM)---------------------------------------------------------------------- --gtPT_sort Tabla --gtP_tabname Nombre de la tabla----------------------------------------------------------------------FORM sort TABLES pt_sortUSING p_tabname TYPE any

CLEAR pt_sort wa_sortREFRESH pt_sort

CASE p_tabnameWHEN TI_SUST

wa_sort-fieldname = SUBSTIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = SUBSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = CONSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN TI_VAL

wa_sort-fieldname = VALIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = VALSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN TI_ENHOBJ

wa_sort-fieldname = ENHNAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = VERSIONwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN OTHERS

IF p_tabname NE TI_FINAL

wa_sort-fieldname = TIPOwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

IF p_tabname NE TI_FDEX

wa_sort-fieldname = NIVELwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = PROGRAMAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = LINEAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

ENDIF

ELSE

wa_sort-fieldname = NAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = MEMBERwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sortENDIFENDCASE

ENDFORM sort

amp---------------------------------------------------------------------amp Form mostrar_listadoamp--------------------------------------------------------------------- Mostrar listado ALV----------------------------------------------------------------------FORM mostrar_listado

wa_print-reserve_lines = 2

CALL FUNCTION REUSE_ALV_BLOCK_LIST_DISPLAY

EXPORTINGis_print = wa_printEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM mostrar_listado

amp---------------------------------------------------------------------amp Form user_commandamp--------------------------------------------------------------------- Evaluar acciones del usuario----------------------------------------------------------------------FORM user_command USING ucomm LIKE sy-ucommsfields TYPE slis_selfield

DATA l_break TYPE c

Rescatar el registro seleccionadoCASE sfields-tabnameWHEN TI_USER_EXITREAD TABLE ti_user_exit INDEX sfields-tabindexWHEN TI_BADIREAD TABLE ti_badi INDEX sfields-tabindexWHEN TI_BTEREAD TABLE ti_bte INDEX sfields-tabindexWHEN TI_ENHREAD TABLE ti_enh INDEX sfields-tabindexWHEN TI_ENHOBJREAD TABLE ti_enhobj INDEX sfields-tabindexWHEN TI_FDEXREAD TABLE ti_fdex INDEX sfields-tabindexWHEN TI_FINALREAD TABLE ti_final INDEX sfields-tabindexWHEN TI_SUSTREAD TABLE ti_sust INDEX sfields-tabindexWHEN TI_VALREAD TABLE ti_val INDEX sfields-tabindexWHEN TI_CIMPREAD TABLE ti_cimp INDEX sfields-tabindexENDCASE

Seleccion de opcionCASE ucomm DOUBLE CLICKWHEN ampIC1 Evaluar valor de campo seleccionadoCHECK NOT sfields-value IS INITIAL

CASE sfields-tabnameWHEN TI_USER_EXIT USER-EXITIF ti_user_exit-tipo EQ sfields-value(4)SEARCH ti_user_exit-cf FOR c_enhanceCHECK sy-subrc EQ 0PERFORM visualizar_exit USING ti_user_exit-programati_user_exit-cf

ELSEIF ti_user_exit-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_user_exit-programati_user_exit-lineaMOVE X TO l_breakELSEIF ti_user_exit-break EQ sfields-value(4)OR ti_user_exit-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_user_exit-programati_user_exit-lineati_user_exit-breakMOVE X TO l_breakENDIF

WHEN TI_FINAL USER-EXIT Tx CMODIF ti_final-name EQ sfields-valueCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = ti_final-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSEIF ti_final-include EQ sfields-valuePERFORM visualizar_linea USING ti_final-programa1MOVE X TO l_breakENDIF

WHEN TI_BADI BadiIF ti_badi-tipo EQ sfields-value(4)PERFORM visualizar_badi USING ti_badi-cfELSEIF ti_badi-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_badi-programati_badi-lineaMOVE X TO l_breakELSEIF ti_badi-break EQ sfields-value(4)OR ti_badi-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_badi-programati_badi-lineati_badi-breakMOVE X TO l_breakENDIF

WHEN TI_BTE BTEIF ti_bte-tipo EQ sfields-value(4)PERFORM fibf USING ti_bte-cfELSEIF ti_bte-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_bte-programati_bte-lineaMOVE X TO l_breakELSEIF ti_bte-break EQ sfields-value(4)OR ti_bte-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_bte-programati_bte-linea

ti_bte-breakMOVE X TO l_breakENDIF

WHEN TI_ENH Punto de ampliacioacutenIF ti_enh-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_enh-programati_enh-lineaMOVE X TO l_breakELSEIF ti_enh-tipo EQ sfields-value(4)PERFORM bi_se18 USING ti_enh-cfENDIF

WHEN TI_ENHOBJ Punto de ampliacioacutenIF ti_enhobj-enhname EQ sfields-value(30)PERFORM bi_se19 USING ti_enhobj-enhnameENDIF

WHEN TI_SUST SustitucionesIF ti_sust-substid EQ sfields-value(7) ORti_sust-subseqnr EQ sfields-value(3)PERFORM visualizar_sust USING ti_sust-substidti_sust-subseqnrENDIF

WHEN TI_VAL ValidacionesIF ti_val-valid EQ sfields-value(7) ORti_val-valseqnr EQ sfields-value(3)PERFORM visualizar_val USING ti_val-validti_val-valseqnrENDIF

WHEN TI_FDEX Field-exitIF ti_fdex-tipo EQ sfields-valueSUBMIT rsmodprf AND RETURNELSEIF ti_fdex-cf(60) EQ sfields-value Visualizo el field-exitCALL FUNCTION RS_FUNCTION_SHOWEXPORTINGfuncname = ti_fdex-cf

CALL FUNCTION RS_NAVIGATION_MONITORENDIF

WHEN TI_CIMP Customer implementation

CASE sfields-fieldnameWHEN ENHNAMEPERFORM bi_se19 USING ti_cimp-enhnameWHEN ENHINCLUDEPERFORM visualizar_enh_cf USING ti_cimp-enhinclude

WHEN OTHERS DO NOTHING ENDCASE

WHEN OTHERS DO NOTHING ENDCASE

WHEN OTHERS DO NOTHING ENDCASE

IF l_break IS NOT INITIAL AND sfields-tabname NE TI_CIMPWAIT UP TO 1 SECONDSPERFORM cargar_breakENDIFsfields-refresh = X

ENDFORM user_command

amp---------------------------------------------------------------------amp Form visualizar_lineaamp--------------------------------------------------------------------- Visualizo la linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_linea USING p_programa TYPE sy-repidp_linea

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_programaobject_type = c_typeposition = p_lineaEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM visualizar_linea

amp---------------------------------------------------------------------amp Form buscar_exitamp--------------------------------------------------------------------- Buscar USER-EXIT----------------------------------------------------------------------FORM buscar_exit

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN USER-EXITSEARCH ti_programa-cf FOR c_user_exit- SE ENCONTRO UN USER-EXIT Y SE VERIFICA SI LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS PERFORMSEARCH ti_programa-cf FOR c_performCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LAS ASIGNACIONESSEARCH ti_programa-cf FOR c_igualCHECK sy-subrc NE 0

CLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INIacuteCIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF

ENDFORM buscar_exit

amp---------------------------------------------------------------------amp Form buscar_badiamp--------------------------------------------------------------------- Buscar BADI----------------------------------------------------------------------FORM buscar_badi

DATAl_subrc LIKE sy-subrc

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BADISEARCH ti_programa-cf FOR c_badi- SE ENCONTRO UNA BADI Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

SEARCH ti_programa-cf FOR c_includeIF sy-subrc NE 0CLEAR l_subrcSEARCH ti_programa-cf FOR c_methodIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_funcao_2IF sy-subrc NE 0SEARCH ti_programa-cf FOR c_performIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_type_refIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_formMOVE 4 TO l_subrcENDIFENDIFENDIFENDIF

IF l_subrc EQ 0CLEAR ti_badi

- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIFELSECHECK p_handl IS NOT INITIAL- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA INSTANCIA DE- UNA BADISEARCH ti_programa-cf FOR c_handler- SE ENCONTRO UNA INSTANCIA DE IMPLEMENACIOacuteN Y SE VERIFICA SI LA LINEA- NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

SEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0CLEAR ti_badi- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIF

ENDFORM buscar_badi

amp---------------------------------------------------------------------amp Form buscar_bteamp--------------------------------------------------------------------- Buscar BTE----------------------------------------------------------------------FORM buscar_bte

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OPEN_FI_PERFORM

- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endform

CHECK sy-subrc NE 0

CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte1- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OUTBOUND_CALL

- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0

CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF

ENDFORM buscar_bte

amp---------------------------------------------------------------------amp Form repid_f4amp--------------------------------------------------------------------- Ejecuto el F4 para buscar programas----------------------------------------------------------------------FORM repid_f4

CALL FUNCTION REPOSITORY_INFO_SYSTEM_F4EXPORTINGobject_type = PROGobject_name = p_progsuppress_selection = XIMPORTINGobject_name_selected = p_progEXCEPTIONS

cancel = 1wrong_type = 2OTHERS = 3

ENDFORM repid_f4

amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf

DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

SEARCH p_cf FOR 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 INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

READ TABLE lt_cf INDEX 4

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

CHECK sy-subrc IS INITIAL

Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten

textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer

CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4

IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF

WHEN OTHERS Do Nothing ENDCASE

ENDFORM visualizar_badi

amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf

DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

CLEAR d010inc modsap modact

Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid

IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF

SEARCH p_cf FOR c_enhance

CHECK sy-subrc IS INITIAL

REFRESH lt_cf

l_cf = 500 - sy-fdpos

MOVE p_cf+sy-fdpos(l_cf) TO l_linea

SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3

TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS

Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _

Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit

CHECK sy-subrc IS INITIAL

Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM

modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3

ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname

CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ENDIF

ENDFORM visualizar_exit

amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit

DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo

DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe

DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE

CHECK p_fdex IS NOT INITIAL

CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe

MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex

IF p_prog IS NOT INITIAL

MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF

Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog

LOOP AT lt_d020s

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

REFRESH lt_d021s

Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4

Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X

SEARCH lt_d021s-fnam FOR -

IF sy-subrc IS INITIAL

MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum

Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname

APPEND lt_campo

ENDIF

ENDLOOPENDLOOP

CHECK lt_campo[] IS NOT INITIAL

SORT lt_campo BY repid dnum tabname fieldname

DELETE ADJACENT DUPLICATES FROM lt_campo

Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname

SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l

LOOP AT lt_dd03l

CLEAR tddir tddirs

SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname

CHECK sy-subrc IS INITIAL

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog

CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF

Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf

IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF

READ TABLE lt_fe WITH KEY cf = lt_fe-cf

CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP

LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex

ENDLOOP

ENDFORM buscar_field_exit

amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf

DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c

SEARCH p_cf FOR c_bte

IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ELSE

SEARCH p_cf FOR c_bte1

CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ENDIF

IF l_tipo IS NOT INITIAL

PERFORM visualizar_bte USING l_tipol_linea

ELSECALL TRANSACTION FIBFENDIF

ENDFORM fibf

amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT

EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM breakpoint

amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_badi

amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE

i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_bte

amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X TIPO X X c_text_05CF X c_text_04

ENDFORM construir_catalogo_FDEX

amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc

DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

CHECK lt_break[] IS NOT INITIAL

IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix

MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF

IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix

MOVEti_badi-linea TO l_lineti_badi-programa TO l_program

READ TABLE lt_break INTO wa_break

WITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF

IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix

MOVEti_bte-linea TO l_lineti_bte-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF

ENDFORM cargar_break

amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

DATAl_tabix TYPE sy-tabix

l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

SELECT SINGLE FROM d010incWHERE include = p_programa

IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF

MOVEp_linea TO l_linep_programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM asignar_break

amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit

IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF

PERFORM get_objects Get Objects

ENDFORM buscar_user_exit

amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects

DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area

DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix

SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog

IF sy-subrc = 0

SORT ti_tadir BY obj_name devclass

SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass

IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF

- Get UserExit namesLOOP AT ti_jtab

SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E

APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area

l_fname = ti_final-member

CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include

LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP

CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP

ENDFORM get_objects

amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X

ENDFORM construir_catalogo_uexit

amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------

FORM visualizar_ampliacion

DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF

SELECT SINGLE FROM modsapWHERE member EQ l_member

IF sy-subrc IS INITIAL

Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member

ENDIF

ENDFORM visualizar_ampliacion

amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea

RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs

REFRESH r_event r_procs

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event

SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs

SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE

ENDFORM visualizar_bte

amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE

----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c

DATAl_linea(500) TYPE c

DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

MOVE lt_fields-value TO l_linea

PERFORM visualizar_bte USING p_tipol_linea

ENDFORM cargar_bte

amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface

DATAl_linea(500) TYPE c

DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE

InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF

ENDFORM visualizar_interface

amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones

CHECK p_sust IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922

ENDFORM buscar_sustituciones

amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST

ENDFORM construir_catalogo_sust

amp---------------------------------------------------------------------

amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones

ENDFORM TOP_OF_PAGE_SUST

amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4

CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_sust

amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones

CHECK p_val IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931

ENDFORM buscar_validaciones

amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID

ENDFORM construir_catalogo_val

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones

ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2

CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_val

amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto

DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF

SELECT SINGLE FROM modsapWHERE name EQ l_name

IF sy-subrc IS INITIAL

MOVE l_name TO l_member

SELECT SINGLE FROM modactWHERE member EQ l_member

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF

ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF

ENDFORM visualizar_proyecto

amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel

APPEND ti_enh

ENDIFENDIFENDIF

ENDFORM buscar_punto_ampliacioacuten

amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_enh

amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh

DATA l_obj_name TYPE enhobj-obj_name

DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name

CHECK p_enh IS NOT INITIAL

IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF

REFRESH lt_obj_name

LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP

SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name

ENDFORM buscar_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X

ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME

ENDFORM construir_catalogo_enhobj

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENHOBJ

amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM bi_se19

amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro

CLEAR ti_bdcdatati_bdcdata-program = program

ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata

ENDFORM BDC_DYNPRO

amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval

CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata

ENDFORM BDC_FIELD

amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa

DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)

CHECK ti_gb31t[] IS NOT INITIAL

DO

Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2

IF l_exit EQ XEXITENDIF

CHECK l_exit IS INITIAL

Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND

CHECK l_boolpool IS NOT INITIAL

MOVE l_boolpool TO l_repid

Visualizo el programaPERFORM visualizar_linea USING l_repid01

ENDDO

ENDFORM visualizar_programa

amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope

STATICS l_flag TYPE c

DATA l_tit(65) TYPE c

CHECK l_flag IS INITIAL

l_flag = X

WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline

4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM texto_tope

amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf

DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off

CHECK l_off IS NOT INITIAL

ADD 7 TO l_offl_cf = 500 - l_off

SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_enhspotname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1

invalid_object_type = 2OTHERS = 3

ENDFORM bi_se18

amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit

DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE

DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE

MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE

MOVE lt_fields-value TO l_nameENDIF

Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_

LOOP AT lt_tfdir

CLEARl_group l_include l_namespace l_str_area

l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl

IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl

CHECK sy-subrc IS INITIAL

Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP

CHECK l_flag IS INITIAL

La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value

ENDFORM visualizar_fm_exit

amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter

tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten

ENDFORM def_text_parameter

amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones

Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt

Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt

Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt

icon_create RESULT name text infoicon_create

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 27: buscar_ampliaciones FOROSAP

CONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incBTEs

ENDFORM TOP_OF_PAGE_BTE

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enh

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_includesWRITE sy-tfill TO l_tfill_incCONDENSE l_tfill_inc NO-GAPS

DESCRIBE TABLE ti_enhWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENH

amp---------------------------------------------------------------------amp Form sortamp--------------------------------------------------------------------- Creo el sort del ALV (FM)---------------------------------------------------------------------- --gtPT_sort Tabla --gtP_tabname Nombre de la tabla----------------------------------------------------------------------FORM sort TABLES pt_sortUSING p_tabname TYPE any

CLEAR pt_sort wa_sortREFRESH pt_sort

CASE p_tabnameWHEN TI_SUST

wa_sort-fieldname = SUBSTIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = SUBSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = CONSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN TI_VAL

wa_sort-fieldname = VALIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = VALSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN TI_ENHOBJ

wa_sort-fieldname = ENHNAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = VERSIONwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN OTHERS

IF p_tabname NE TI_FINAL

wa_sort-fieldname = TIPOwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

IF p_tabname NE TI_FDEX

wa_sort-fieldname = NIVELwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = PROGRAMAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = LINEAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

ENDIF

ELSE

wa_sort-fieldname = NAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = MEMBERwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sortENDIFENDCASE

ENDFORM sort

amp---------------------------------------------------------------------amp Form mostrar_listadoamp--------------------------------------------------------------------- Mostrar listado ALV----------------------------------------------------------------------FORM mostrar_listado

wa_print-reserve_lines = 2

CALL FUNCTION REUSE_ALV_BLOCK_LIST_DISPLAY

EXPORTINGis_print = wa_printEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM mostrar_listado

amp---------------------------------------------------------------------amp Form user_commandamp--------------------------------------------------------------------- Evaluar acciones del usuario----------------------------------------------------------------------FORM user_command USING ucomm LIKE sy-ucommsfields TYPE slis_selfield

DATA l_break TYPE c

Rescatar el registro seleccionadoCASE sfields-tabnameWHEN TI_USER_EXITREAD TABLE ti_user_exit INDEX sfields-tabindexWHEN TI_BADIREAD TABLE ti_badi INDEX sfields-tabindexWHEN TI_BTEREAD TABLE ti_bte INDEX sfields-tabindexWHEN TI_ENHREAD TABLE ti_enh INDEX sfields-tabindexWHEN TI_ENHOBJREAD TABLE ti_enhobj INDEX sfields-tabindexWHEN TI_FDEXREAD TABLE ti_fdex INDEX sfields-tabindexWHEN TI_FINALREAD TABLE ti_final INDEX sfields-tabindexWHEN TI_SUSTREAD TABLE ti_sust INDEX sfields-tabindexWHEN TI_VALREAD TABLE ti_val INDEX sfields-tabindexWHEN TI_CIMPREAD TABLE ti_cimp INDEX sfields-tabindexENDCASE

Seleccion de opcionCASE ucomm DOUBLE CLICKWHEN ampIC1 Evaluar valor de campo seleccionadoCHECK NOT sfields-value IS INITIAL

CASE sfields-tabnameWHEN TI_USER_EXIT USER-EXITIF ti_user_exit-tipo EQ sfields-value(4)SEARCH ti_user_exit-cf FOR c_enhanceCHECK sy-subrc EQ 0PERFORM visualizar_exit USING ti_user_exit-programati_user_exit-cf

ELSEIF ti_user_exit-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_user_exit-programati_user_exit-lineaMOVE X TO l_breakELSEIF ti_user_exit-break EQ sfields-value(4)OR ti_user_exit-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_user_exit-programati_user_exit-lineati_user_exit-breakMOVE X TO l_breakENDIF

WHEN TI_FINAL USER-EXIT Tx CMODIF ti_final-name EQ sfields-valueCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = ti_final-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSEIF ti_final-include EQ sfields-valuePERFORM visualizar_linea USING ti_final-programa1MOVE X TO l_breakENDIF

WHEN TI_BADI BadiIF ti_badi-tipo EQ sfields-value(4)PERFORM visualizar_badi USING ti_badi-cfELSEIF ti_badi-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_badi-programati_badi-lineaMOVE X TO l_breakELSEIF ti_badi-break EQ sfields-value(4)OR ti_badi-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_badi-programati_badi-lineati_badi-breakMOVE X TO l_breakENDIF

WHEN TI_BTE BTEIF ti_bte-tipo EQ sfields-value(4)PERFORM fibf USING ti_bte-cfELSEIF ti_bte-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_bte-programati_bte-lineaMOVE X TO l_breakELSEIF ti_bte-break EQ sfields-value(4)OR ti_bte-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_bte-programati_bte-linea

ti_bte-breakMOVE X TO l_breakENDIF

WHEN TI_ENH Punto de ampliacioacutenIF ti_enh-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_enh-programati_enh-lineaMOVE X TO l_breakELSEIF ti_enh-tipo EQ sfields-value(4)PERFORM bi_se18 USING ti_enh-cfENDIF

WHEN TI_ENHOBJ Punto de ampliacioacutenIF ti_enhobj-enhname EQ sfields-value(30)PERFORM bi_se19 USING ti_enhobj-enhnameENDIF

WHEN TI_SUST SustitucionesIF ti_sust-substid EQ sfields-value(7) ORti_sust-subseqnr EQ sfields-value(3)PERFORM visualizar_sust USING ti_sust-substidti_sust-subseqnrENDIF

WHEN TI_VAL ValidacionesIF ti_val-valid EQ sfields-value(7) ORti_val-valseqnr EQ sfields-value(3)PERFORM visualizar_val USING ti_val-validti_val-valseqnrENDIF

WHEN TI_FDEX Field-exitIF ti_fdex-tipo EQ sfields-valueSUBMIT rsmodprf AND RETURNELSEIF ti_fdex-cf(60) EQ sfields-value Visualizo el field-exitCALL FUNCTION RS_FUNCTION_SHOWEXPORTINGfuncname = ti_fdex-cf

CALL FUNCTION RS_NAVIGATION_MONITORENDIF

WHEN TI_CIMP Customer implementation

CASE sfields-fieldnameWHEN ENHNAMEPERFORM bi_se19 USING ti_cimp-enhnameWHEN ENHINCLUDEPERFORM visualizar_enh_cf USING ti_cimp-enhinclude

WHEN OTHERS DO NOTHING ENDCASE

WHEN OTHERS DO NOTHING ENDCASE

WHEN OTHERS DO NOTHING ENDCASE

IF l_break IS NOT INITIAL AND sfields-tabname NE TI_CIMPWAIT UP TO 1 SECONDSPERFORM cargar_breakENDIFsfields-refresh = X

ENDFORM user_command

amp---------------------------------------------------------------------amp Form visualizar_lineaamp--------------------------------------------------------------------- Visualizo la linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_linea USING p_programa TYPE sy-repidp_linea

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_programaobject_type = c_typeposition = p_lineaEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM visualizar_linea

amp---------------------------------------------------------------------amp Form buscar_exitamp--------------------------------------------------------------------- Buscar USER-EXIT----------------------------------------------------------------------FORM buscar_exit

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN USER-EXITSEARCH ti_programa-cf FOR c_user_exit- SE ENCONTRO UN USER-EXIT Y SE VERIFICA SI LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS PERFORMSEARCH ti_programa-cf FOR c_performCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LAS ASIGNACIONESSEARCH ti_programa-cf FOR c_igualCHECK sy-subrc NE 0

CLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INIacuteCIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF

ENDFORM buscar_exit

amp---------------------------------------------------------------------amp Form buscar_badiamp--------------------------------------------------------------------- Buscar BADI----------------------------------------------------------------------FORM buscar_badi

DATAl_subrc LIKE sy-subrc

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BADISEARCH ti_programa-cf FOR c_badi- SE ENCONTRO UNA BADI Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

SEARCH ti_programa-cf FOR c_includeIF sy-subrc NE 0CLEAR l_subrcSEARCH ti_programa-cf FOR c_methodIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_funcao_2IF sy-subrc NE 0SEARCH ti_programa-cf FOR c_performIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_type_refIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_formMOVE 4 TO l_subrcENDIFENDIFENDIFENDIF

IF l_subrc EQ 0CLEAR ti_badi

- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIFELSECHECK p_handl IS NOT INITIAL- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA INSTANCIA DE- UNA BADISEARCH ti_programa-cf FOR c_handler- SE ENCONTRO UNA INSTANCIA DE IMPLEMENACIOacuteN Y SE VERIFICA SI LA LINEA- NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

SEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0CLEAR ti_badi- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIF

ENDFORM buscar_badi

amp---------------------------------------------------------------------amp Form buscar_bteamp--------------------------------------------------------------------- Buscar BTE----------------------------------------------------------------------FORM buscar_bte

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OPEN_FI_PERFORM

- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endform

CHECK sy-subrc NE 0

CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte1- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OUTBOUND_CALL

- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0

CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF

ENDFORM buscar_bte

amp---------------------------------------------------------------------amp Form repid_f4amp--------------------------------------------------------------------- Ejecuto el F4 para buscar programas----------------------------------------------------------------------FORM repid_f4

CALL FUNCTION REPOSITORY_INFO_SYSTEM_F4EXPORTINGobject_type = PROGobject_name = p_progsuppress_selection = XIMPORTINGobject_name_selected = p_progEXCEPTIONS

cancel = 1wrong_type = 2OTHERS = 3

ENDFORM repid_f4

amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf

DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

SEARCH p_cf FOR 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 INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

READ TABLE lt_cf INDEX 4

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

CHECK sy-subrc IS INITIAL

Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten

textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer

CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4

IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF

WHEN OTHERS Do Nothing ENDCASE

ENDFORM visualizar_badi

amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf

DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

CLEAR d010inc modsap modact

Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid

IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF

SEARCH p_cf FOR c_enhance

CHECK sy-subrc IS INITIAL

REFRESH lt_cf

l_cf = 500 - sy-fdpos

MOVE p_cf+sy-fdpos(l_cf) TO l_linea

SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3

TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS

Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _

Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit

CHECK sy-subrc IS INITIAL

Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM

modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3

ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname

CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ENDIF

ENDFORM visualizar_exit

amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit

DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo

DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe

DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE

CHECK p_fdex IS NOT INITIAL

CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe

MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex

IF p_prog IS NOT INITIAL

MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF

Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog

LOOP AT lt_d020s

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

REFRESH lt_d021s

Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4

Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X

SEARCH lt_d021s-fnam FOR -

IF sy-subrc IS INITIAL

MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum

Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname

APPEND lt_campo

ENDIF

ENDLOOPENDLOOP

CHECK lt_campo[] IS NOT INITIAL

SORT lt_campo BY repid dnum tabname fieldname

DELETE ADJACENT DUPLICATES FROM lt_campo

Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname

SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l

LOOP AT lt_dd03l

CLEAR tddir tddirs

SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname

CHECK sy-subrc IS INITIAL

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog

CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF

Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf

IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF

READ TABLE lt_fe WITH KEY cf = lt_fe-cf

CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP

LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex

ENDLOOP

ENDFORM buscar_field_exit

amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf

DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c

SEARCH p_cf FOR c_bte

IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ELSE

SEARCH p_cf FOR c_bte1

CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ENDIF

IF l_tipo IS NOT INITIAL

PERFORM visualizar_bte USING l_tipol_linea

ELSECALL TRANSACTION FIBFENDIF

ENDFORM fibf

amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT

EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM breakpoint

amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_badi

amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE

i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_bte

amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X TIPO X X c_text_05CF X c_text_04

ENDFORM construir_catalogo_FDEX

amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc

DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

CHECK lt_break[] IS NOT INITIAL

IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix

MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF

IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix

MOVEti_badi-linea TO l_lineti_badi-programa TO l_program

READ TABLE lt_break INTO wa_break

WITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF

IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix

MOVEti_bte-linea TO l_lineti_bte-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF

ENDFORM cargar_break

amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

DATAl_tabix TYPE sy-tabix

l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

SELECT SINGLE FROM d010incWHERE include = p_programa

IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF

MOVEp_linea TO l_linep_programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM asignar_break

amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit

IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF

PERFORM get_objects Get Objects

ENDFORM buscar_user_exit

amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects

DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area

DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix

SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog

IF sy-subrc = 0

SORT ti_tadir BY obj_name devclass

SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass

IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF

- Get UserExit namesLOOP AT ti_jtab

SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E

APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area

l_fname = ti_final-member

CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include

LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP

CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP

ENDFORM get_objects

amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X

ENDFORM construir_catalogo_uexit

amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------

FORM visualizar_ampliacion

DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF

SELECT SINGLE FROM modsapWHERE member EQ l_member

IF sy-subrc IS INITIAL

Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member

ENDIF

ENDFORM visualizar_ampliacion

amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea

RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs

REFRESH r_event r_procs

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event

SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs

SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE

ENDFORM visualizar_bte

amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE

----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c

DATAl_linea(500) TYPE c

DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

MOVE lt_fields-value TO l_linea

PERFORM visualizar_bte USING p_tipol_linea

ENDFORM cargar_bte

amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface

DATAl_linea(500) TYPE c

DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE

InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF

ENDFORM visualizar_interface

amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones

CHECK p_sust IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922

ENDFORM buscar_sustituciones

amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST

ENDFORM construir_catalogo_sust

amp---------------------------------------------------------------------

amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones

ENDFORM TOP_OF_PAGE_SUST

amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4

CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_sust

amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones

CHECK p_val IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931

ENDFORM buscar_validaciones

amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID

ENDFORM construir_catalogo_val

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones

ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2

CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_val

amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto

DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF

SELECT SINGLE FROM modsapWHERE name EQ l_name

IF sy-subrc IS INITIAL

MOVE l_name TO l_member

SELECT SINGLE FROM modactWHERE member EQ l_member

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF

ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF

ENDFORM visualizar_proyecto

amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel

APPEND ti_enh

ENDIFENDIFENDIF

ENDFORM buscar_punto_ampliacioacuten

amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_enh

amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh

DATA l_obj_name TYPE enhobj-obj_name

DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name

CHECK p_enh IS NOT INITIAL

IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF

REFRESH lt_obj_name

LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP

SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name

ENDFORM buscar_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X

ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME

ENDFORM construir_catalogo_enhobj

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENHOBJ

amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM bi_se19

amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro

CLEAR ti_bdcdatati_bdcdata-program = program

ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata

ENDFORM BDC_DYNPRO

amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval

CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata

ENDFORM BDC_FIELD

amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa

DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)

CHECK ti_gb31t[] IS NOT INITIAL

DO

Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2

IF l_exit EQ XEXITENDIF

CHECK l_exit IS INITIAL

Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND

CHECK l_boolpool IS NOT INITIAL

MOVE l_boolpool TO l_repid

Visualizo el programaPERFORM visualizar_linea USING l_repid01

ENDDO

ENDFORM visualizar_programa

amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope

STATICS l_flag TYPE c

DATA l_tit(65) TYPE c

CHECK l_flag IS INITIAL

l_flag = X

WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline

4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM texto_tope

amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf

DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off

CHECK l_off IS NOT INITIAL

ADD 7 TO l_offl_cf = 500 - l_off

SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_enhspotname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1

invalid_object_type = 2OTHERS = 3

ENDFORM bi_se18

amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit

DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE

DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE

MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE

MOVE lt_fields-value TO l_nameENDIF

Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_

LOOP AT lt_tfdir

CLEARl_group l_include l_namespace l_str_area

l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl

IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl

CHECK sy-subrc IS INITIAL

Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP

CHECK l_flag IS INITIAL

La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value

ENDFORM visualizar_fm_exit

amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter

tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten

ENDFORM def_text_parameter

amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones

Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt

Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt

Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt

icon_create RESULT name text infoicon_create

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 28: buscar_ampliaciones FOROSAP

CLEAR pt_sort wa_sort

wa_sort-fieldname = SUBSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = CONSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN TI_VAL

wa_sort-fieldname = VALIDwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = VALSEQNRwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN TI_ENHOBJ

wa_sort-fieldname = ENHNAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = VERSIONwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

WHEN OTHERS

IF p_tabname NE TI_FINAL

wa_sort-fieldname = TIPOwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

IF p_tabname NE TI_FDEX

wa_sort-fieldname = NIVELwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = PROGRAMAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = LINEAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

ENDIF

ELSE

wa_sort-fieldname = NAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = MEMBERwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sortENDIFENDCASE

ENDFORM sort

amp---------------------------------------------------------------------amp Form mostrar_listadoamp--------------------------------------------------------------------- Mostrar listado ALV----------------------------------------------------------------------FORM mostrar_listado

wa_print-reserve_lines = 2

CALL FUNCTION REUSE_ALV_BLOCK_LIST_DISPLAY

EXPORTINGis_print = wa_printEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM mostrar_listado

amp---------------------------------------------------------------------amp Form user_commandamp--------------------------------------------------------------------- Evaluar acciones del usuario----------------------------------------------------------------------FORM user_command USING ucomm LIKE sy-ucommsfields TYPE slis_selfield

DATA l_break TYPE c

Rescatar el registro seleccionadoCASE sfields-tabnameWHEN TI_USER_EXITREAD TABLE ti_user_exit INDEX sfields-tabindexWHEN TI_BADIREAD TABLE ti_badi INDEX sfields-tabindexWHEN TI_BTEREAD TABLE ti_bte INDEX sfields-tabindexWHEN TI_ENHREAD TABLE ti_enh INDEX sfields-tabindexWHEN TI_ENHOBJREAD TABLE ti_enhobj INDEX sfields-tabindexWHEN TI_FDEXREAD TABLE ti_fdex INDEX sfields-tabindexWHEN TI_FINALREAD TABLE ti_final INDEX sfields-tabindexWHEN TI_SUSTREAD TABLE ti_sust INDEX sfields-tabindexWHEN TI_VALREAD TABLE ti_val INDEX sfields-tabindexWHEN TI_CIMPREAD TABLE ti_cimp INDEX sfields-tabindexENDCASE

Seleccion de opcionCASE ucomm DOUBLE CLICKWHEN ampIC1 Evaluar valor de campo seleccionadoCHECK NOT sfields-value IS INITIAL

CASE sfields-tabnameWHEN TI_USER_EXIT USER-EXITIF ti_user_exit-tipo EQ sfields-value(4)SEARCH ti_user_exit-cf FOR c_enhanceCHECK sy-subrc EQ 0PERFORM visualizar_exit USING ti_user_exit-programati_user_exit-cf

ELSEIF ti_user_exit-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_user_exit-programati_user_exit-lineaMOVE X TO l_breakELSEIF ti_user_exit-break EQ sfields-value(4)OR ti_user_exit-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_user_exit-programati_user_exit-lineati_user_exit-breakMOVE X TO l_breakENDIF

WHEN TI_FINAL USER-EXIT Tx CMODIF ti_final-name EQ sfields-valueCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = ti_final-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSEIF ti_final-include EQ sfields-valuePERFORM visualizar_linea USING ti_final-programa1MOVE X TO l_breakENDIF

WHEN TI_BADI BadiIF ti_badi-tipo EQ sfields-value(4)PERFORM visualizar_badi USING ti_badi-cfELSEIF ti_badi-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_badi-programati_badi-lineaMOVE X TO l_breakELSEIF ti_badi-break EQ sfields-value(4)OR ti_badi-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_badi-programati_badi-lineati_badi-breakMOVE X TO l_breakENDIF

WHEN TI_BTE BTEIF ti_bte-tipo EQ sfields-value(4)PERFORM fibf USING ti_bte-cfELSEIF ti_bte-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_bte-programati_bte-lineaMOVE X TO l_breakELSEIF ti_bte-break EQ sfields-value(4)OR ti_bte-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_bte-programati_bte-linea

ti_bte-breakMOVE X TO l_breakENDIF

WHEN TI_ENH Punto de ampliacioacutenIF ti_enh-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_enh-programati_enh-lineaMOVE X TO l_breakELSEIF ti_enh-tipo EQ sfields-value(4)PERFORM bi_se18 USING ti_enh-cfENDIF

WHEN TI_ENHOBJ Punto de ampliacioacutenIF ti_enhobj-enhname EQ sfields-value(30)PERFORM bi_se19 USING ti_enhobj-enhnameENDIF

WHEN TI_SUST SustitucionesIF ti_sust-substid EQ sfields-value(7) ORti_sust-subseqnr EQ sfields-value(3)PERFORM visualizar_sust USING ti_sust-substidti_sust-subseqnrENDIF

WHEN TI_VAL ValidacionesIF ti_val-valid EQ sfields-value(7) ORti_val-valseqnr EQ sfields-value(3)PERFORM visualizar_val USING ti_val-validti_val-valseqnrENDIF

WHEN TI_FDEX Field-exitIF ti_fdex-tipo EQ sfields-valueSUBMIT rsmodprf AND RETURNELSEIF ti_fdex-cf(60) EQ sfields-value Visualizo el field-exitCALL FUNCTION RS_FUNCTION_SHOWEXPORTINGfuncname = ti_fdex-cf

CALL FUNCTION RS_NAVIGATION_MONITORENDIF

WHEN TI_CIMP Customer implementation

CASE sfields-fieldnameWHEN ENHNAMEPERFORM bi_se19 USING ti_cimp-enhnameWHEN ENHINCLUDEPERFORM visualizar_enh_cf USING ti_cimp-enhinclude

WHEN OTHERS DO NOTHING ENDCASE

WHEN OTHERS DO NOTHING ENDCASE

WHEN OTHERS DO NOTHING ENDCASE

IF l_break IS NOT INITIAL AND sfields-tabname NE TI_CIMPWAIT UP TO 1 SECONDSPERFORM cargar_breakENDIFsfields-refresh = X

ENDFORM user_command

amp---------------------------------------------------------------------amp Form visualizar_lineaamp--------------------------------------------------------------------- Visualizo la linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_linea USING p_programa TYPE sy-repidp_linea

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_programaobject_type = c_typeposition = p_lineaEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM visualizar_linea

amp---------------------------------------------------------------------amp Form buscar_exitamp--------------------------------------------------------------------- Buscar USER-EXIT----------------------------------------------------------------------FORM buscar_exit

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN USER-EXITSEARCH ti_programa-cf FOR c_user_exit- SE ENCONTRO UN USER-EXIT Y SE VERIFICA SI LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS PERFORMSEARCH ti_programa-cf FOR c_performCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LAS ASIGNACIONESSEARCH ti_programa-cf FOR c_igualCHECK sy-subrc NE 0

CLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INIacuteCIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF

ENDFORM buscar_exit

amp---------------------------------------------------------------------amp Form buscar_badiamp--------------------------------------------------------------------- Buscar BADI----------------------------------------------------------------------FORM buscar_badi

DATAl_subrc LIKE sy-subrc

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BADISEARCH ti_programa-cf FOR c_badi- SE ENCONTRO UNA BADI Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

SEARCH ti_programa-cf FOR c_includeIF sy-subrc NE 0CLEAR l_subrcSEARCH ti_programa-cf FOR c_methodIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_funcao_2IF sy-subrc NE 0SEARCH ti_programa-cf FOR c_performIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_type_refIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_formMOVE 4 TO l_subrcENDIFENDIFENDIFENDIF

IF l_subrc EQ 0CLEAR ti_badi

- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIFELSECHECK p_handl IS NOT INITIAL- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA INSTANCIA DE- UNA BADISEARCH ti_programa-cf FOR c_handler- SE ENCONTRO UNA INSTANCIA DE IMPLEMENACIOacuteN Y SE VERIFICA SI LA LINEA- NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

SEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0CLEAR ti_badi- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIF

ENDFORM buscar_badi

amp---------------------------------------------------------------------amp Form buscar_bteamp--------------------------------------------------------------------- Buscar BTE----------------------------------------------------------------------FORM buscar_bte

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OPEN_FI_PERFORM

- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endform

CHECK sy-subrc NE 0

CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte1- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OUTBOUND_CALL

- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0

CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF

ENDFORM buscar_bte

amp---------------------------------------------------------------------amp Form repid_f4amp--------------------------------------------------------------------- Ejecuto el F4 para buscar programas----------------------------------------------------------------------FORM repid_f4

CALL FUNCTION REPOSITORY_INFO_SYSTEM_F4EXPORTINGobject_type = PROGobject_name = p_progsuppress_selection = XIMPORTINGobject_name_selected = p_progEXCEPTIONS

cancel = 1wrong_type = 2OTHERS = 3

ENDFORM repid_f4

amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf

DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

SEARCH p_cf FOR 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 INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

READ TABLE lt_cf INDEX 4

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

CHECK sy-subrc IS INITIAL

Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten

textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer

CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4

IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF

WHEN OTHERS Do Nothing ENDCASE

ENDFORM visualizar_badi

amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf

DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

CLEAR d010inc modsap modact

Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid

IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF

SEARCH p_cf FOR c_enhance

CHECK sy-subrc IS INITIAL

REFRESH lt_cf

l_cf = 500 - sy-fdpos

MOVE p_cf+sy-fdpos(l_cf) TO l_linea

SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3

TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS

Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _

Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit

CHECK sy-subrc IS INITIAL

Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM

modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3

ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname

CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ENDIF

ENDFORM visualizar_exit

amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit

DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo

DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe

DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE

CHECK p_fdex IS NOT INITIAL

CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe

MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex

IF p_prog IS NOT INITIAL

MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF

Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog

LOOP AT lt_d020s

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

REFRESH lt_d021s

Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4

Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X

SEARCH lt_d021s-fnam FOR -

IF sy-subrc IS INITIAL

MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum

Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname

APPEND lt_campo

ENDIF

ENDLOOPENDLOOP

CHECK lt_campo[] IS NOT INITIAL

SORT lt_campo BY repid dnum tabname fieldname

DELETE ADJACENT DUPLICATES FROM lt_campo

Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname

SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l

LOOP AT lt_dd03l

CLEAR tddir tddirs

SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname

CHECK sy-subrc IS INITIAL

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog

CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF

Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf

IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF

READ TABLE lt_fe WITH KEY cf = lt_fe-cf

CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP

LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex

ENDLOOP

ENDFORM buscar_field_exit

amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf

DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c

SEARCH p_cf FOR c_bte

IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ELSE

SEARCH p_cf FOR c_bte1

CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ENDIF

IF l_tipo IS NOT INITIAL

PERFORM visualizar_bte USING l_tipol_linea

ELSECALL TRANSACTION FIBFENDIF

ENDFORM fibf

amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT

EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM breakpoint

amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_badi

amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE

i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_bte

amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X TIPO X X c_text_05CF X c_text_04

ENDFORM construir_catalogo_FDEX

amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc

DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

CHECK lt_break[] IS NOT INITIAL

IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix

MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF

IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix

MOVEti_badi-linea TO l_lineti_badi-programa TO l_program

READ TABLE lt_break INTO wa_break

WITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF

IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix

MOVEti_bte-linea TO l_lineti_bte-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF

ENDFORM cargar_break

amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

DATAl_tabix TYPE sy-tabix

l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

SELECT SINGLE FROM d010incWHERE include = p_programa

IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF

MOVEp_linea TO l_linep_programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM asignar_break

amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit

IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF

PERFORM get_objects Get Objects

ENDFORM buscar_user_exit

amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects

DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area

DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix

SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog

IF sy-subrc = 0

SORT ti_tadir BY obj_name devclass

SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass

IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF

- Get UserExit namesLOOP AT ti_jtab

SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E

APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area

l_fname = ti_final-member

CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include

LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP

CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP

ENDFORM get_objects

amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X

ENDFORM construir_catalogo_uexit

amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------

FORM visualizar_ampliacion

DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF

SELECT SINGLE FROM modsapWHERE member EQ l_member

IF sy-subrc IS INITIAL

Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member

ENDIF

ENDFORM visualizar_ampliacion

amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea

RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs

REFRESH r_event r_procs

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event

SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs

SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE

ENDFORM visualizar_bte

amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE

----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c

DATAl_linea(500) TYPE c

DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

MOVE lt_fields-value TO l_linea

PERFORM visualizar_bte USING p_tipol_linea

ENDFORM cargar_bte

amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface

DATAl_linea(500) TYPE c

DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE

InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF

ENDFORM visualizar_interface

amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones

CHECK p_sust IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922

ENDFORM buscar_sustituciones

amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST

ENDFORM construir_catalogo_sust

amp---------------------------------------------------------------------

amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones

ENDFORM TOP_OF_PAGE_SUST

amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4

CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_sust

amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones

CHECK p_val IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931

ENDFORM buscar_validaciones

amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID

ENDFORM construir_catalogo_val

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones

ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2

CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_val

amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto

DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF

SELECT SINGLE FROM modsapWHERE name EQ l_name

IF sy-subrc IS INITIAL

MOVE l_name TO l_member

SELECT SINGLE FROM modactWHERE member EQ l_member

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF

ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF

ENDFORM visualizar_proyecto

amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel

APPEND ti_enh

ENDIFENDIFENDIF

ENDFORM buscar_punto_ampliacioacuten

amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_enh

amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh

DATA l_obj_name TYPE enhobj-obj_name

DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name

CHECK p_enh IS NOT INITIAL

IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF

REFRESH lt_obj_name

LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP

SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name

ENDFORM buscar_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X

ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME

ENDFORM construir_catalogo_enhobj

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENHOBJ

amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM bi_se19

amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro

CLEAR ti_bdcdatati_bdcdata-program = program

ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata

ENDFORM BDC_DYNPRO

amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval

CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata

ENDFORM BDC_FIELD

amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa

DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)

CHECK ti_gb31t[] IS NOT INITIAL

DO

Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2

IF l_exit EQ XEXITENDIF

CHECK l_exit IS INITIAL

Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND

CHECK l_boolpool IS NOT INITIAL

MOVE l_boolpool TO l_repid

Visualizo el programaPERFORM visualizar_linea USING l_repid01

ENDDO

ENDFORM visualizar_programa

amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope

STATICS l_flag TYPE c

DATA l_tit(65) TYPE c

CHECK l_flag IS INITIAL

l_flag = X

WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline

4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM texto_tope

amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf

DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off

CHECK l_off IS NOT INITIAL

ADD 7 TO l_offl_cf = 500 - l_off

SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_enhspotname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1

invalid_object_type = 2OTHERS = 3

ENDFORM bi_se18

amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit

DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE

DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE

MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE

MOVE lt_fields-value TO l_nameENDIF

Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_

LOOP AT lt_tfdir

CLEARl_group l_include l_namespace l_str_area

l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl

IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl

CHECK sy-subrc IS INITIAL

Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP

CHECK l_flag IS INITIAL

La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value

ENDFORM visualizar_fm_exit

amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter

tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten

ENDFORM def_text_parameter

amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones

Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt

Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt

Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt

icon_create RESULT name text infoicon_create

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 29: buscar_ampliaciones FOROSAP

CLEAR pt_sort wa_sort

IF p_tabname NE TI_FDEX

wa_sort-fieldname = NIVELwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = PROGRAMAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = LINEAwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

ENDIF

ELSE

wa_sort-fieldname = NAMEwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sort

CLEAR pt_sort wa_sort

wa_sort-fieldname = MEMBERwa_sort-tabname = p_tabnamewa_sort-up = Xwa_sort-comp = XAPPEND wa_sort TO pt_sortENDIFENDCASE

ENDFORM sort

amp---------------------------------------------------------------------amp Form mostrar_listadoamp--------------------------------------------------------------------- Mostrar listado ALV----------------------------------------------------------------------FORM mostrar_listado

wa_print-reserve_lines = 2

CALL FUNCTION REUSE_ALV_BLOCK_LIST_DISPLAY

EXPORTINGis_print = wa_printEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM mostrar_listado

amp---------------------------------------------------------------------amp Form user_commandamp--------------------------------------------------------------------- Evaluar acciones del usuario----------------------------------------------------------------------FORM user_command USING ucomm LIKE sy-ucommsfields TYPE slis_selfield

DATA l_break TYPE c

Rescatar el registro seleccionadoCASE sfields-tabnameWHEN TI_USER_EXITREAD TABLE ti_user_exit INDEX sfields-tabindexWHEN TI_BADIREAD TABLE ti_badi INDEX sfields-tabindexWHEN TI_BTEREAD TABLE ti_bte INDEX sfields-tabindexWHEN TI_ENHREAD TABLE ti_enh INDEX sfields-tabindexWHEN TI_ENHOBJREAD TABLE ti_enhobj INDEX sfields-tabindexWHEN TI_FDEXREAD TABLE ti_fdex INDEX sfields-tabindexWHEN TI_FINALREAD TABLE ti_final INDEX sfields-tabindexWHEN TI_SUSTREAD TABLE ti_sust INDEX sfields-tabindexWHEN TI_VALREAD TABLE ti_val INDEX sfields-tabindexWHEN TI_CIMPREAD TABLE ti_cimp INDEX sfields-tabindexENDCASE

Seleccion de opcionCASE ucomm DOUBLE CLICKWHEN ampIC1 Evaluar valor de campo seleccionadoCHECK NOT sfields-value IS INITIAL

CASE sfields-tabnameWHEN TI_USER_EXIT USER-EXITIF ti_user_exit-tipo EQ sfields-value(4)SEARCH ti_user_exit-cf FOR c_enhanceCHECK sy-subrc EQ 0PERFORM visualizar_exit USING ti_user_exit-programati_user_exit-cf

ELSEIF ti_user_exit-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_user_exit-programati_user_exit-lineaMOVE X TO l_breakELSEIF ti_user_exit-break EQ sfields-value(4)OR ti_user_exit-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_user_exit-programati_user_exit-lineati_user_exit-breakMOVE X TO l_breakENDIF

WHEN TI_FINAL USER-EXIT Tx CMODIF ti_final-name EQ sfields-valueCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = ti_final-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSEIF ti_final-include EQ sfields-valuePERFORM visualizar_linea USING ti_final-programa1MOVE X TO l_breakENDIF

WHEN TI_BADI BadiIF ti_badi-tipo EQ sfields-value(4)PERFORM visualizar_badi USING ti_badi-cfELSEIF ti_badi-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_badi-programati_badi-lineaMOVE X TO l_breakELSEIF ti_badi-break EQ sfields-value(4)OR ti_badi-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_badi-programati_badi-lineati_badi-breakMOVE X TO l_breakENDIF

WHEN TI_BTE BTEIF ti_bte-tipo EQ sfields-value(4)PERFORM fibf USING ti_bte-cfELSEIF ti_bte-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_bte-programati_bte-lineaMOVE X TO l_breakELSEIF ti_bte-break EQ sfields-value(4)OR ti_bte-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_bte-programati_bte-linea

ti_bte-breakMOVE X TO l_breakENDIF

WHEN TI_ENH Punto de ampliacioacutenIF ti_enh-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_enh-programati_enh-lineaMOVE X TO l_breakELSEIF ti_enh-tipo EQ sfields-value(4)PERFORM bi_se18 USING ti_enh-cfENDIF

WHEN TI_ENHOBJ Punto de ampliacioacutenIF ti_enhobj-enhname EQ sfields-value(30)PERFORM bi_se19 USING ti_enhobj-enhnameENDIF

WHEN TI_SUST SustitucionesIF ti_sust-substid EQ sfields-value(7) ORti_sust-subseqnr EQ sfields-value(3)PERFORM visualizar_sust USING ti_sust-substidti_sust-subseqnrENDIF

WHEN TI_VAL ValidacionesIF ti_val-valid EQ sfields-value(7) ORti_val-valseqnr EQ sfields-value(3)PERFORM visualizar_val USING ti_val-validti_val-valseqnrENDIF

WHEN TI_FDEX Field-exitIF ti_fdex-tipo EQ sfields-valueSUBMIT rsmodprf AND RETURNELSEIF ti_fdex-cf(60) EQ sfields-value Visualizo el field-exitCALL FUNCTION RS_FUNCTION_SHOWEXPORTINGfuncname = ti_fdex-cf

CALL FUNCTION RS_NAVIGATION_MONITORENDIF

WHEN TI_CIMP Customer implementation

CASE sfields-fieldnameWHEN ENHNAMEPERFORM bi_se19 USING ti_cimp-enhnameWHEN ENHINCLUDEPERFORM visualizar_enh_cf USING ti_cimp-enhinclude

WHEN OTHERS DO NOTHING ENDCASE

WHEN OTHERS DO NOTHING ENDCASE

WHEN OTHERS DO NOTHING ENDCASE

IF l_break IS NOT INITIAL AND sfields-tabname NE TI_CIMPWAIT UP TO 1 SECONDSPERFORM cargar_breakENDIFsfields-refresh = X

ENDFORM user_command

amp---------------------------------------------------------------------amp Form visualizar_lineaamp--------------------------------------------------------------------- Visualizo la linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_linea USING p_programa TYPE sy-repidp_linea

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_programaobject_type = c_typeposition = p_lineaEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM visualizar_linea

amp---------------------------------------------------------------------amp Form buscar_exitamp--------------------------------------------------------------------- Buscar USER-EXIT----------------------------------------------------------------------FORM buscar_exit

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN USER-EXITSEARCH ti_programa-cf FOR c_user_exit- SE ENCONTRO UN USER-EXIT Y SE VERIFICA SI LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS PERFORMSEARCH ti_programa-cf FOR c_performCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LAS ASIGNACIONESSEARCH ti_programa-cf FOR c_igualCHECK sy-subrc NE 0

CLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INIacuteCIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF

ENDFORM buscar_exit

amp---------------------------------------------------------------------amp Form buscar_badiamp--------------------------------------------------------------------- Buscar BADI----------------------------------------------------------------------FORM buscar_badi

DATAl_subrc LIKE sy-subrc

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BADISEARCH ti_programa-cf FOR c_badi- SE ENCONTRO UNA BADI Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

SEARCH ti_programa-cf FOR c_includeIF sy-subrc NE 0CLEAR l_subrcSEARCH ti_programa-cf FOR c_methodIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_funcao_2IF sy-subrc NE 0SEARCH ti_programa-cf FOR c_performIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_type_refIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_formMOVE 4 TO l_subrcENDIFENDIFENDIFENDIF

IF l_subrc EQ 0CLEAR ti_badi

- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIFELSECHECK p_handl IS NOT INITIAL- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA INSTANCIA DE- UNA BADISEARCH ti_programa-cf FOR c_handler- SE ENCONTRO UNA INSTANCIA DE IMPLEMENACIOacuteN Y SE VERIFICA SI LA LINEA- NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

SEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0CLEAR ti_badi- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIF

ENDFORM buscar_badi

amp---------------------------------------------------------------------amp Form buscar_bteamp--------------------------------------------------------------------- Buscar BTE----------------------------------------------------------------------FORM buscar_bte

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OPEN_FI_PERFORM

- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endform

CHECK sy-subrc NE 0

CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte1- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OUTBOUND_CALL

- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0

CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF

ENDFORM buscar_bte

amp---------------------------------------------------------------------amp Form repid_f4amp--------------------------------------------------------------------- Ejecuto el F4 para buscar programas----------------------------------------------------------------------FORM repid_f4

CALL FUNCTION REPOSITORY_INFO_SYSTEM_F4EXPORTINGobject_type = PROGobject_name = p_progsuppress_selection = XIMPORTINGobject_name_selected = p_progEXCEPTIONS

cancel = 1wrong_type = 2OTHERS = 3

ENDFORM repid_f4

amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf

DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

SEARCH p_cf FOR 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 INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

READ TABLE lt_cf INDEX 4

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

CHECK sy-subrc IS INITIAL

Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten

textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer

CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4

IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF

WHEN OTHERS Do Nothing ENDCASE

ENDFORM visualizar_badi

amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf

DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

CLEAR d010inc modsap modact

Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid

IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF

SEARCH p_cf FOR c_enhance

CHECK sy-subrc IS INITIAL

REFRESH lt_cf

l_cf = 500 - sy-fdpos

MOVE p_cf+sy-fdpos(l_cf) TO l_linea

SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3

TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS

Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _

Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit

CHECK sy-subrc IS INITIAL

Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM

modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3

ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname

CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ENDIF

ENDFORM visualizar_exit

amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit

DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo

DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe

DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE

CHECK p_fdex IS NOT INITIAL

CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe

MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex

IF p_prog IS NOT INITIAL

MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF

Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog

LOOP AT lt_d020s

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

REFRESH lt_d021s

Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4

Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X

SEARCH lt_d021s-fnam FOR -

IF sy-subrc IS INITIAL

MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum

Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname

APPEND lt_campo

ENDIF

ENDLOOPENDLOOP

CHECK lt_campo[] IS NOT INITIAL

SORT lt_campo BY repid dnum tabname fieldname

DELETE ADJACENT DUPLICATES FROM lt_campo

Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname

SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l

LOOP AT lt_dd03l

CLEAR tddir tddirs

SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname

CHECK sy-subrc IS INITIAL

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog

CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF

Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf

IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF

READ TABLE lt_fe WITH KEY cf = lt_fe-cf

CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP

LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex

ENDLOOP

ENDFORM buscar_field_exit

amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf

DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c

SEARCH p_cf FOR c_bte

IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ELSE

SEARCH p_cf FOR c_bte1

CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ENDIF

IF l_tipo IS NOT INITIAL

PERFORM visualizar_bte USING l_tipol_linea

ELSECALL TRANSACTION FIBFENDIF

ENDFORM fibf

amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT

EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM breakpoint

amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_badi

amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE

i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_bte

amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X TIPO X X c_text_05CF X c_text_04

ENDFORM construir_catalogo_FDEX

amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc

DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

CHECK lt_break[] IS NOT INITIAL

IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix

MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF

IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix

MOVEti_badi-linea TO l_lineti_badi-programa TO l_program

READ TABLE lt_break INTO wa_break

WITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF

IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix

MOVEti_bte-linea TO l_lineti_bte-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF

ENDFORM cargar_break

amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

DATAl_tabix TYPE sy-tabix

l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

SELECT SINGLE FROM d010incWHERE include = p_programa

IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF

MOVEp_linea TO l_linep_programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM asignar_break

amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit

IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF

PERFORM get_objects Get Objects

ENDFORM buscar_user_exit

amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects

DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area

DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix

SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog

IF sy-subrc = 0

SORT ti_tadir BY obj_name devclass

SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass

IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF

- Get UserExit namesLOOP AT ti_jtab

SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E

APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area

l_fname = ti_final-member

CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include

LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP

CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP

ENDFORM get_objects

amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X

ENDFORM construir_catalogo_uexit

amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------

FORM visualizar_ampliacion

DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF

SELECT SINGLE FROM modsapWHERE member EQ l_member

IF sy-subrc IS INITIAL

Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member

ENDIF

ENDFORM visualizar_ampliacion

amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea

RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs

REFRESH r_event r_procs

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event

SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs

SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE

ENDFORM visualizar_bte

amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE

----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c

DATAl_linea(500) TYPE c

DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

MOVE lt_fields-value TO l_linea

PERFORM visualizar_bte USING p_tipol_linea

ENDFORM cargar_bte

amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface

DATAl_linea(500) TYPE c

DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE

InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF

ENDFORM visualizar_interface

amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones

CHECK p_sust IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922

ENDFORM buscar_sustituciones

amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST

ENDFORM construir_catalogo_sust

amp---------------------------------------------------------------------

amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones

ENDFORM TOP_OF_PAGE_SUST

amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4

CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_sust

amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones

CHECK p_val IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931

ENDFORM buscar_validaciones

amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID

ENDFORM construir_catalogo_val

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones

ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2

CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_val

amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto

DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF

SELECT SINGLE FROM modsapWHERE name EQ l_name

IF sy-subrc IS INITIAL

MOVE l_name TO l_member

SELECT SINGLE FROM modactWHERE member EQ l_member

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF

ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF

ENDFORM visualizar_proyecto

amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel

APPEND ti_enh

ENDIFENDIFENDIF

ENDFORM buscar_punto_ampliacioacuten

amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_enh

amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh

DATA l_obj_name TYPE enhobj-obj_name

DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name

CHECK p_enh IS NOT INITIAL

IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF

REFRESH lt_obj_name

LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP

SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name

ENDFORM buscar_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X

ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME

ENDFORM construir_catalogo_enhobj

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENHOBJ

amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM bi_se19

amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro

CLEAR ti_bdcdatati_bdcdata-program = program

ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata

ENDFORM BDC_DYNPRO

amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval

CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata

ENDFORM BDC_FIELD

amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa

DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)

CHECK ti_gb31t[] IS NOT INITIAL

DO

Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2

IF l_exit EQ XEXITENDIF

CHECK l_exit IS INITIAL

Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND

CHECK l_boolpool IS NOT INITIAL

MOVE l_boolpool TO l_repid

Visualizo el programaPERFORM visualizar_linea USING l_repid01

ENDDO

ENDFORM visualizar_programa

amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope

STATICS l_flag TYPE c

DATA l_tit(65) TYPE c

CHECK l_flag IS INITIAL

l_flag = X

WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline

4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM texto_tope

amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf

DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off

CHECK l_off IS NOT INITIAL

ADD 7 TO l_offl_cf = 500 - l_off

SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_enhspotname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1

invalid_object_type = 2OTHERS = 3

ENDFORM bi_se18

amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit

DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE

DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE

MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE

MOVE lt_fields-value TO l_nameENDIF

Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_

LOOP AT lt_tfdir

CLEARl_group l_include l_namespace l_str_area

l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl

IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl

CHECK sy-subrc IS INITIAL

Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP

CHECK l_flag IS INITIAL

La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value

ENDFORM visualizar_fm_exit

amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter

tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten

ENDFORM def_text_parameter

amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones

Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt

Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt

Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt

icon_create RESULT name text infoicon_create

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 30: buscar_ampliaciones FOROSAP

EXPORTINGis_print = wa_printEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM mostrar_listado

amp---------------------------------------------------------------------amp Form user_commandamp--------------------------------------------------------------------- Evaluar acciones del usuario----------------------------------------------------------------------FORM user_command USING ucomm LIKE sy-ucommsfields TYPE slis_selfield

DATA l_break TYPE c

Rescatar el registro seleccionadoCASE sfields-tabnameWHEN TI_USER_EXITREAD TABLE ti_user_exit INDEX sfields-tabindexWHEN TI_BADIREAD TABLE ti_badi INDEX sfields-tabindexWHEN TI_BTEREAD TABLE ti_bte INDEX sfields-tabindexWHEN TI_ENHREAD TABLE ti_enh INDEX sfields-tabindexWHEN TI_ENHOBJREAD TABLE ti_enhobj INDEX sfields-tabindexWHEN TI_FDEXREAD TABLE ti_fdex INDEX sfields-tabindexWHEN TI_FINALREAD TABLE ti_final INDEX sfields-tabindexWHEN TI_SUSTREAD TABLE ti_sust INDEX sfields-tabindexWHEN TI_VALREAD TABLE ti_val INDEX sfields-tabindexWHEN TI_CIMPREAD TABLE ti_cimp INDEX sfields-tabindexENDCASE

Seleccion de opcionCASE ucomm DOUBLE CLICKWHEN ampIC1 Evaluar valor de campo seleccionadoCHECK NOT sfields-value IS INITIAL

CASE sfields-tabnameWHEN TI_USER_EXIT USER-EXITIF ti_user_exit-tipo EQ sfields-value(4)SEARCH ti_user_exit-cf FOR c_enhanceCHECK sy-subrc EQ 0PERFORM visualizar_exit USING ti_user_exit-programati_user_exit-cf

ELSEIF ti_user_exit-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_user_exit-programati_user_exit-lineaMOVE X TO l_breakELSEIF ti_user_exit-break EQ sfields-value(4)OR ti_user_exit-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_user_exit-programati_user_exit-lineati_user_exit-breakMOVE X TO l_breakENDIF

WHEN TI_FINAL USER-EXIT Tx CMODIF ti_final-name EQ sfields-valueCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = ti_final-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSEIF ti_final-include EQ sfields-valuePERFORM visualizar_linea USING ti_final-programa1MOVE X TO l_breakENDIF

WHEN TI_BADI BadiIF ti_badi-tipo EQ sfields-value(4)PERFORM visualizar_badi USING ti_badi-cfELSEIF ti_badi-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_badi-programati_badi-lineaMOVE X TO l_breakELSEIF ti_badi-break EQ sfields-value(4)OR ti_badi-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_badi-programati_badi-lineati_badi-breakMOVE X TO l_breakENDIF

WHEN TI_BTE BTEIF ti_bte-tipo EQ sfields-value(4)PERFORM fibf USING ti_bte-cfELSEIF ti_bte-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_bte-programati_bte-lineaMOVE X TO l_breakELSEIF ti_bte-break EQ sfields-value(4)OR ti_bte-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_bte-programati_bte-linea

ti_bte-breakMOVE X TO l_breakENDIF

WHEN TI_ENH Punto de ampliacioacutenIF ti_enh-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_enh-programati_enh-lineaMOVE X TO l_breakELSEIF ti_enh-tipo EQ sfields-value(4)PERFORM bi_se18 USING ti_enh-cfENDIF

WHEN TI_ENHOBJ Punto de ampliacioacutenIF ti_enhobj-enhname EQ sfields-value(30)PERFORM bi_se19 USING ti_enhobj-enhnameENDIF

WHEN TI_SUST SustitucionesIF ti_sust-substid EQ sfields-value(7) ORti_sust-subseqnr EQ sfields-value(3)PERFORM visualizar_sust USING ti_sust-substidti_sust-subseqnrENDIF

WHEN TI_VAL ValidacionesIF ti_val-valid EQ sfields-value(7) ORti_val-valseqnr EQ sfields-value(3)PERFORM visualizar_val USING ti_val-validti_val-valseqnrENDIF

WHEN TI_FDEX Field-exitIF ti_fdex-tipo EQ sfields-valueSUBMIT rsmodprf AND RETURNELSEIF ti_fdex-cf(60) EQ sfields-value Visualizo el field-exitCALL FUNCTION RS_FUNCTION_SHOWEXPORTINGfuncname = ti_fdex-cf

CALL FUNCTION RS_NAVIGATION_MONITORENDIF

WHEN TI_CIMP Customer implementation

CASE sfields-fieldnameWHEN ENHNAMEPERFORM bi_se19 USING ti_cimp-enhnameWHEN ENHINCLUDEPERFORM visualizar_enh_cf USING ti_cimp-enhinclude

WHEN OTHERS DO NOTHING ENDCASE

WHEN OTHERS DO NOTHING ENDCASE

WHEN OTHERS DO NOTHING ENDCASE

IF l_break IS NOT INITIAL AND sfields-tabname NE TI_CIMPWAIT UP TO 1 SECONDSPERFORM cargar_breakENDIFsfields-refresh = X

ENDFORM user_command

amp---------------------------------------------------------------------amp Form visualizar_lineaamp--------------------------------------------------------------------- Visualizo la linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_linea USING p_programa TYPE sy-repidp_linea

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_programaobject_type = c_typeposition = p_lineaEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM visualizar_linea

amp---------------------------------------------------------------------amp Form buscar_exitamp--------------------------------------------------------------------- Buscar USER-EXIT----------------------------------------------------------------------FORM buscar_exit

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN USER-EXITSEARCH ti_programa-cf FOR c_user_exit- SE ENCONTRO UN USER-EXIT Y SE VERIFICA SI LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS PERFORMSEARCH ti_programa-cf FOR c_performCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LAS ASIGNACIONESSEARCH ti_programa-cf FOR c_igualCHECK sy-subrc NE 0

CLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INIacuteCIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF

ENDFORM buscar_exit

amp---------------------------------------------------------------------amp Form buscar_badiamp--------------------------------------------------------------------- Buscar BADI----------------------------------------------------------------------FORM buscar_badi

DATAl_subrc LIKE sy-subrc

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BADISEARCH ti_programa-cf FOR c_badi- SE ENCONTRO UNA BADI Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

SEARCH ti_programa-cf FOR c_includeIF sy-subrc NE 0CLEAR l_subrcSEARCH ti_programa-cf FOR c_methodIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_funcao_2IF sy-subrc NE 0SEARCH ti_programa-cf FOR c_performIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_type_refIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_formMOVE 4 TO l_subrcENDIFENDIFENDIFENDIF

IF l_subrc EQ 0CLEAR ti_badi

- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIFELSECHECK p_handl IS NOT INITIAL- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA INSTANCIA DE- UNA BADISEARCH ti_programa-cf FOR c_handler- SE ENCONTRO UNA INSTANCIA DE IMPLEMENACIOacuteN Y SE VERIFICA SI LA LINEA- NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

SEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0CLEAR ti_badi- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIF

ENDFORM buscar_badi

amp---------------------------------------------------------------------amp Form buscar_bteamp--------------------------------------------------------------------- Buscar BTE----------------------------------------------------------------------FORM buscar_bte

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OPEN_FI_PERFORM

- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endform

CHECK sy-subrc NE 0

CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte1- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OUTBOUND_CALL

- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0

CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF

ENDFORM buscar_bte

amp---------------------------------------------------------------------amp Form repid_f4amp--------------------------------------------------------------------- Ejecuto el F4 para buscar programas----------------------------------------------------------------------FORM repid_f4

CALL FUNCTION REPOSITORY_INFO_SYSTEM_F4EXPORTINGobject_type = PROGobject_name = p_progsuppress_selection = XIMPORTINGobject_name_selected = p_progEXCEPTIONS

cancel = 1wrong_type = 2OTHERS = 3

ENDFORM repid_f4

amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf

DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

SEARCH p_cf FOR 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 INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

READ TABLE lt_cf INDEX 4

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

CHECK sy-subrc IS INITIAL

Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten

textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer

CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4

IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF

WHEN OTHERS Do Nothing ENDCASE

ENDFORM visualizar_badi

amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf

DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

CLEAR d010inc modsap modact

Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid

IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF

SEARCH p_cf FOR c_enhance

CHECK sy-subrc IS INITIAL

REFRESH lt_cf

l_cf = 500 - sy-fdpos

MOVE p_cf+sy-fdpos(l_cf) TO l_linea

SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3

TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS

Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _

Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit

CHECK sy-subrc IS INITIAL

Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM

modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3

ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname

CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ENDIF

ENDFORM visualizar_exit

amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit

DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo

DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe

DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE

CHECK p_fdex IS NOT INITIAL

CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe

MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex

IF p_prog IS NOT INITIAL

MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF

Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog

LOOP AT lt_d020s

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

REFRESH lt_d021s

Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4

Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X

SEARCH lt_d021s-fnam FOR -

IF sy-subrc IS INITIAL

MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum

Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname

APPEND lt_campo

ENDIF

ENDLOOPENDLOOP

CHECK lt_campo[] IS NOT INITIAL

SORT lt_campo BY repid dnum tabname fieldname

DELETE ADJACENT DUPLICATES FROM lt_campo

Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname

SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l

LOOP AT lt_dd03l

CLEAR tddir tddirs

SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname

CHECK sy-subrc IS INITIAL

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog

CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF

Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf

IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF

READ TABLE lt_fe WITH KEY cf = lt_fe-cf

CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP

LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex

ENDLOOP

ENDFORM buscar_field_exit

amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf

DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c

SEARCH p_cf FOR c_bte

IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ELSE

SEARCH p_cf FOR c_bte1

CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ENDIF

IF l_tipo IS NOT INITIAL

PERFORM visualizar_bte USING l_tipol_linea

ELSECALL TRANSACTION FIBFENDIF

ENDFORM fibf

amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT

EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM breakpoint

amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_badi

amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE

i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_bte

amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X TIPO X X c_text_05CF X c_text_04

ENDFORM construir_catalogo_FDEX

amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc

DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

CHECK lt_break[] IS NOT INITIAL

IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix

MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF

IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix

MOVEti_badi-linea TO l_lineti_badi-programa TO l_program

READ TABLE lt_break INTO wa_break

WITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF

IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix

MOVEti_bte-linea TO l_lineti_bte-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF

ENDFORM cargar_break

amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

DATAl_tabix TYPE sy-tabix

l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

SELECT SINGLE FROM d010incWHERE include = p_programa

IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF

MOVEp_linea TO l_linep_programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM asignar_break

amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit

IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF

PERFORM get_objects Get Objects

ENDFORM buscar_user_exit

amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects

DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area

DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix

SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog

IF sy-subrc = 0

SORT ti_tadir BY obj_name devclass

SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass

IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF

- Get UserExit namesLOOP AT ti_jtab

SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E

APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area

l_fname = ti_final-member

CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include

LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP

CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP

ENDFORM get_objects

amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X

ENDFORM construir_catalogo_uexit

amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------

FORM visualizar_ampliacion

DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF

SELECT SINGLE FROM modsapWHERE member EQ l_member

IF sy-subrc IS INITIAL

Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member

ENDIF

ENDFORM visualizar_ampliacion

amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea

RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs

REFRESH r_event r_procs

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event

SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs

SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE

ENDFORM visualizar_bte

amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE

----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c

DATAl_linea(500) TYPE c

DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

MOVE lt_fields-value TO l_linea

PERFORM visualizar_bte USING p_tipol_linea

ENDFORM cargar_bte

amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface

DATAl_linea(500) TYPE c

DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE

InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF

ENDFORM visualizar_interface

amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones

CHECK p_sust IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922

ENDFORM buscar_sustituciones

amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST

ENDFORM construir_catalogo_sust

amp---------------------------------------------------------------------

amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones

ENDFORM TOP_OF_PAGE_SUST

amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4

CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_sust

amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones

CHECK p_val IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931

ENDFORM buscar_validaciones

amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID

ENDFORM construir_catalogo_val

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones

ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2

CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_val

amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto

DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF

SELECT SINGLE FROM modsapWHERE name EQ l_name

IF sy-subrc IS INITIAL

MOVE l_name TO l_member

SELECT SINGLE FROM modactWHERE member EQ l_member

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF

ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF

ENDFORM visualizar_proyecto

amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel

APPEND ti_enh

ENDIFENDIFENDIF

ENDFORM buscar_punto_ampliacioacuten

amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_enh

amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh

DATA l_obj_name TYPE enhobj-obj_name

DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name

CHECK p_enh IS NOT INITIAL

IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF

REFRESH lt_obj_name

LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP

SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name

ENDFORM buscar_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X

ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME

ENDFORM construir_catalogo_enhobj

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENHOBJ

amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM bi_se19

amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro

CLEAR ti_bdcdatati_bdcdata-program = program

ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata

ENDFORM BDC_DYNPRO

amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval

CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata

ENDFORM BDC_FIELD

amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa

DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)

CHECK ti_gb31t[] IS NOT INITIAL

DO

Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2

IF l_exit EQ XEXITENDIF

CHECK l_exit IS INITIAL

Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND

CHECK l_boolpool IS NOT INITIAL

MOVE l_boolpool TO l_repid

Visualizo el programaPERFORM visualizar_linea USING l_repid01

ENDDO

ENDFORM visualizar_programa

amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope

STATICS l_flag TYPE c

DATA l_tit(65) TYPE c

CHECK l_flag IS INITIAL

l_flag = X

WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline

4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM texto_tope

amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf

DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off

CHECK l_off IS NOT INITIAL

ADD 7 TO l_offl_cf = 500 - l_off

SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_enhspotname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1

invalid_object_type = 2OTHERS = 3

ENDFORM bi_se18

amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit

DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE

DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE

MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE

MOVE lt_fields-value TO l_nameENDIF

Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_

LOOP AT lt_tfdir

CLEARl_group l_include l_namespace l_str_area

l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl

IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl

CHECK sy-subrc IS INITIAL

Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP

CHECK l_flag IS INITIAL

La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value

ENDFORM visualizar_fm_exit

amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter

tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten

ENDFORM def_text_parameter

amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones

Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt

Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt

Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt

icon_create RESULT name text infoicon_create

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 31: buscar_ampliaciones FOROSAP

ELSEIF ti_user_exit-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_user_exit-programati_user_exit-lineaMOVE X TO l_breakELSEIF ti_user_exit-break EQ sfields-value(4)OR ti_user_exit-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_user_exit-programati_user_exit-lineati_user_exit-breakMOVE X TO l_breakENDIF

WHEN TI_FINAL USER-EXIT Tx CMODIF ti_final-name EQ sfields-valueCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = ti_final-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSEIF ti_final-include EQ sfields-valuePERFORM visualizar_linea USING ti_final-programa1MOVE X TO l_breakENDIF

WHEN TI_BADI BadiIF ti_badi-tipo EQ sfields-value(4)PERFORM visualizar_badi USING ti_badi-cfELSEIF ti_badi-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_badi-programati_badi-lineaMOVE X TO l_breakELSEIF ti_badi-break EQ sfields-value(4)OR ti_badi-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_badi-programati_badi-lineati_badi-breakMOVE X TO l_breakENDIF

WHEN TI_BTE BTEIF ti_bte-tipo EQ sfields-value(4)PERFORM fibf USING ti_bte-cfELSEIF ti_bte-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_bte-programati_bte-lineaMOVE X TO l_breakELSEIF ti_bte-break EQ sfields-value(4)OR ti_bte-break+1(2) EQ sfields-value(2)PERFORM asignar_break USING ti_bte-programati_bte-linea

ti_bte-breakMOVE X TO l_breakENDIF

WHEN TI_ENH Punto de ampliacioacutenIF ti_enh-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_enh-programati_enh-lineaMOVE X TO l_breakELSEIF ti_enh-tipo EQ sfields-value(4)PERFORM bi_se18 USING ti_enh-cfENDIF

WHEN TI_ENHOBJ Punto de ampliacioacutenIF ti_enhobj-enhname EQ sfields-value(30)PERFORM bi_se19 USING ti_enhobj-enhnameENDIF

WHEN TI_SUST SustitucionesIF ti_sust-substid EQ sfields-value(7) ORti_sust-subseqnr EQ sfields-value(3)PERFORM visualizar_sust USING ti_sust-substidti_sust-subseqnrENDIF

WHEN TI_VAL ValidacionesIF ti_val-valid EQ sfields-value(7) ORti_val-valseqnr EQ sfields-value(3)PERFORM visualizar_val USING ti_val-validti_val-valseqnrENDIF

WHEN TI_FDEX Field-exitIF ti_fdex-tipo EQ sfields-valueSUBMIT rsmodprf AND RETURNELSEIF ti_fdex-cf(60) EQ sfields-value Visualizo el field-exitCALL FUNCTION RS_FUNCTION_SHOWEXPORTINGfuncname = ti_fdex-cf

CALL FUNCTION RS_NAVIGATION_MONITORENDIF

WHEN TI_CIMP Customer implementation

CASE sfields-fieldnameWHEN ENHNAMEPERFORM bi_se19 USING ti_cimp-enhnameWHEN ENHINCLUDEPERFORM visualizar_enh_cf USING ti_cimp-enhinclude

WHEN OTHERS DO NOTHING ENDCASE

WHEN OTHERS DO NOTHING ENDCASE

WHEN OTHERS DO NOTHING ENDCASE

IF l_break IS NOT INITIAL AND sfields-tabname NE TI_CIMPWAIT UP TO 1 SECONDSPERFORM cargar_breakENDIFsfields-refresh = X

ENDFORM user_command

amp---------------------------------------------------------------------amp Form visualizar_lineaamp--------------------------------------------------------------------- Visualizo la linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_linea USING p_programa TYPE sy-repidp_linea

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_programaobject_type = c_typeposition = p_lineaEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM visualizar_linea

amp---------------------------------------------------------------------amp Form buscar_exitamp--------------------------------------------------------------------- Buscar USER-EXIT----------------------------------------------------------------------FORM buscar_exit

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN USER-EXITSEARCH ti_programa-cf FOR c_user_exit- SE ENCONTRO UN USER-EXIT Y SE VERIFICA SI LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS PERFORMSEARCH ti_programa-cf FOR c_performCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LAS ASIGNACIONESSEARCH ti_programa-cf FOR c_igualCHECK sy-subrc NE 0

CLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INIacuteCIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF

ENDFORM buscar_exit

amp---------------------------------------------------------------------amp Form buscar_badiamp--------------------------------------------------------------------- Buscar BADI----------------------------------------------------------------------FORM buscar_badi

DATAl_subrc LIKE sy-subrc

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BADISEARCH ti_programa-cf FOR c_badi- SE ENCONTRO UNA BADI Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

SEARCH ti_programa-cf FOR c_includeIF sy-subrc NE 0CLEAR l_subrcSEARCH ti_programa-cf FOR c_methodIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_funcao_2IF sy-subrc NE 0SEARCH ti_programa-cf FOR c_performIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_type_refIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_formMOVE 4 TO l_subrcENDIFENDIFENDIFENDIF

IF l_subrc EQ 0CLEAR ti_badi

- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIFELSECHECK p_handl IS NOT INITIAL- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA INSTANCIA DE- UNA BADISEARCH ti_programa-cf FOR c_handler- SE ENCONTRO UNA INSTANCIA DE IMPLEMENACIOacuteN Y SE VERIFICA SI LA LINEA- NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

SEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0CLEAR ti_badi- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIF

ENDFORM buscar_badi

amp---------------------------------------------------------------------amp Form buscar_bteamp--------------------------------------------------------------------- Buscar BTE----------------------------------------------------------------------FORM buscar_bte

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OPEN_FI_PERFORM

- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endform

CHECK sy-subrc NE 0

CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte1- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OUTBOUND_CALL

- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0

CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF

ENDFORM buscar_bte

amp---------------------------------------------------------------------amp Form repid_f4amp--------------------------------------------------------------------- Ejecuto el F4 para buscar programas----------------------------------------------------------------------FORM repid_f4

CALL FUNCTION REPOSITORY_INFO_SYSTEM_F4EXPORTINGobject_type = PROGobject_name = p_progsuppress_selection = XIMPORTINGobject_name_selected = p_progEXCEPTIONS

cancel = 1wrong_type = 2OTHERS = 3

ENDFORM repid_f4

amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf

DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

SEARCH p_cf FOR 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 INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

READ TABLE lt_cf INDEX 4

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

CHECK sy-subrc IS INITIAL

Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten

textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer

CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4

IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF

WHEN OTHERS Do Nothing ENDCASE

ENDFORM visualizar_badi

amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf

DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

CLEAR d010inc modsap modact

Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid

IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF

SEARCH p_cf FOR c_enhance

CHECK sy-subrc IS INITIAL

REFRESH lt_cf

l_cf = 500 - sy-fdpos

MOVE p_cf+sy-fdpos(l_cf) TO l_linea

SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3

TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS

Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _

Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit

CHECK sy-subrc IS INITIAL

Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM

modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3

ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname

CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ENDIF

ENDFORM visualizar_exit

amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit

DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo

DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe

DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE

CHECK p_fdex IS NOT INITIAL

CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe

MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex

IF p_prog IS NOT INITIAL

MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF

Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog

LOOP AT lt_d020s

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

REFRESH lt_d021s

Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4

Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X

SEARCH lt_d021s-fnam FOR -

IF sy-subrc IS INITIAL

MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum

Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname

APPEND lt_campo

ENDIF

ENDLOOPENDLOOP

CHECK lt_campo[] IS NOT INITIAL

SORT lt_campo BY repid dnum tabname fieldname

DELETE ADJACENT DUPLICATES FROM lt_campo

Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname

SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l

LOOP AT lt_dd03l

CLEAR tddir tddirs

SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname

CHECK sy-subrc IS INITIAL

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog

CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF

Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf

IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF

READ TABLE lt_fe WITH KEY cf = lt_fe-cf

CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP

LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex

ENDLOOP

ENDFORM buscar_field_exit

amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf

DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c

SEARCH p_cf FOR c_bte

IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ELSE

SEARCH p_cf FOR c_bte1

CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ENDIF

IF l_tipo IS NOT INITIAL

PERFORM visualizar_bte USING l_tipol_linea

ELSECALL TRANSACTION FIBFENDIF

ENDFORM fibf

amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT

EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM breakpoint

amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_badi

amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE

i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_bte

amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X TIPO X X c_text_05CF X c_text_04

ENDFORM construir_catalogo_FDEX

amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc

DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

CHECK lt_break[] IS NOT INITIAL

IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix

MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF

IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix

MOVEti_badi-linea TO l_lineti_badi-programa TO l_program

READ TABLE lt_break INTO wa_break

WITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF

IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix

MOVEti_bte-linea TO l_lineti_bte-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF

ENDFORM cargar_break

amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

DATAl_tabix TYPE sy-tabix

l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

SELECT SINGLE FROM d010incWHERE include = p_programa

IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF

MOVEp_linea TO l_linep_programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM asignar_break

amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit

IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF

PERFORM get_objects Get Objects

ENDFORM buscar_user_exit

amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects

DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area

DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix

SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog

IF sy-subrc = 0

SORT ti_tadir BY obj_name devclass

SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass

IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF

- Get UserExit namesLOOP AT ti_jtab

SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E

APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area

l_fname = ti_final-member

CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include

LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP

CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP

ENDFORM get_objects

amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X

ENDFORM construir_catalogo_uexit

amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------

FORM visualizar_ampliacion

DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF

SELECT SINGLE FROM modsapWHERE member EQ l_member

IF sy-subrc IS INITIAL

Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member

ENDIF

ENDFORM visualizar_ampliacion

amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea

RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs

REFRESH r_event r_procs

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event

SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs

SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE

ENDFORM visualizar_bte

amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE

----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c

DATAl_linea(500) TYPE c

DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

MOVE lt_fields-value TO l_linea

PERFORM visualizar_bte USING p_tipol_linea

ENDFORM cargar_bte

amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface

DATAl_linea(500) TYPE c

DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE

InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF

ENDFORM visualizar_interface

amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones

CHECK p_sust IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922

ENDFORM buscar_sustituciones

amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST

ENDFORM construir_catalogo_sust

amp---------------------------------------------------------------------

amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones

ENDFORM TOP_OF_PAGE_SUST

amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4

CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_sust

amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones

CHECK p_val IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931

ENDFORM buscar_validaciones

amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID

ENDFORM construir_catalogo_val

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones

ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2

CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_val

amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto

DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF

SELECT SINGLE FROM modsapWHERE name EQ l_name

IF sy-subrc IS INITIAL

MOVE l_name TO l_member

SELECT SINGLE FROM modactWHERE member EQ l_member

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF

ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF

ENDFORM visualizar_proyecto

amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel

APPEND ti_enh

ENDIFENDIFENDIF

ENDFORM buscar_punto_ampliacioacuten

amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_enh

amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh

DATA l_obj_name TYPE enhobj-obj_name

DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name

CHECK p_enh IS NOT INITIAL

IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF

REFRESH lt_obj_name

LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP

SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name

ENDFORM buscar_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X

ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME

ENDFORM construir_catalogo_enhobj

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENHOBJ

amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM bi_se19

amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro

CLEAR ti_bdcdatati_bdcdata-program = program

ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata

ENDFORM BDC_DYNPRO

amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval

CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata

ENDFORM BDC_FIELD

amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa

DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)

CHECK ti_gb31t[] IS NOT INITIAL

DO

Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2

IF l_exit EQ XEXITENDIF

CHECK l_exit IS INITIAL

Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND

CHECK l_boolpool IS NOT INITIAL

MOVE l_boolpool TO l_repid

Visualizo el programaPERFORM visualizar_linea USING l_repid01

ENDDO

ENDFORM visualizar_programa

amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope

STATICS l_flag TYPE c

DATA l_tit(65) TYPE c

CHECK l_flag IS INITIAL

l_flag = X

WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline

4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM texto_tope

amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf

DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off

CHECK l_off IS NOT INITIAL

ADD 7 TO l_offl_cf = 500 - l_off

SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_enhspotname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1

invalid_object_type = 2OTHERS = 3

ENDFORM bi_se18

amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit

DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE

DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE

MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE

MOVE lt_fields-value TO l_nameENDIF

Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_

LOOP AT lt_tfdir

CLEARl_group l_include l_namespace l_str_area

l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl

IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl

CHECK sy-subrc IS INITIAL

Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP

CHECK l_flag IS INITIAL

La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value

ENDFORM visualizar_fm_exit

amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter

tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten

ENDFORM def_text_parameter

amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones

Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt

Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt

Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt

icon_create RESULT name text infoicon_create

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 32: buscar_ampliaciones FOROSAP

ti_bte-breakMOVE X TO l_breakENDIF

WHEN TI_ENH Punto de ampliacioacutenIF ti_enh-cf(60) EQ sfields-valuePERFORM visualizar_linea USING ti_enh-programati_enh-lineaMOVE X TO l_breakELSEIF ti_enh-tipo EQ sfields-value(4)PERFORM bi_se18 USING ti_enh-cfENDIF

WHEN TI_ENHOBJ Punto de ampliacioacutenIF ti_enhobj-enhname EQ sfields-value(30)PERFORM bi_se19 USING ti_enhobj-enhnameENDIF

WHEN TI_SUST SustitucionesIF ti_sust-substid EQ sfields-value(7) ORti_sust-subseqnr EQ sfields-value(3)PERFORM visualizar_sust USING ti_sust-substidti_sust-subseqnrENDIF

WHEN TI_VAL ValidacionesIF ti_val-valid EQ sfields-value(7) ORti_val-valseqnr EQ sfields-value(3)PERFORM visualizar_val USING ti_val-validti_val-valseqnrENDIF

WHEN TI_FDEX Field-exitIF ti_fdex-tipo EQ sfields-valueSUBMIT rsmodprf AND RETURNELSEIF ti_fdex-cf(60) EQ sfields-value Visualizo el field-exitCALL FUNCTION RS_FUNCTION_SHOWEXPORTINGfuncname = ti_fdex-cf

CALL FUNCTION RS_NAVIGATION_MONITORENDIF

WHEN TI_CIMP Customer implementation

CASE sfields-fieldnameWHEN ENHNAMEPERFORM bi_se19 USING ti_cimp-enhnameWHEN ENHINCLUDEPERFORM visualizar_enh_cf USING ti_cimp-enhinclude

WHEN OTHERS DO NOTHING ENDCASE

WHEN OTHERS DO NOTHING ENDCASE

WHEN OTHERS DO NOTHING ENDCASE

IF l_break IS NOT INITIAL AND sfields-tabname NE TI_CIMPWAIT UP TO 1 SECONDSPERFORM cargar_breakENDIFsfields-refresh = X

ENDFORM user_command

amp---------------------------------------------------------------------amp Form visualizar_lineaamp--------------------------------------------------------------------- Visualizo la linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_linea USING p_programa TYPE sy-repidp_linea

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_programaobject_type = c_typeposition = p_lineaEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM visualizar_linea

amp---------------------------------------------------------------------amp Form buscar_exitamp--------------------------------------------------------------------- Buscar USER-EXIT----------------------------------------------------------------------FORM buscar_exit

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN USER-EXITSEARCH ti_programa-cf FOR c_user_exit- SE ENCONTRO UN USER-EXIT Y SE VERIFICA SI LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS PERFORMSEARCH ti_programa-cf FOR c_performCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LAS ASIGNACIONESSEARCH ti_programa-cf FOR c_igualCHECK sy-subrc NE 0

CLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INIacuteCIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF

ENDFORM buscar_exit

amp---------------------------------------------------------------------amp Form buscar_badiamp--------------------------------------------------------------------- Buscar BADI----------------------------------------------------------------------FORM buscar_badi

DATAl_subrc LIKE sy-subrc

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BADISEARCH ti_programa-cf FOR c_badi- SE ENCONTRO UNA BADI Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

SEARCH ti_programa-cf FOR c_includeIF sy-subrc NE 0CLEAR l_subrcSEARCH ti_programa-cf FOR c_methodIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_funcao_2IF sy-subrc NE 0SEARCH ti_programa-cf FOR c_performIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_type_refIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_formMOVE 4 TO l_subrcENDIFENDIFENDIFENDIF

IF l_subrc EQ 0CLEAR ti_badi

- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIFELSECHECK p_handl IS NOT INITIAL- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA INSTANCIA DE- UNA BADISEARCH ti_programa-cf FOR c_handler- SE ENCONTRO UNA INSTANCIA DE IMPLEMENACIOacuteN Y SE VERIFICA SI LA LINEA- NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

SEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0CLEAR ti_badi- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIF

ENDFORM buscar_badi

amp---------------------------------------------------------------------amp Form buscar_bteamp--------------------------------------------------------------------- Buscar BTE----------------------------------------------------------------------FORM buscar_bte

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OPEN_FI_PERFORM

- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endform

CHECK sy-subrc NE 0

CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte1- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OUTBOUND_CALL

- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0

CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF

ENDFORM buscar_bte

amp---------------------------------------------------------------------amp Form repid_f4amp--------------------------------------------------------------------- Ejecuto el F4 para buscar programas----------------------------------------------------------------------FORM repid_f4

CALL FUNCTION REPOSITORY_INFO_SYSTEM_F4EXPORTINGobject_type = PROGobject_name = p_progsuppress_selection = XIMPORTINGobject_name_selected = p_progEXCEPTIONS

cancel = 1wrong_type = 2OTHERS = 3

ENDFORM repid_f4

amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf

DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

SEARCH p_cf FOR 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 INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

READ TABLE lt_cf INDEX 4

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

CHECK sy-subrc IS INITIAL

Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten

textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer

CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4

IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF

WHEN OTHERS Do Nothing ENDCASE

ENDFORM visualizar_badi

amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf

DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

CLEAR d010inc modsap modact

Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid

IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF

SEARCH p_cf FOR c_enhance

CHECK sy-subrc IS INITIAL

REFRESH lt_cf

l_cf = 500 - sy-fdpos

MOVE p_cf+sy-fdpos(l_cf) TO l_linea

SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3

TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS

Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _

Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit

CHECK sy-subrc IS INITIAL

Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM

modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3

ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname

CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ENDIF

ENDFORM visualizar_exit

amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit

DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo

DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe

DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE

CHECK p_fdex IS NOT INITIAL

CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe

MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex

IF p_prog IS NOT INITIAL

MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF

Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog

LOOP AT lt_d020s

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

REFRESH lt_d021s

Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4

Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X

SEARCH lt_d021s-fnam FOR -

IF sy-subrc IS INITIAL

MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum

Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname

APPEND lt_campo

ENDIF

ENDLOOPENDLOOP

CHECK lt_campo[] IS NOT INITIAL

SORT lt_campo BY repid dnum tabname fieldname

DELETE ADJACENT DUPLICATES FROM lt_campo

Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname

SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l

LOOP AT lt_dd03l

CLEAR tddir tddirs

SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname

CHECK sy-subrc IS INITIAL

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog

CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF

Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf

IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF

READ TABLE lt_fe WITH KEY cf = lt_fe-cf

CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP

LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex

ENDLOOP

ENDFORM buscar_field_exit

amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf

DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c

SEARCH p_cf FOR c_bte

IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ELSE

SEARCH p_cf FOR c_bte1

CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ENDIF

IF l_tipo IS NOT INITIAL

PERFORM visualizar_bte USING l_tipol_linea

ELSECALL TRANSACTION FIBFENDIF

ENDFORM fibf

amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT

EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM breakpoint

amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_badi

amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE

i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_bte

amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X TIPO X X c_text_05CF X c_text_04

ENDFORM construir_catalogo_FDEX

amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc

DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

CHECK lt_break[] IS NOT INITIAL

IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix

MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF

IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix

MOVEti_badi-linea TO l_lineti_badi-programa TO l_program

READ TABLE lt_break INTO wa_break

WITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF

IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix

MOVEti_bte-linea TO l_lineti_bte-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF

ENDFORM cargar_break

amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

DATAl_tabix TYPE sy-tabix

l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

SELECT SINGLE FROM d010incWHERE include = p_programa

IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF

MOVEp_linea TO l_linep_programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM asignar_break

amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit

IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF

PERFORM get_objects Get Objects

ENDFORM buscar_user_exit

amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects

DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area

DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix

SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog

IF sy-subrc = 0

SORT ti_tadir BY obj_name devclass

SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass

IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF

- Get UserExit namesLOOP AT ti_jtab

SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E

APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area

l_fname = ti_final-member

CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include

LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP

CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP

ENDFORM get_objects

amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X

ENDFORM construir_catalogo_uexit

amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------

FORM visualizar_ampliacion

DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF

SELECT SINGLE FROM modsapWHERE member EQ l_member

IF sy-subrc IS INITIAL

Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member

ENDIF

ENDFORM visualizar_ampliacion

amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea

RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs

REFRESH r_event r_procs

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event

SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs

SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE

ENDFORM visualizar_bte

amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE

----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c

DATAl_linea(500) TYPE c

DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

MOVE lt_fields-value TO l_linea

PERFORM visualizar_bte USING p_tipol_linea

ENDFORM cargar_bte

amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface

DATAl_linea(500) TYPE c

DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE

InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF

ENDFORM visualizar_interface

amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones

CHECK p_sust IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922

ENDFORM buscar_sustituciones

amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST

ENDFORM construir_catalogo_sust

amp---------------------------------------------------------------------

amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones

ENDFORM TOP_OF_PAGE_SUST

amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4

CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_sust

amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones

CHECK p_val IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931

ENDFORM buscar_validaciones

amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID

ENDFORM construir_catalogo_val

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones

ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2

CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_val

amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto

DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF

SELECT SINGLE FROM modsapWHERE name EQ l_name

IF sy-subrc IS INITIAL

MOVE l_name TO l_member

SELECT SINGLE FROM modactWHERE member EQ l_member

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF

ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF

ENDFORM visualizar_proyecto

amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel

APPEND ti_enh

ENDIFENDIFENDIF

ENDFORM buscar_punto_ampliacioacuten

amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_enh

amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh

DATA l_obj_name TYPE enhobj-obj_name

DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name

CHECK p_enh IS NOT INITIAL

IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF

REFRESH lt_obj_name

LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP

SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name

ENDFORM buscar_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X

ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME

ENDFORM construir_catalogo_enhobj

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENHOBJ

amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM bi_se19

amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro

CLEAR ti_bdcdatati_bdcdata-program = program

ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata

ENDFORM BDC_DYNPRO

amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval

CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata

ENDFORM BDC_FIELD

amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa

DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)

CHECK ti_gb31t[] IS NOT INITIAL

DO

Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2

IF l_exit EQ XEXITENDIF

CHECK l_exit IS INITIAL

Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND

CHECK l_boolpool IS NOT INITIAL

MOVE l_boolpool TO l_repid

Visualizo el programaPERFORM visualizar_linea USING l_repid01

ENDDO

ENDFORM visualizar_programa

amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope

STATICS l_flag TYPE c

DATA l_tit(65) TYPE c

CHECK l_flag IS INITIAL

l_flag = X

WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline

4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM texto_tope

amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf

DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off

CHECK l_off IS NOT INITIAL

ADD 7 TO l_offl_cf = 500 - l_off

SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_enhspotname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1

invalid_object_type = 2OTHERS = 3

ENDFORM bi_se18

amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit

DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE

DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE

MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE

MOVE lt_fields-value TO l_nameENDIF

Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_

LOOP AT lt_tfdir

CLEARl_group l_include l_namespace l_str_area

l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl

IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl

CHECK sy-subrc IS INITIAL

Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP

CHECK l_flag IS INITIAL

La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value

ENDFORM visualizar_fm_exit

amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter

tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten

ENDFORM def_text_parameter

amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones

Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt

Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt

Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt

icon_create RESULT name text infoicon_create

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 33: buscar_ampliaciones FOROSAP

WHEN OTHERS DO NOTHING ENDCASE

WHEN OTHERS DO NOTHING ENDCASE

WHEN OTHERS DO NOTHING ENDCASE

IF l_break IS NOT INITIAL AND sfields-tabname NE TI_CIMPWAIT UP TO 1 SECONDSPERFORM cargar_breakENDIFsfields-refresh = X

ENDFORM user_command

amp---------------------------------------------------------------------amp Form visualizar_lineaamp--------------------------------------------------------------------- Visualizo la linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_linea USING p_programa TYPE sy-repidp_linea

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_programaobject_type = c_typeposition = p_lineaEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM visualizar_linea

amp---------------------------------------------------------------------amp Form buscar_exitamp--------------------------------------------------------------------- Buscar USER-EXIT----------------------------------------------------------------------FORM buscar_exit

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN USER-EXITSEARCH ti_programa-cf FOR c_user_exit- SE ENCONTRO UN USER-EXIT Y SE VERIFICA SI LA LINEA NO ESTA COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS PERFORMSEARCH ti_programa-cf FOR c_performCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LAS ASIGNACIONESSEARCH ti_programa-cf FOR c_igualCHECK sy-subrc NE 0

CLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INIacuteCIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF

ENDFORM buscar_exit

amp---------------------------------------------------------------------amp Form buscar_badiamp--------------------------------------------------------------------- Buscar BADI----------------------------------------------------------------------FORM buscar_badi

DATAl_subrc LIKE sy-subrc

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BADISEARCH ti_programa-cf FOR c_badi- SE ENCONTRO UNA BADI Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

SEARCH ti_programa-cf FOR c_includeIF sy-subrc NE 0CLEAR l_subrcSEARCH ti_programa-cf FOR c_methodIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_funcao_2IF sy-subrc NE 0SEARCH ti_programa-cf FOR c_performIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_type_refIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_formMOVE 4 TO l_subrcENDIFENDIFENDIFENDIF

IF l_subrc EQ 0CLEAR ti_badi

- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIFELSECHECK p_handl IS NOT INITIAL- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA INSTANCIA DE- UNA BADISEARCH ti_programa-cf FOR c_handler- SE ENCONTRO UNA INSTANCIA DE IMPLEMENACIOacuteN Y SE VERIFICA SI LA LINEA- NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

SEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0CLEAR ti_badi- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIF

ENDFORM buscar_badi

amp---------------------------------------------------------------------amp Form buscar_bteamp--------------------------------------------------------------------- Buscar BTE----------------------------------------------------------------------FORM buscar_bte

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OPEN_FI_PERFORM

- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endform

CHECK sy-subrc NE 0

CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte1- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OUTBOUND_CALL

- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0

CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF

ENDFORM buscar_bte

amp---------------------------------------------------------------------amp Form repid_f4amp--------------------------------------------------------------------- Ejecuto el F4 para buscar programas----------------------------------------------------------------------FORM repid_f4

CALL FUNCTION REPOSITORY_INFO_SYSTEM_F4EXPORTINGobject_type = PROGobject_name = p_progsuppress_selection = XIMPORTINGobject_name_selected = p_progEXCEPTIONS

cancel = 1wrong_type = 2OTHERS = 3

ENDFORM repid_f4

amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf

DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

SEARCH p_cf FOR 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 INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

READ TABLE lt_cf INDEX 4

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

CHECK sy-subrc IS INITIAL

Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten

textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer

CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4

IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF

WHEN OTHERS Do Nothing ENDCASE

ENDFORM visualizar_badi

amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf

DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

CLEAR d010inc modsap modact

Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid

IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF

SEARCH p_cf FOR c_enhance

CHECK sy-subrc IS INITIAL

REFRESH lt_cf

l_cf = 500 - sy-fdpos

MOVE p_cf+sy-fdpos(l_cf) TO l_linea

SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3

TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS

Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _

Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit

CHECK sy-subrc IS INITIAL

Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM

modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3

ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname

CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ENDIF

ENDFORM visualizar_exit

amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit

DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo

DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe

DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE

CHECK p_fdex IS NOT INITIAL

CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe

MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex

IF p_prog IS NOT INITIAL

MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF

Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog

LOOP AT lt_d020s

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

REFRESH lt_d021s

Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4

Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X

SEARCH lt_d021s-fnam FOR -

IF sy-subrc IS INITIAL

MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum

Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname

APPEND lt_campo

ENDIF

ENDLOOPENDLOOP

CHECK lt_campo[] IS NOT INITIAL

SORT lt_campo BY repid dnum tabname fieldname

DELETE ADJACENT DUPLICATES FROM lt_campo

Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname

SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l

LOOP AT lt_dd03l

CLEAR tddir tddirs

SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname

CHECK sy-subrc IS INITIAL

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog

CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF

Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf

IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF

READ TABLE lt_fe WITH KEY cf = lt_fe-cf

CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP

LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex

ENDLOOP

ENDFORM buscar_field_exit

amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf

DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c

SEARCH p_cf FOR c_bte

IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ELSE

SEARCH p_cf FOR c_bte1

CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ENDIF

IF l_tipo IS NOT INITIAL

PERFORM visualizar_bte USING l_tipol_linea

ELSECALL TRANSACTION FIBFENDIF

ENDFORM fibf

amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT

EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM breakpoint

amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_badi

amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE

i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_bte

amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X TIPO X X c_text_05CF X c_text_04

ENDFORM construir_catalogo_FDEX

amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc

DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

CHECK lt_break[] IS NOT INITIAL

IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix

MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF

IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix

MOVEti_badi-linea TO l_lineti_badi-programa TO l_program

READ TABLE lt_break INTO wa_break

WITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF

IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix

MOVEti_bte-linea TO l_lineti_bte-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF

ENDFORM cargar_break

amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

DATAl_tabix TYPE sy-tabix

l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

SELECT SINGLE FROM d010incWHERE include = p_programa

IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF

MOVEp_linea TO l_linep_programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM asignar_break

amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit

IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF

PERFORM get_objects Get Objects

ENDFORM buscar_user_exit

amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects

DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area

DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix

SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog

IF sy-subrc = 0

SORT ti_tadir BY obj_name devclass

SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass

IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF

- Get UserExit namesLOOP AT ti_jtab

SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E

APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area

l_fname = ti_final-member

CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include

LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP

CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP

ENDFORM get_objects

amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X

ENDFORM construir_catalogo_uexit

amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------

FORM visualizar_ampliacion

DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF

SELECT SINGLE FROM modsapWHERE member EQ l_member

IF sy-subrc IS INITIAL

Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member

ENDIF

ENDFORM visualizar_ampliacion

amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea

RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs

REFRESH r_event r_procs

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event

SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs

SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE

ENDFORM visualizar_bte

amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE

----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c

DATAl_linea(500) TYPE c

DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

MOVE lt_fields-value TO l_linea

PERFORM visualizar_bte USING p_tipol_linea

ENDFORM cargar_bte

amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface

DATAl_linea(500) TYPE c

DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE

InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF

ENDFORM visualizar_interface

amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones

CHECK p_sust IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922

ENDFORM buscar_sustituciones

amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST

ENDFORM construir_catalogo_sust

amp---------------------------------------------------------------------

amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones

ENDFORM TOP_OF_PAGE_SUST

amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4

CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_sust

amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones

CHECK p_val IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931

ENDFORM buscar_validaciones

amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID

ENDFORM construir_catalogo_val

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones

ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2

CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_val

amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto

DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF

SELECT SINGLE FROM modsapWHERE name EQ l_name

IF sy-subrc IS INITIAL

MOVE l_name TO l_member

SELECT SINGLE FROM modactWHERE member EQ l_member

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF

ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF

ENDFORM visualizar_proyecto

amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel

APPEND ti_enh

ENDIFENDIFENDIF

ENDFORM buscar_punto_ampliacioacuten

amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_enh

amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh

DATA l_obj_name TYPE enhobj-obj_name

DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name

CHECK p_enh IS NOT INITIAL

IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF

REFRESH lt_obj_name

LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP

SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name

ENDFORM buscar_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X

ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME

ENDFORM construir_catalogo_enhobj

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENHOBJ

amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM bi_se19

amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro

CLEAR ti_bdcdatati_bdcdata-program = program

ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata

ENDFORM BDC_DYNPRO

amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval

CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata

ENDFORM BDC_FIELD

amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa

DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)

CHECK ti_gb31t[] IS NOT INITIAL

DO

Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2

IF l_exit EQ XEXITENDIF

CHECK l_exit IS INITIAL

Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND

CHECK l_boolpool IS NOT INITIAL

MOVE l_boolpool TO l_repid

Visualizo el programaPERFORM visualizar_linea USING l_repid01

ENDDO

ENDFORM visualizar_programa

amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope

STATICS l_flag TYPE c

DATA l_tit(65) TYPE c

CHECK l_flag IS INITIAL

l_flag = X

WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline

4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM texto_tope

amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf

DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off

CHECK l_off IS NOT INITIAL

ADD 7 TO l_offl_cf = 500 - l_off

SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_enhspotname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1

invalid_object_type = 2OTHERS = 3

ENDFORM bi_se18

amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit

DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE

DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE

MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE

MOVE lt_fields-value TO l_nameENDIF

Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_

LOOP AT lt_tfdir

CLEARl_group l_include l_namespace l_str_area

l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl

IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl

CHECK sy-subrc IS INITIAL

Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP

CHECK l_flag IS INITIAL

La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value

ENDFORM visualizar_fm_exit

amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter

tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten

ENDFORM def_text_parameter

amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones

Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt

Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt

Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt

icon_create RESULT name text infoicon_create

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 34: buscar_ampliaciones FOROSAP

- VERIFICO QUE NO TRAIGA LOS PERFORMSEARCH ti_programa-cf FOR c_performCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LAS ASIGNACIONESSEARCH ti_programa-cf FOR c_igualCHECK sy-subrc NE 0

CLEAR ti_user_exit- REMUEVE ESPACIOS EN EL INIacuteCIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_user_exit-programac_ue TO ti_user_exit-tiposy-tabix TO ti_user_exit-lineati_programa-cf TO ti_user_exit-cfti_includes-nivel TO ti_user_exit-nivelAPPEND ti_user_exitENDIF

ENDFORM buscar_exit

amp---------------------------------------------------------------------amp Form buscar_badiamp--------------------------------------------------------------------- Buscar BADI----------------------------------------------------------------------FORM buscar_badi

DATAl_subrc LIKE sy-subrc

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BADISEARCH ti_programa-cf FOR c_badi- SE ENCONTRO UNA BADI Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

SEARCH ti_programa-cf FOR c_includeIF sy-subrc NE 0CLEAR l_subrcSEARCH ti_programa-cf FOR c_methodIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_funcao_2IF sy-subrc NE 0SEARCH ti_programa-cf FOR c_performIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_type_refIF sy-subrc NE 0SEARCH ti_programa-cf FOR c_formMOVE 4 TO l_subrcENDIFENDIFENDIFENDIF

IF l_subrc EQ 0CLEAR ti_badi

- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIFELSECHECK p_handl IS NOT INITIAL- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA INSTANCIA DE- UNA BADISEARCH ti_programa-cf FOR c_handler- SE ENCONTRO UNA INSTANCIA DE IMPLEMENACIOacuteN Y SE VERIFICA SI LA LINEA- NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

SEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0CLEAR ti_badi- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIF

ENDFORM buscar_badi

amp---------------------------------------------------------------------amp Form buscar_bteamp--------------------------------------------------------------------- Buscar BTE----------------------------------------------------------------------FORM buscar_bte

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OPEN_FI_PERFORM

- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endform

CHECK sy-subrc NE 0

CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte1- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OUTBOUND_CALL

- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0

CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF

ENDFORM buscar_bte

amp---------------------------------------------------------------------amp Form repid_f4amp--------------------------------------------------------------------- Ejecuto el F4 para buscar programas----------------------------------------------------------------------FORM repid_f4

CALL FUNCTION REPOSITORY_INFO_SYSTEM_F4EXPORTINGobject_type = PROGobject_name = p_progsuppress_selection = XIMPORTINGobject_name_selected = p_progEXCEPTIONS

cancel = 1wrong_type = 2OTHERS = 3

ENDFORM repid_f4

amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf

DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

SEARCH p_cf FOR 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 INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

READ TABLE lt_cf INDEX 4

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

CHECK sy-subrc IS INITIAL

Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten

textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer

CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4

IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF

WHEN OTHERS Do Nothing ENDCASE

ENDFORM visualizar_badi

amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf

DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

CLEAR d010inc modsap modact

Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid

IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF

SEARCH p_cf FOR c_enhance

CHECK sy-subrc IS INITIAL

REFRESH lt_cf

l_cf = 500 - sy-fdpos

MOVE p_cf+sy-fdpos(l_cf) TO l_linea

SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3

TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS

Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _

Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit

CHECK sy-subrc IS INITIAL

Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM

modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3

ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname

CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ENDIF

ENDFORM visualizar_exit

amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit

DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo

DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe

DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE

CHECK p_fdex IS NOT INITIAL

CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe

MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex

IF p_prog IS NOT INITIAL

MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF

Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog

LOOP AT lt_d020s

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

REFRESH lt_d021s

Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4

Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X

SEARCH lt_d021s-fnam FOR -

IF sy-subrc IS INITIAL

MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum

Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname

APPEND lt_campo

ENDIF

ENDLOOPENDLOOP

CHECK lt_campo[] IS NOT INITIAL

SORT lt_campo BY repid dnum tabname fieldname

DELETE ADJACENT DUPLICATES FROM lt_campo

Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname

SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l

LOOP AT lt_dd03l

CLEAR tddir tddirs

SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname

CHECK sy-subrc IS INITIAL

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog

CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF

Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf

IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF

READ TABLE lt_fe WITH KEY cf = lt_fe-cf

CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP

LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex

ENDLOOP

ENDFORM buscar_field_exit

amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf

DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c

SEARCH p_cf FOR c_bte

IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ELSE

SEARCH p_cf FOR c_bte1

CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ENDIF

IF l_tipo IS NOT INITIAL

PERFORM visualizar_bte USING l_tipol_linea

ELSECALL TRANSACTION FIBFENDIF

ENDFORM fibf

amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT

EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM breakpoint

amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_badi

amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE

i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_bte

amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X TIPO X X c_text_05CF X c_text_04

ENDFORM construir_catalogo_FDEX

amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc

DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

CHECK lt_break[] IS NOT INITIAL

IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix

MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF

IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix

MOVEti_badi-linea TO l_lineti_badi-programa TO l_program

READ TABLE lt_break INTO wa_break

WITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF

IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix

MOVEti_bte-linea TO l_lineti_bte-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF

ENDFORM cargar_break

amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

DATAl_tabix TYPE sy-tabix

l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

SELECT SINGLE FROM d010incWHERE include = p_programa

IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF

MOVEp_linea TO l_linep_programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM asignar_break

amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit

IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF

PERFORM get_objects Get Objects

ENDFORM buscar_user_exit

amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects

DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area

DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix

SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog

IF sy-subrc = 0

SORT ti_tadir BY obj_name devclass

SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass

IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF

- Get UserExit namesLOOP AT ti_jtab

SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E

APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area

l_fname = ti_final-member

CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include

LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP

CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP

ENDFORM get_objects

amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X

ENDFORM construir_catalogo_uexit

amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------

FORM visualizar_ampliacion

DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF

SELECT SINGLE FROM modsapWHERE member EQ l_member

IF sy-subrc IS INITIAL

Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member

ENDIF

ENDFORM visualizar_ampliacion

amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea

RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs

REFRESH r_event r_procs

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event

SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs

SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE

ENDFORM visualizar_bte

amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE

----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c

DATAl_linea(500) TYPE c

DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

MOVE lt_fields-value TO l_linea

PERFORM visualizar_bte USING p_tipol_linea

ENDFORM cargar_bte

amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface

DATAl_linea(500) TYPE c

DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE

InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF

ENDFORM visualizar_interface

amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones

CHECK p_sust IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922

ENDFORM buscar_sustituciones

amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST

ENDFORM construir_catalogo_sust

amp---------------------------------------------------------------------

amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones

ENDFORM TOP_OF_PAGE_SUST

amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4

CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_sust

amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones

CHECK p_val IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931

ENDFORM buscar_validaciones

amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID

ENDFORM construir_catalogo_val

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones

ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2

CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_val

amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto

DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF

SELECT SINGLE FROM modsapWHERE name EQ l_name

IF sy-subrc IS INITIAL

MOVE l_name TO l_member

SELECT SINGLE FROM modactWHERE member EQ l_member

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF

ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF

ENDFORM visualizar_proyecto

amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel

APPEND ti_enh

ENDIFENDIFENDIF

ENDFORM buscar_punto_ampliacioacuten

amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_enh

amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh

DATA l_obj_name TYPE enhobj-obj_name

DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name

CHECK p_enh IS NOT INITIAL

IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF

REFRESH lt_obj_name

LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP

SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name

ENDFORM buscar_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X

ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME

ENDFORM construir_catalogo_enhobj

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENHOBJ

amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM bi_se19

amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro

CLEAR ti_bdcdatati_bdcdata-program = program

ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata

ENDFORM BDC_DYNPRO

amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval

CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata

ENDFORM BDC_FIELD

amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa

DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)

CHECK ti_gb31t[] IS NOT INITIAL

DO

Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2

IF l_exit EQ XEXITENDIF

CHECK l_exit IS INITIAL

Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND

CHECK l_boolpool IS NOT INITIAL

MOVE l_boolpool TO l_repid

Visualizo el programaPERFORM visualizar_linea USING l_repid01

ENDDO

ENDFORM visualizar_programa

amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope

STATICS l_flag TYPE c

DATA l_tit(65) TYPE c

CHECK l_flag IS INITIAL

l_flag = X

WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline

4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM texto_tope

amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf

DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off

CHECK l_off IS NOT INITIAL

ADD 7 TO l_offl_cf = 500 - l_off

SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_enhspotname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1

invalid_object_type = 2OTHERS = 3

ENDFORM bi_se18

amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit

DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE

DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE

MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE

MOVE lt_fields-value TO l_nameENDIF

Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_

LOOP AT lt_tfdir

CLEARl_group l_include l_namespace l_str_area

l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl

IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl

CHECK sy-subrc IS INITIAL

Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP

CHECK l_flag IS INITIAL

La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value

ENDFORM visualizar_fm_exit

amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter

tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten

ENDFORM def_text_parameter

amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones

Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt

Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt

Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt

icon_create RESULT name text infoicon_create

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 35: buscar_ampliaciones FOROSAP

- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIFELSECHECK p_handl IS NOT INITIAL- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA INSTANCIA DE- UNA BADISEARCH ti_programa-cf FOR c_handler- SE ENCONTRO UNA INSTANCIA DE IMPLEMENACIOacuteN Y SE VERIFICA SI LA LINEA- NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

SEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0CLEAR ti_badi- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_badi-programac_b TO ti_badi-tiposy-tabix TO ti_badi-lineati_programa-cf TO ti_badi-cfti_includes-nivel TO ti_badi-nivelAPPEND ti_badiENDIFENDIF

ENDFORM buscar_badi

amp---------------------------------------------------------------------amp Form buscar_bteamp--------------------------------------------------------------------- Buscar BTE----------------------------------------------------------------------FORM buscar_bte

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OPEN_FI_PERFORM

- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endform

CHECK sy-subrc NE 0

CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte1- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OUTBOUND_CALL

- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0

CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF

ENDFORM buscar_bte

amp---------------------------------------------------------------------amp Form repid_f4amp--------------------------------------------------------------------- Ejecuto el F4 para buscar programas----------------------------------------------------------------------FORM repid_f4

CALL FUNCTION REPOSITORY_INFO_SYSTEM_F4EXPORTINGobject_type = PROGobject_name = p_progsuppress_selection = XIMPORTINGobject_name_selected = p_progEXCEPTIONS

cancel = 1wrong_type = 2OTHERS = 3

ENDFORM repid_f4

amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf

DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

SEARCH p_cf FOR 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 INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

READ TABLE lt_cf INDEX 4

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

CHECK sy-subrc IS INITIAL

Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten

textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer

CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4

IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF

WHEN OTHERS Do Nothing ENDCASE

ENDFORM visualizar_badi

amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf

DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

CLEAR d010inc modsap modact

Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid

IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF

SEARCH p_cf FOR c_enhance

CHECK sy-subrc IS INITIAL

REFRESH lt_cf

l_cf = 500 - sy-fdpos

MOVE p_cf+sy-fdpos(l_cf) TO l_linea

SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3

TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS

Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _

Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit

CHECK sy-subrc IS INITIAL

Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM

modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3

ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname

CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ENDIF

ENDFORM visualizar_exit

amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit

DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo

DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe

DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE

CHECK p_fdex IS NOT INITIAL

CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe

MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex

IF p_prog IS NOT INITIAL

MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF

Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog

LOOP AT lt_d020s

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

REFRESH lt_d021s

Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4

Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X

SEARCH lt_d021s-fnam FOR -

IF sy-subrc IS INITIAL

MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum

Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname

APPEND lt_campo

ENDIF

ENDLOOPENDLOOP

CHECK lt_campo[] IS NOT INITIAL

SORT lt_campo BY repid dnum tabname fieldname

DELETE ADJACENT DUPLICATES FROM lt_campo

Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname

SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l

LOOP AT lt_dd03l

CLEAR tddir tddirs

SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname

CHECK sy-subrc IS INITIAL

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog

CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF

Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf

IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF

READ TABLE lt_fe WITH KEY cf = lt_fe-cf

CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP

LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex

ENDLOOP

ENDFORM buscar_field_exit

amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf

DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c

SEARCH p_cf FOR c_bte

IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ELSE

SEARCH p_cf FOR c_bte1

CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ENDIF

IF l_tipo IS NOT INITIAL

PERFORM visualizar_bte USING l_tipol_linea

ELSECALL TRANSACTION FIBFENDIF

ENDFORM fibf

amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT

EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM breakpoint

amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_badi

amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE

i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_bte

amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X TIPO X X c_text_05CF X c_text_04

ENDFORM construir_catalogo_FDEX

amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc

DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

CHECK lt_break[] IS NOT INITIAL

IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix

MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF

IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix

MOVEti_badi-linea TO l_lineti_badi-programa TO l_program

READ TABLE lt_break INTO wa_break

WITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF

IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix

MOVEti_bte-linea TO l_lineti_bte-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF

ENDFORM cargar_break

amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

DATAl_tabix TYPE sy-tabix

l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

SELECT SINGLE FROM d010incWHERE include = p_programa

IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF

MOVEp_linea TO l_linep_programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM asignar_break

amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit

IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF

PERFORM get_objects Get Objects

ENDFORM buscar_user_exit

amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects

DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area

DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix

SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog

IF sy-subrc = 0

SORT ti_tadir BY obj_name devclass

SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass

IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF

- Get UserExit namesLOOP AT ti_jtab

SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E

APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area

l_fname = ti_final-member

CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include

LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP

CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP

ENDFORM get_objects

amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X

ENDFORM construir_catalogo_uexit

amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------

FORM visualizar_ampliacion

DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF

SELECT SINGLE FROM modsapWHERE member EQ l_member

IF sy-subrc IS INITIAL

Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member

ENDIF

ENDFORM visualizar_ampliacion

amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea

RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs

REFRESH r_event r_procs

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event

SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs

SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE

ENDFORM visualizar_bte

amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE

----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c

DATAl_linea(500) TYPE c

DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

MOVE lt_fields-value TO l_linea

PERFORM visualizar_bte USING p_tipol_linea

ENDFORM cargar_bte

amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface

DATAl_linea(500) TYPE c

DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE

InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF

ENDFORM visualizar_interface

amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones

CHECK p_sust IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922

ENDFORM buscar_sustituciones

amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST

ENDFORM construir_catalogo_sust

amp---------------------------------------------------------------------

amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones

ENDFORM TOP_OF_PAGE_SUST

amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4

CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_sust

amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones

CHECK p_val IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931

ENDFORM buscar_validaciones

amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID

ENDFORM construir_catalogo_val

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones

ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2

CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_val

amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto

DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF

SELECT SINGLE FROM modsapWHERE name EQ l_name

IF sy-subrc IS INITIAL

MOVE l_name TO l_member

SELECT SINGLE FROM modactWHERE member EQ l_member

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF

ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF

ENDFORM visualizar_proyecto

amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel

APPEND ti_enh

ENDIFENDIFENDIF

ENDFORM buscar_punto_ampliacioacuten

amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_enh

amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh

DATA l_obj_name TYPE enhobj-obj_name

DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name

CHECK p_enh IS NOT INITIAL

IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF

REFRESH lt_obj_name

LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP

SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name

ENDFORM buscar_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X

ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME

ENDFORM construir_catalogo_enhobj

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENHOBJ

amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM bi_se19

amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro

CLEAR ti_bdcdatati_bdcdata-program = program

ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata

ENDFORM BDC_DYNPRO

amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval

CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata

ENDFORM BDC_FIELD

amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa

DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)

CHECK ti_gb31t[] IS NOT INITIAL

DO

Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2

IF l_exit EQ XEXITENDIF

CHECK l_exit IS INITIAL

Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND

CHECK l_boolpool IS NOT INITIAL

MOVE l_boolpool TO l_repid

Visualizo el programaPERFORM visualizar_linea USING l_repid01

ENDDO

ENDFORM visualizar_programa

amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope

STATICS l_flag TYPE c

DATA l_tit(65) TYPE c

CHECK l_flag IS INITIAL

l_flag = X

WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline

4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM texto_tope

amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf

DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off

CHECK l_off IS NOT INITIAL

ADD 7 TO l_offl_cf = 500 - l_off

SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_enhspotname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1

invalid_object_type = 2OTHERS = 3

ENDFORM bi_se18

amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit

DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE

DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE

MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE

MOVE lt_fields-value TO l_nameENDIF

Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_

LOOP AT lt_tfdir

CLEARl_group l_include l_namespace l_str_area

l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl

IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl

CHECK sy-subrc IS INITIAL

Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP

CHECK l_flag IS INITIAL

La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value

ENDFORM visualizar_fm_exit

amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter

tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten

ENDFORM def_text_parameter

amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones

Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt

Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt

Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt

icon_create RESULT name text infoicon_create

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 36: buscar_ampliaciones FOROSAP

CHECK sy-subrc NE 0

CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUNA BTESEARCH ti_programa-cf FOR c_bte1- SE ENCONTRO UNA BTE Y SE VERIFICA SI LA LINEA NO ESTAacute COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario OUTBOUND_CALL

- VERIFICO QUE TRAIGA EL LLAMADO A LA FUNCIOacuteN DE LA BTESEARCH ti_programa-cf FOR c_funcao_2CHECK sy-subrc EQ 0- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDFORMSEARCH ti_programa-cf FOR c_endformCHECK sy-subrc NE 0

CLEAR ti_bte- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_bte-programac_bt TO ti_bte-tiposy-tabix TO ti_bte-lineati_programa-cf TO ti_bte-cfti_includes-nivel TO ti_bte-nivelAPPEND ti_bteENDIF

ENDFORM buscar_bte

amp---------------------------------------------------------------------amp Form repid_f4amp--------------------------------------------------------------------- Ejecuto el F4 para buscar programas----------------------------------------------------------------------FORM repid_f4

CALL FUNCTION REPOSITORY_INFO_SYSTEM_F4EXPORTINGobject_type = PROGobject_name = p_progsuppress_selection = XIMPORTINGobject_name_selected = p_progEXCEPTIONS

cancel = 1wrong_type = 2OTHERS = 3

ENDFORM repid_f4

amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf

DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

SEARCH p_cf FOR 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 INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

READ TABLE lt_cf INDEX 4

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

CHECK sy-subrc IS INITIAL

Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten

textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer

CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4

IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF

WHEN OTHERS Do Nothing ENDCASE

ENDFORM visualizar_badi

amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf

DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

CLEAR d010inc modsap modact

Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid

IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF

SEARCH p_cf FOR c_enhance

CHECK sy-subrc IS INITIAL

REFRESH lt_cf

l_cf = 500 - sy-fdpos

MOVE p_cf+sy-fdpos(l_cf) TO l_linea

SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3

TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS

Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _

Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit

CHECK sy-subrc IS INITIAL

Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM

modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3

ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname

CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ENDIF

ENDFORM visualizar_exit

amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit

DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo

DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe

DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE

CHECK p_fdex IS NOT INITIAL

CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe

MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex

IF p_prog IS NOT INITIAL

MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF

Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog

LOOP AT lt_d020s

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

REFRESH lt_d021s

Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4

Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X

SEARCH lt_d021s-fnam FOR -

IF sy-subrc IS INITIAL

MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum

Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname

APPEND lt_campo

ENDIF

ENDLOOPENDLOOP

CHECK lt_campo[] IS NOT INITIAL

SORT lt_campo BY repid dnum tabname fieldname

DELETE ADJACENT DUPLICATES FROM lt_campo

Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname

SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l

LOOP AT lt_dd03l

CLEAR tddir tddirs

SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname

CHECK sy-subrc IS INITIAL

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog

CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF

Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf

IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF

READ TABLE lt_fe WITH KEY cf = lt_fe-cf

CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP

LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex

ENDLOOP

ENDFORM buscar_field_exit

amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf

DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c

SEARCH p_cf FOR c_bte

IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ELSE

SEARCH p_cf FOR c_bte1

CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ENDIF

IF l_tipo IS NOT INITIAL

PERFORM visualizar_bte USING l_tipol_linea

ELSECALL TRANSACTION FIBFENDIF

ENDFORM fibf

amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT

EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM breakpoint

amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_badi

amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE

i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_bte

amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X TIPO X X c_text_05CF X c_text_04

ENDFORM construir_catalogo_FDEX

amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc

DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

CHECK lt_break[] IS NOT INITIAL

IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix

MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF

IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix

MOVEti_badi-linea TO l_lineti_badi-programa TO l_program

READ TABLE lt_break INTO wa_break

WITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF

IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix

MOVEti_bte-linea TO l_lineti_bte-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF

ENDFORM cargar_break

amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

DATAl_tabix TYPE sy-tabix

l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

SELECT SINGLE FROM d010incWHERE include = p_programa

IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF

MOVEp_linea TO l_linep_programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM asignar_break

amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit

IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF

PERFORM get_objects Get Objects

ENDFORM buscar_user_exit

amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects

DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area

DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix

SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog

IF sy-subrc = 0

SORT ti_tadir BY obj_name devclass

SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass

IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF

- Get UserExit namesLOOP AT ti_jtab

SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E

APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area

l_fname = ti_final-member

CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include

LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP

CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP

ENDFORM get_objects

amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X

ENDFORM construir_catalogo_uexit

amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------

FORM visualizar_ampliacion

DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF

SELECT SINGLE FROM modsapWHERE member EQ l_member

IF sy-subrc IS INITIAL

Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member

ENDIF

ENDFORM visualizar_ampliacion

amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea

RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs

REFRESH r_event r_procs

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event

SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs

SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE

ENDFORM visualizar_bte

amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE

----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c

DATAl_linea(500) TYPE c

DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

MOVE lt_fields-value TO l_linea

PERFORM visualizar_bte USING p_tipol_linea

ENDFORM cargar_bte

amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface

DATAl_linea(500) TYPE c

DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE

InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF

ENDFORM visualizar_interface

amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones

CHECK p_sust IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922

ENDFORM buscar_sustituciones

amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST

ENDFORM construir_catalogo_sust

amp---------------------------------------------------------------------

amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones

ENDFORM TOP_OF_PAGE_SUST

amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4

CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_sust

amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones

CHECK p_val IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931

ENDFORM buscar_validaciones

amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID

ENDFORM construir_catalogo_val

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones

ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2

CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_val

amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto

DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF

SELECT SINGLE FROM modsapWHERE name EQ l_name

IF sy-subrc IS INITIAL

MOVE l_name TO l_member

SELECT SINGLE FROM modactWHERE member EQ l_member

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF

ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF

ENDFORM visualizar_proyecto

amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel

APPEND ti_enh

ENDIFENDIFENDIF

ENDFORM buscar_punto_ampliacioacuten

amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_enh

amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh

DATA l_obj_name TYPE enhobj-obj_name

DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name

CHECK p_enh IS NOT INITIAL

IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF

REFRESH lt_obj_name

LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP

SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name

ENDFORM buscar_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X

ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME

ENDFORM construir_catalogo_enhobj

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENHOBJ

amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM bi_se19

amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro

CLEAR ti_bdcdatati_bdcdata-program = program

ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata

ENDFORM BDC_DYNPRO

amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval

CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata

ENDFORM BDC_FIELD

amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa

DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)

CHECK ti_gb31t[] IS NOT INITIAL

DO

Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2

IF l_exit EQ XEXITENDIF

CHECK l_exit IS INITIAL

Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND

CHECK l_boolpool IS NOT INITIAL

MOVE l_boolpool TO l_repid

Visualizo el programaPERFORM visualizar_linea USING l_repid01

ENDDO

ENDFORM visualizar_programa

amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope

STATICS l_flag TYPE c

DATA l_tit(65) TYPE c

CHECK l_flag IS INITIAL

l_flag = X

WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline

4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM texto_tope

amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf

DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off

CHECK l_off IS NOT INITIAL

ADD 7 TO l_offl_cf = 500 - l_off

SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_enhspotname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1

invalid_object_type = 2OTHERS = 3

ENDFORM bi_se18

amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit

DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE

DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE

MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE

MOVE lt_fields-value TO l_nameENDIF

Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_

LOOP AT lt_tfdir

CLEARl_group l_include l_namespace l_str_area

l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl

IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl

CHECK sy-subrc IS INITIAL

Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP

CHECK l_flag IS INITIAL

La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value

ENDFORM visualizar_fm_exit

amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter

tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten

ENDFORM def_text_parameter

amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones

Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt

Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt

Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt

icon_create RESULT name text infoicon_create

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 37: buscar_ampliaciones FOROSAP

cancel = 1wrong_type = 2OTHERS = 3

ENDFORM repid_f4

amp---------------------------------------------------------------------amp Form visualizar_badiamp--------------------------------------------------------------------- Visualizo las definiciones de la BADI-------------------ढ़--------------------------------------------------FORM visualizar_badi USING p_cf LIKE ti_user_exit-cf

DATAl_answer(1)l_inter_name LIKE sxs_inter-inter_namel_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

SEARCH p_cf FOR 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 INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

READ TABLE lt_cf INDEX 4

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

CHECK sy-subrc IS INITIAL

Muestro POP-UP para seleccioacuten de si se desea visualiar la definicioacuten o la implementacioacuten de la BADICALL FUNCTION POPUP_WITH_2_BUTTONS_TO_CHOOSEEXPORTINGdefaultoption = 1diagnosetext1 = Definicioacuten BADIdiagnosetext2 = sxs_inter-exit_namediagnosetext3 = textline1 = textline2 = Defina la visualizacioacuten

textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer

CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4

IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF

WHEN OTHERS Do Nothing ENDCASE

ENDFORM visualizar_badi

amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf

DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

CLEAR d010inc modsap modact

Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid

IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF

SEARCH p_cf FOR c_enhance

CHECK sy-subrc IS INITIAL

REFRESH lt_cf

l_cf = 500 - sy-fdpos

MOVE p_cf+sy-fdpos(l_cf) TO l_linea

SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3

TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS

Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _

Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit

CHECK sy-subrc IS INITIAL

Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM

modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3

ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname

CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ENDIF

ENDFORM visualizar_exit

amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit

DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo

DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe

DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE

CHECK p_fdex IS NOT INITIAL

CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe

MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex

IF p_prog IS NOT INITIAL

MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF

Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog

LOOP AT lt_d020s

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

REFRESH lt_d021s

Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4

Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X

SEARCH lt_d021s-fnam FOR -

IF sy-subrc IS INITIAL

MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum

Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname

APPEND lt_campo

ENDIF

ENDLOOPENDLOOP

CHECK lt_campo[] IS NOT INITIAL

SORT lt_campo BY repid dnum tabname fieldname

DELETE ADJACENT DUPLICATES FROM lt_campo

Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname

SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l

LOOP AT lt_dd03l

CLEAR tddir tddirs

SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname

CHECK sy-subrc IS INITIAL

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog

CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF

Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf

IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF

READ TABLE lt_fe WITH KEY cf = lt_fe-cf

CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP

LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex

ENDLOOP

ENDFORM buscar_field_exit

amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf

DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c

SEARCH p_cf FOR c_bte

IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ELSE

SEARCH p_cf FOR c_bte1

CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ENDIF

IF l_tipo IS NOT INITIAL

PERFORM visualizar_bte USING l_tipol_linea

ELSECALL TRANSACTION FIBFENDIF

ENDFORM fibf

amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT

EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM breakpoint

amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_badi

amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE

i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_bte

amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X TIPO X X c_text_05CF X c_text_04

ENDFORM construir_catalogo_FDEX

amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc

DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

CHECK lt_break[] IS NOT INITIAL

IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix

MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF

IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix

MOVEti_badi-linea TO l_lineti_badi-programa TO l_program

READ TABLE lt_break INTO wa_break

WITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF

IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix

MOVEti_bte-linea TO l_lineti_bte-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF

ENDFORM cargar_break

amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

DATAl_tabix TYPE sy-tabix

l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

SELECT SINGLE FROM d010incWHERE include = p_programa

IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF

MOVEp_linea TO l_linep_programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM asignar_break

amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit

IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF

PERFORM get_objects Get Objects

ENDFORM buscar_user_exit

amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects

DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area

DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix

SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog

IF sy-subrc = 0

SORT ti_tadir BY obj_name devclass

SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass

IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF

- Get UserExit namesLOOP AT ti_jtab

SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E

APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area

l_fname = ti_final-member

CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include

LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP

CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP

ENDFORM get_objects

amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X

ENDFORM construir_catalogo_uexit

amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------

FORM visualizar_ampliacion

DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF

SELECT SINGLE FROM modsapWHERE member EQ l_member

IF sy-subrc IS INITIAL

Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member

ENDIF

ENDFORM visualizar_ampliacion

amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea

RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs

REFRESH r_event r_procs

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event

SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs

SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE

ENDFORM visualizar_bte

amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE

----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c

DATAl_linea(500) TYPE c

DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

MOVE lt_fields-value TO l_linea

PERFORM visualizar_bte USING p_tipol_linea

ENDFORM cargar_bte

amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface

DATAl_linea(500) TYPE c

DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE

InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF

ENDFORM visualizar_interface

amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones

CHECK p_sust IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922

ENDFORM buscar_sustituciones

amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST

ENDFORM construir_catalogo_sust

amp---------------------------------------------------------------------

amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones

ENDFORM TOP_OF_PAGE_SUST

amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4

CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_sust

amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones

CHECK p_val IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931

ENDFORM buscar_validaciones

amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID

ENDFORM construir_catalogo_val

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones

ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2

CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_val

amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto

DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF

SELECT SINGLE FROM modsapWHERE name EQ l_name

IF sy-subrc IS INITIAL

MOVE l_name TO l_member

SELECT SINGLE FROM modactWHERE member EQ l_member

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF

ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF

ENDFORM visualizar_proyecto

amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel

APPEND ti_enh

ENDIFENDIFENDIF

ENDFORM buscar_punto_ampliacioacuten

amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_enh

amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh

DATA l_obj_name TYPE enhobj-obj_name

DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name

CHECK p_enh IS NOT INITIAL

IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF

REFRESH lt_obj_name

LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP

SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name

ENDFORM buscar_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X

ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME

ENDFORM construir_catalogo_enhobj

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENHOBJ

amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM bi_se19

amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro

CLEAR ti_bdcdatati_bdcdata-program = program

ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata

ENDFORM BDC_DYNPRO

amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval

CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata

ENDFORM BDC_FIELD

amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa

DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)

CHECK ti_gb31t[] IS NOT INITIAL

DO

Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2

IF l_exit EQ XEXITENDIF

CHECK l_exit IS INITIAL

Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND

CHECK l_boolpool IS NOT INITIAL

MOVE l_boolpool TO l_repid

Visualizo el programaPERFORM visualizar_linea USING l_repid01

ENDDO

ENDFORM visualizar_programa

amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope

STATICS l_flag TYPE c

DATA l_tit(65) TYPE c

CHECK l_flag IS INITIAL

l_flag = X

WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline

4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM texto_tope

amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf

DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off

CHECK l_off IS NOT INITIAL

ADD 7 TO l_offl_cf = 500 - l_off

SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_enhspotname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1

invalid_object_type = 2OTHERS = 3

ENDFORM bi_se18

amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit

DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE

DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE

MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE

MOVE lt_fields-value TO l_nameENDIF

Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_

LOOP AT lt_tfdir

CLEARl_group l_include l_namespace l_str_area

l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl

IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl

CHECK sy-subrc IS INITIAL

Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP

CHECK l_flag IS INITIAL

La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value

ENDFORM visualizar_fm_exit

amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter

tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten

ENDFORM def_text_parameter

amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones

Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt

Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt

Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt

icon_create RESULT name text infoicon_create

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 38: buscar_ampliaciones FOROSAP

textline3 = text_option1 = Definicioacuten BADItext_option2 = Implementacioacuten BADItitel = Seleccionar tipoIMPORTINGanswer = l_answer

CASE l_answerWHEN 1 Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

WHEN 2 Visualizo la implementacioacuten de la BADICALL FUNCTION SXO_IMPL_FOR_BADI_OVEREXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSno_imps_existing = 1badi_not_existing = 2action_canceled = 3OTHERS = 4

IF sy-subrc = 1MESSAGE s380(enhancement) WITH sxs_inter-exit_nameENDIF

WHEN OTHERS Do Nothing ENDCASE

ENDFORM visualizar_badi

amp---------------------------------------------------------------------amp Form visualizar_exitamp--------------------------------------------------------------------- Visualizo el USER-EXIT---------------------------------------------------------------------- --gtP_REPID Nombre del programa --gtP_CF Linea de coacutedigo del programa----------------------------------------------------------------------FORM visualizar_exit USING p_repid LIKE sy-repidp_cf LIKE ti_user_exit-cf

DATAl_exit LIKE rs38l-namel_modname LIKE modact-namel_standard(3) TYPE cl_cf TYPE il_linea(500) TYPE c

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

CLEAR d010inc modsap modact

Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid

IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF

SEARCH p_cf FOR c_enhance

CHECK sy-subrc IS INITIAL

REFRESH lt_cf

l_cf = 500 - sy-fdpos

MOVE p_cf+sy-fdpos(l_cf) TO l_linea

SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3

TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS

Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _

Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit

CHECK sy-subrc IS INITIAL

Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM

modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3

ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname

CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ENDIF

ENDFORM visualizar_exit

amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit

DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo

DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe

DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE

CHECK p_fdex IS NOT INITIAL

CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe

MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex

IF p_prog IS NOT INITIAL

MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF

Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog

LOOP AT lt_d020s

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

REFRESH lt_d021s

Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4

Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X

SEARCH lt_d021s-fnam FOR -

IF sy-subrc IS INITIAL

MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum

Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname

APPEND lt_campo

ENDIF

ENDLOOPENDLOOP

CHECK lt_campo[] IS NOT INITIAL

SORT lt_campo BY repid dnum tabname fieldname

DELETE ADJACENT DUPLICATES FROM lt_campo

Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname

SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l

LOOP AT lt_dd03l

CLEAR tddir tddirs

SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname

CHECK sy-subrc IS INITIAL

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog

CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF

Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf

IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF

READ TABLE lt_fe WITH KEY cf = lt_fe-cf

CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP

LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex

ENDLOOP

ENDFORM buscar_field_exit

amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf

DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c

SEARCH p_cf FOR c_bte

IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ELSE

SEARCH p_cf FOR c_bte1

CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ENDIF

IF l_tipo IS NOT INITIAL

PERFORM visualizar_bte USING l_tipol_linea

ELSECALL TRANSACTION FIBFENDIF

ENDFORM fibf

amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT

EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM breakpoint

amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_badi

amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE

i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_bte

amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X TIPO X X c_text_05CF X c_text_04

ENDFORM construir_catalogo_FDEX

amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc

DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

CHECK lt_break[] IS NOT INITIAL

IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix

MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF

IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix

MOVEti_badi-linea TO l_lineti_badi-programa TO l_program

READ TABLE lt_break INTO wa_break

WITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF

IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix

MOVEti_bte-linea TO l_lineti_bte-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF

ENDFORM cargar_break

amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

DATAl_tabix TYPE sy-tabix

l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

SELECT SINGLE FROM d010incWHERE include = p_programa

IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF

MOVEp_linea TO l_linep_programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM asignar_break

amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit

IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF

PERFORM get_objects Get Objects

ENDFORM buscar_user_exit

amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects

DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area

DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix

SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog

IF sy-subrc = 0

SORT ti_tadir BY obj_name devclass

SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass

IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF

- Get UserExit namesLOOP AT ti_jtab

SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E

APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area

l_fname = ti_final-member

CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include

LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP

CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP

ENDFORM get_objects

amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X

ENDFORM construir_catalogo_uexit

amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------

FORM visualizar_ampliacion

DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF

SELECT SINGLE FROM modsapWHERE member EQ l_member

IF sy-subrc IS INITIAL

Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member

ENDIF

ENDFORM visualizar_ampliacion

amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea

RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs

REFRESH r_event r_procs

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event

SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs

SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE

ENDFORM visualizar_bte

amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE

----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c

DATAl_linea(500) TYPE c

DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

MOVE lt_fields-value TO l_linea

PERFORM visualizar_bte USING p_tipol_linea

ENDFORM cargar_bte

amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface

DATAl_linea(500) TYPE c

DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE

InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF

ENDFORM visualizar_interface

amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones

CHECK p_sust IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922

ENDFORM buscar_sustituciones

amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST

ENDFORM construir_catalogo_sust

amp---------------------------------------------------------------------

amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones

ENDFORM TOP_OF_PAGE_SUST

amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4

CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_sust

amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones

CHECK p_val IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931

ENDFORM buscar_validaciones

amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID

ENDFORM construir_catalogo_val

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones

ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2

CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_val

amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto

DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF

SELECT SINGLE FROM modsapWHERE name EQ l_name

IF sy-subrc IS INITIAL

MOVE l_name TO l_member

SELECT SINGLE FROM modactWHERE member EQ l_member

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF

ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF

ENDFORM visualizar_proyecto

amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel

APPEND ti_enh

ENDIFENDIFENDIF

ENDFORM buscar_punto_ampliacioacuten

amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_enh

amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh

DATA l_obj_name TYPE enhobj-obj_name

DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name

CHECK p_enh IS NOT INITIAL

IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF

REFRESH lt_obj_name

LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP

SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name

ENDFORM buscar_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X

ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME

ENDFORM construir_catalogo_enhobj

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENHOBJ

amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM bi_se19

amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro

CLEAR ti_bdcdatati_bdcdata-program = program

ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata

ENDFORM BDC_DYNPRO

amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval

CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata

ENDFORM BDC_FIELD

amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa

DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)

CHECK ti_gb31t[] IS NOT INITIAL

DO

Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2

IF l_exit EQ XEXITENDIF

CHECK l_exit IS INITIAL

Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND

CHECK l_boolpool IS NOT INITIAL

MOVE l_boolpool TO l_repid

Visualizo el programaPERFORM visualizar_linea USING l_repid01

ENDDO

ENDFORM visualizar_programa

amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope

STATICS l_flag TYPE c

DATA l_tit(65) TYPE c

CHECK l_flag IS INITIAL

l_flag = X

WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline

4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM texto_tope

amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf

DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off

CHECK l_off IS NOT INITIAL

ADD 7 TO l_offl_cf = 500 - l_off

SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_enhspotname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1

invalid_object_type = 2OTHERS = 3

ENDFORM bi_se18

amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit

DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE

DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE

MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE

MOVE lt_fields-value TO l_nameENDIF

Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_

LOOP AT lt_tfdir

CLEARl_group l_include l_namespace l_str_area

l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl

IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl

CHECK sy-subrc IS INITIAL

Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP

CHECK l_flag IS INITIAL

La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value

ENDFORM visualizar_fm_exit

amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter

tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten

ENDFORM def_text_parameter

amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones

Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt

Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt

Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt

icon_create RESULT name text infoicon_create

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 39: buscar_ampliaciones FOROSAP

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

CLEAR d010inc modsap modact

Obtengo el programa de controlSELECT SINGLE FROM d010incWHERE include EQ p_repid

IF sy-subrc NE 0 No se trata de un INCLUDEMOVE p_repid TO d010inc-masterENDIF

SEARCH p_cf FOR c_enhance

CHECK sy-subrc IS INITIAL

REFRESH lt_cf

l_cf = 500 - sy-fdpos

MOVE p_cf+sy-fdpos(l_cf) TO l_linea

SPLIT l_linea AT space INTO TABLE lt_cf Obtengo la posicioacuten del nuacutemero del exitREAD TABLE lt_cf INDEX 3

TRANSLATE lt_cf USING CONDENSE lt_cf NO-GAPS

Armo el nombre del exitCONCATENATE EXIT d010inc-master lt_cf INTO l_exitSEPARATED BY _

Obtengo la ampliacioacutenSELECT SINGLE FROM modsapWHERE member EQ l_exit

CHECK sy-subrc IS INITIAL

Verifico las modificacionesSELECT SINGLE FROM modactWHERE member EQ modsap-name

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOM

modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3

ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname

CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ENDIF

ENDFORM visualizar_exit

amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit

DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo

DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe

DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE

CHECK p_fdex IS NOT INITIAL

CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe

MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex

IF p_prog IS NOT INITIAL

MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF

Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog

LOOP AT lt_d020s

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

REFRESH lt_d021s

Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4

Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X

SEARCH lt_d021s-fnam FOR -

IF sy-subrc IS INITIAL

MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum

Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname

APPEND lt_campo

ENDIF

ENDLOOPENDLOOP

CHECK lt_campo[] IS NOT INITIAL

SORT lt_campo BY repid dnum tabname fieldname

DELETE ADJACENT DUPLICATES FROM lt_campo

Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname

SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l

LOOP AT lt_dd03l

CLEAR tddir tddirs

SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname

CHECK sy-subrc IS INITIAL

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog

CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF

Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf

IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF

READ TABLE lt_fe WITH KEY cf = lt_fe-cf

CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP

LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex

ENDLOOP

ENDFORM buscar_field_exit

amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf

DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c

SEARCH p_cf FOR c_bte

IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ELSE

SEARCH p_cf FOR c_bte1

CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ENDIF

IF l_tipo IS NOT INITIAL

PERFORM visualizar_bte USING l_tipol_linea

ELSECALL TRANSACTION FIBFENDIF

ENDFORM fibf

amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT

EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM breakpoint

amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_badi

amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE

i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_bte

amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X TIPO X X c_text_05CF X c_text_04

ENDFORM construir_catalogo_FDEX

amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc

DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

CHECK lt_break[] IS NOT INITIAL

IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix

MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF

IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix

MOVEti_badi-linea TO l_lineti_badi-programa TO l_program

READ TABLE lt_break INTO wa_break

WITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF

IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix

MOVEti_bte-linea TO l_lineti_bte-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF

ENDFORM cargar_break

amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

DATAl_tabix TYPE sy-tabix

l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

SELECT SINGLE FROM d010incWHERE include = p_programa

IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF

MOVEp_linea TO l_linep_programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM asignar_break

amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit

IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF

PERFORM get_objects Get Objects

ENDFORM buscar_user_exit

amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects

DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area

DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix

SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog

IF sy-subrc = 0

SORT ti_tadir BY obj_name devclass

SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass

IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF

- Get UserExit namesLOOP AT ti_jtab

SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E

APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area

l_fname = ti_final-member

CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include

LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP

CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP

ENDFORM get_objects

amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X

ENDFORM construir_catalogo_uexit

amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------

FORM visualizar_ampliacion

DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF

SELECT SINGLE FROM modsapWHERE member EQ l_member

IF sy-subrc IS INITIAL

Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member

ENDIF

ENDFORM visualizar_ampliacion

amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea

RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs

REFRESH r_event r_procs

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event

SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs

SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE

ENDFORM visualizar_bte

amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE

----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c

DATAl_linea(500) TYPE c

DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

MOVE lt_fields-value TO l_linea

PERFORM visualizar_bte USING p_tipol_linea

ENDFORM cargar_bte

amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface

DATAl_linea(500) TYPE c

DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE

InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF

ENDFORM visualizar_interface

amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones

CHECK p_sust IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922

ENDFORM buscar_sustituciones

amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST

ENDFORM construir_catalogo_sust

amp---------------------------------------------------------------------

amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones

ENDFORM TOP_OF_PAGE_SUST

amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4

CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_sust

amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones

CHECK p_val IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931

ENDFORM buscar_validaciones

amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID

ENDFORM construir_catalogo_val

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones

ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2

CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_val

amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto

DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF

SELECT SINGLE FROM modsapWHERE name EQ l_name

IF sy-subrc IS INITIAL

MOVE l_name TO l_member

SELECT SINGLE FROM modactWHERE member EQ l_member

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF

ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF

ENDFORM visualizar_proyecto

amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel

APPEND ti_enh

ENDIFENDIFENDIF

ENDFORM buscar_punto_ampliacioacuten

amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_enh

amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh

DATA l_obj_name TYPE enhobj-obj_name

DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name

CHECK p_enh IS NOT INITIAL

IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF

REFRESH lt_obj_name

LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP

SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name

ENDFORM buscar_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X

ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME

ENDFORM construir_catalogo_enhobj

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENHOBJ

amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM bi_se19

amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro

CLEAR ti_bdcdatati_bdcdata-program = program

ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata

ENDFORM BDC_DYNPRO

amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval

CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata

ENDFORM BDC_FIELD

amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa

DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)

CHECK ti_gb31t[] IS NOT INITIAL

DO

Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2

IF l_exit EQ XEXITENDIF

CHECK l_exit IS INITIAL

Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND

CHECK l_boolpool IS NOT INITIAL

MOVE l_boolpool TO l_repid

Visualizo el programaPERFORM visualizar_linea USING l_repid01

ENDDO

ENDFORM visualizar_programa

amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope

STATICS l_flag TYPE c

DATA l_tit(65) TYPE c

CHECK l_flag IS INITIAL

l_flag = X

WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline

4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM texto_tope

amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf

DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off

CHECK l_off IS NOT INITIAL

ADD 7 TO l_offl_cf = 500 - l_off

SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_enhspotname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1

invalid_object_type = 2OTHERS = 3

ENDFORM bi_se18

amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit

DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE

DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE

MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE

MOVE lt_fields-value TO l_nameENDIF

Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_

LOOP AT lt_tfdir

CLEARl_group l_include l_namespace l_str_area

l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl

IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl

CHECK sy-subrc IS INITIAL

Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP

CHECK l_flag IS INITIAL

La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value

ENDFORM visualizar_fm_exit

amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter

tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten

ENDFORM def_text_parameter

amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones

Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt

Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt

Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt

icon_create RESULT name text infoicon_create

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 40: buscar_ampliaciones FOROSAP

modname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3

ELSE No hay proyecto para la ampliacioacutenMOVEmodsap-name TO l_modname

CALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = l_modnameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ENDIF

ENDFORM visualizar_exit

amp---------------------------------------------------------------------amp Form buscar_field_exitamp--------------------------------------------------------------------- Busco los field-exits de los campos de las DYNPROs----------------------------------------------------------------------FORM buscar_field_exit

DATA BEGIN OF lt_campo OCCURS 0repid LIKE sy-repiddnum LIKE d020s-dnumtabname LIKE dd03l-tabnamefieldname LIKE dd03l-fieldnameEND OF lt_campo

DATA BEGIN OF lt_fe OCCURS 0cf(500)END OF lt_fe

DATAl_prog LIKE sy-repidlt_d020s LIKE d020s OCCURS 0 WITH HEADER LINElt_d021s LIKE d021s OCCURS 0 WITH HEADER LINElt_dd03l LIKE dd03l OCCURS 0 WITH HEADER LINE

CHECK p_fdex IS NOT INITIAL

CLEAR ti_fdexREFRESH lt_d020s lt_d021s lt_dd03l lt_fe

MOVE c_fdex TO ti_fdex-tipoAPPEND ti_fdex

IF p_prog IS NOT INITIAL

MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF

Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog

LOOP AT lt_d020s

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

REFRESH lt_d021s

Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4

Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X

SEARCH lt_d021s-fnam FOR -

IF sy-subrc IS INITIAL

MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum

Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname

APPEND lt_campo

ENDIF

ENDLOOPENDLOOP

CHECK lt_campo[] IS NOT INITIAL

SORT lt_campo BY repid dnum tabname fieldname

DELETE ADJACENT DUPLICATES FROM lt_campo

Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname

SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l

LOOP AT lt_dd03l

CLEAR tddir tddirs

SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname

CHECK sy-subrc IS INITIAL

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog

CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF

Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf

IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF

READ TABLE lt_fe WITH KEY cf = lt_fe-cf

CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP

LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex

ENDLOOP

ENDFORM buscar_field_exit

amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf

DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c

SEARCH p_cf FOR c_bte

IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ELSE

SEARCH p_cf FOR c_bte1

CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ENDIF

IF l_tipo IS NOT INITIAL

PERFORM visualizar_bte USING l_tipol_linea

ELSECALL TRANSACTION FIBFENDIF

ENDFORM fibf

amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT

EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM breakpoint

amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_badi

amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE

i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_bte

amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X TIPO X X c_text_05CF X c_text_04

ENDFORM construir_catalogo_FDEX

amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc

DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

CHECK lt_break[] IS NOT INITIAL

IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix

MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF

IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix

MOVEti_badi-linea TO l_lineti_badi-programa TO l_program

READ TABLE lt_break INTO wa_break

WITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF

IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix

MOVEti_bte-linea TO l_lineti_bte-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF

ENDFORM cargar_break

amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

DATAl_tabix TYPE sy-tabix

l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

SELECT SINGLE FROM d010incWHERE include = p_programa

IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF

MOVEp_linea TO l_linep_programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM asignar_break

amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit

IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF

PERFORM get_objects Get Objects

ENDFORM buscar_user_exit

amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects

DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area

DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix

SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog

IF sy-subrc = 0

SORT ti_tadir BY obj_name devclass

SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass

IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF

- Get UserExit namesLOOP AT ti_jtab

SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E

APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area

l_fname = ti_final-member

CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include

LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP

CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP

ENDFORM get_objects

amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X

ENDFORM construir_catalogo_uexit

amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------

FORM visualizar_ampliacion

DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF

SELECT SINGLE FROM modsapWHERE member EQ l_member

IF sy-subrc IS INITIAL

Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member

ENDIF

ENDFORM visualizar_ampliacion

amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea

RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs

REFRESH r_event r_procs

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event

SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs

SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE

ENDFORM visualizar_bte

amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE

----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c

DATAl_linea(500) TYPE c

DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

MOVE lt_fields-value TO l_linea

PERFORM visualizar_bte USING p_tipol_linea

ENDFORM cargar_bte

amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface

DATAl_linea(500) TYPE c

DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE

InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF

ENDFORM visualizar_interface

amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones

CHECK p_sust IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922

ENDFORM buscar_sustituciones

amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST

ENDFORM construir_catalogo_sust

amp---------------------------------------------------------------------

amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones

ENDFORM TOP_OF_PAGE_SUST

amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4

CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_sust

amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones

CHECK p_val IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931

ENDFORM buscar_validaciones

amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID

ENDFORM construir_catalogo_val

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones

ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2

CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_val

amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto

DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF

SELECT SINGLE FROM modsapWHERE name EQ l_name

IF sy-subrc IS INITIAL

MOVE l_name TO l_member

SELECT SINGLE FROM modactWHERE member EQ l_member

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF

ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF

ENDFORM visualizar_proyecto

amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel

APPEND ti_enh

ENDIFENDIFENDIF

ENDFORM buscar_punto_ampliacioacuten

amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_enh

amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh

DATA l_obj_name TYPE enhobj-obj_name

DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name

CHECK p_enh IS NOT INITIAL

IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF

REFRESH lt_obj_name

LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP

SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name

ENDFORM buscar_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X

ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME

ENDFORM construir_catalogo_enhobj

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENHOBJ

amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM bi_se19

amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro

CLEAR ti_bdcdatati_bdcdata-program = program

ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata

ENDFORM BDC_DYNPRO

amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval

CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata

ENDFORM BDC_FIELD

amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa

DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)

CHECK ti_gb31t[] IS NOT INITIAL

DO

Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2

IF l_exit EQ XEXITENDIF

CHECK l_exit IS INITIAL

Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND

CHECK l_boolpool IS NOT INITIAL

MOVE l_boolpool TO l_repid

Visualizo el programaPERFORM visualizar_linea USING l_repid01

ENDDO

ENDFORM visualizar_programa

amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope

STATICS l_flag TYPE c

DATA l_tit(65) TYPE c

CHECK l_flag IS INITIAL

l_flag = X

WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline

4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM texto_tope

amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf

DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off

CHECK l_off IS NOT INITIAL

ADD 7 TO l_offl_cf = 500 - l_off

SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_enhspotname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1

invalid_object_type = 2OTHERS = 3

ENDFORM bi_se18

amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit

DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE

DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE

MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE

MOVE lt_fields-value TO l_nameENDIF

Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_

LOOP AT lt_tfdir

CLEARl_group l_include l_namespace l_str_area

l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl

IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl

CHECK sy-subrc IS INITIAL

Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP

CHECK l_flag IS INITIAL

La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value

ENDFORM visualizar_fm_exit

amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter

tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten

ENDFORM def_text_parameter

amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones

Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt

Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt

Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt

icon_create RESULT name text infoicon_create

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 41: buscar_ampliaciones FOROSAP

MOVE p_prog TO l_progELSEMOVE tstc-pgmna TO l_progENDIF

Obtengo las DYNPRO del programaSELECT FROM d020sINTO CORRESPONDING FIELDS OF TABLE lt_d020sWHERE prog EQ l_prog

LOOP AT lt_d020s

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

REFRESH lt_d021s

Obtengo los campos de la DYNPROCALL FUNCTION RS_SCRP_GET_SCREEN_INFOSEXPORTINGdynnr = lt_d020s-dnumprogname = lt_d020s-progTABLESfieldlist = lt_d021sEXCEPTIONSdynpro_does_not_exist = 1no_field_list = 2cancelled = 3OTHERS = 4

Recorro solo los campos de entradasalidaLOOP AT lt_d021s WHERE ityp = COR ityp = NOR ityp = X

SEARCH lt_d021s-fnam FOR -

IF sy-subrc IS INITIAL

MOVElt_d020s-prog TO lt_campo-repidlt_d020s-dnum TO lt_campo-dnum

Separo el campo de la tabla o estructuraSPLIT lt_d021s-fnam AT - INTO lt_campo-tabnamelt_campo-fieldname

APPEND lt_campo

ENDIF

ENDLOOPENDLOOP

CHECK lt_campo[] IS NOT INITIAL

SORT lt_campo BY repid dnum tabname fieldname

DELETE ADJACENT DUPLICATES FROM lt_campo

Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname

SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l

LOOP AT lt_dd03l

CLEAR tddir tddirs

SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname

CHECK sy-subrc IS INITIAL

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog

CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF

Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf

IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF

READ TABLE lt_fe WITH KEY cf = lt_fe-cf

CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP

LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex

ENDLOOP

ENDFORM buscar_field_exit

amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf

DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c

SEARCH p_cf FOR c_bte

IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ELSE

SEARCH p_cf FOR c_bte1

CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ENDIF

IF l_tipo IS NOT INITIAL

PERFORM visualizar_bte USING l_tipol_linea

ELSECALL TRANSACTION FIBFENDIF

ENDFORM fibf

amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT

EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM breakpoint

amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_badi

amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE

i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_bte

amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X TIPO X X c_text_05CF X c_text_04

ENDFORM construir_catalogo_FDEX

amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc

DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

CHECK lt_break[] IS NOT INITIAL

IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix

MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF

IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix

MOVEti_badi-linea TO l_lineti_badi-programa TO l_program

READ TABLE lt_break INTO wa_break

WITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF

IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix

MOVEti_bte-linea TO l_lineti_bte-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF

ENDFORM cargar_break

amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

DATAl_tabix TYPE sy-tabix

l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

SELECT SINGLE FROM d010incWHERE include = p_programa

IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF

MOVEp_linea TO l_linep_programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM asignar_break

amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit

IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF

PERFORM get_objects Get Objects

ENDFORM buscar_user_exit

amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects

DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area

DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix

SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog

IF sy-subrc = 0

SORT ti_tadir BY obj_name devclass

SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass

IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF

- Get UserExit namesLOOP AT ti_jtab

SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E

APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area

l_fname = ti_final-member

CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include

LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP

CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP

ENDFORM get_objects

amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X

ENDFORM construir_catalogo_uexit

amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------

FORM visualizar_ampliacion

DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF

SELECT SINGLE FROM modsapWHERE member EQ l_member

IF sy-subrc IS INITIAL

Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member

ENDIF

ENDFORM visualizar_ampliacion

amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea

RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs

REFRESH r_event r_procs

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event

SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs

SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE

ENDFORM visualizar_bte

amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE

----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c

DATAl_linea(500) TYPE c

DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

MOVE lt_fields-value TO l_linea

PERFORM visualizar_bte USING p_tipol_linea

ENDFORM cargar_bte

amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface

DATAl_linea(500) TYPE c

DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE

InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF

ENDFORM visualizar_interface

amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones

CHECK p_sust IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922

ENDFORM buscar_sustituciones

amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST

ENDFORM construir_catalogo_sust

amp---------------------------------------------------------------------

amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones

ENDFORM TOP_OF_PAGE_SUST

amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4

CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_sust

amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones

CHECK p_val IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931

ENDFORM buscar_validaciones

amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID

ENDFORM construir_catalogo_val

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones

ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2

CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_val

amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto

DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF

SELECT SINGLE FROM modsapWHERE name EQ l_name

IF sy-subrc IS INITIAL

MOVE l_name TO l_member

SELECT SINGLE FROM modactWHERE member EQ l_member

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF

ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF

ENDFORM visualizar_proyecto

amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel

APPEND ti_enh

ENDIFENDIFENDIF

ENDFORM buscar_punto_ampliacioacuten

amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_enh

amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh

DATA l_obj_name TYPE enhobj-obj_name

DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name

CHECK p_enh IS NOT INITIAL

IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF

REFRESH lt_obj_name

LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP

SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name

ENDFORM buscar_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X

ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME

ENDFORM construir_catalogo_enhobj

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENHOBJ

amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM bi_se19

amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro

CLEAR ti_bdcdatati_bdcdata-program = program

ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata

ENDFORM BDC_DYNPRO

amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval

CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata

ENDFORM BDC_FIELD

amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa

DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)

CHECK ti_gb31t[] IS NOT INITIAL

DO

Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2

IF l_exit EQ XEXITENDIF

CHECK l_exit IS INITIAL

Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND

CHECK l_boolpool IS NOT INITIAL

MOVE l_boolpool TO l_repid

Visualizo el programaPERFORM visualizar_linea USING l_repid01

ENDDO

ENDFORM visualizar_programa

amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope

STATICS l_flag TYPE c

DATA l_tit(65) TYPE c

CHECK l_flag IS INITIAL

l_flag = X

WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline

4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM texto_tope

amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf

DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off

CHECK l_off IS NOT INITIAL

ADD 7 TO l_offl_cf = 500 - l_off

SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_enhspotname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1

invalid_object_type = 2OTHERS = 3

ENDFORM bi_se18

amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit

DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE

DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE

MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE

MOVE lt_fields-value TO l_nameENDIF

Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_

LOOP AT lt_tfdir

CLEARl_group l_include l_namespace l_str_area

l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl

IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl

CHECK sy-subrc IS INITIAL

Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP

CHECK l_flag IS INITIAL

La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value

ENDFORM visualizar_fm_exit

amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter

tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten

ENDFORM def_text_parameter

amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones

Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt

Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt

Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt

icon_create RESULT name text infoicon_create

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 42: buscar_ampliaciones FOROSAP

DELETE ADJACENT DUPLICATES FROM lt_campo

Obtengo los elementos de datosSELECT FROM dd03lINTO CORRESPONDING FIELDS OF TABLE lt_dd03lFOR ALL ENTRIES IN lt_campoWHERE tabname EQ lt_campo-tabnameAND fieldname EQ lt_campo-fieldname

SORT lt_dd03l BY rollnameDELETE ADJACENT DUPLICATES FROM lt_dd03l

LOOP AT lt_dd03l

CLEAR tddir tddirs

SELECT SINGLE FROM tddirWHERE de EQ lt_dd03l-rollname

CHECK sy-subrc IS INITIAL

DESCRIBE TABLE ti_includesPERFORM evitar_time_out USING sy-tfill

IF tddir-activ EQ S Selectivo en dynprosSELECT SINGLE FROM tddirsWHERE de EQ lt_dd03l-rollnameAND prog EQ lt_d020s-prog

CHECK sy-subrc IS INITIAL Verifico si se trata del programa en cuestioacutenENDIF

Armo la FMCONCATENATE FIELD_EXIT_ lt_dd03l-rollname INTO lt_fe-cf

IF tddirs-exitnr IS NOT INITIALCONCATENATE ti_user_exit-cf tddirs-exitnr INTO lt_fe-cfSEPARATED BY _ENDIF

READ TABLE lt_fe WITH KEY cf = lt_fe-cf

CHECK sy-subrc IS NOT INITIAL Auacuten no se encontroacute el field-exitAPPEND lt_feENDLOOP

LOOP AT lt_fe Cargo los field-exitsMOVEc_fdex TO ti_fdex-tipolt_fe-cf TO ti_fdex-cfAPPEND ti_fdex

ENDLOOP

ENDFORM buscar_field_exit

amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf

DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c

SEARCH p_cf FOR c_bte

IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ELSE

SEARCH p_cf FOR c_bte1

CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ENDIF

IF l_tipo IS NOT INITIAL

PERFORM visualizar_bte USING l_tipol_linea

ELSECALL TRANSACTION FIBFENDIF

ENDFORM fibf

amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT

EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM breakpoint

amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_badi

amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE

i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_bte

amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X TIPO X X c_text_05CF X c_text_04

ENDFORM construir_catalogo_FDEX

amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc

DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

CHECK lt_break[] IS NOT INITIAL

IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix

MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF

IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix

MOVEti_badi-linea TO l_lineti_badi-programa TO l_program

READ TABLE lt_break INTO wa_break

WITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF

IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix

MOVEti_bte-linea TO l_lineti_bte-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF

ENDFORM cargar_break

amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

DATAl_tabix TYPE sy-tabix

l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

SELECT SINGLE FROM d010incWHERE include = p_programa

IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF

MOVEp_linea TO l_linep_programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM asignar_break

amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit

IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF

PERFORM get_objects Get Objects

ENDFORM buscar_user_exit

amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects

DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area

DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix

SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog

IF sy-subrc = 0

SORT ti_tadir BY obj_name devclass

SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass

IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF

- Get UserExit namesLOOP AT ti_jtab

SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E

APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area

l_fname = ti_final-member

CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include

LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP

CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP

ENDFORM get_objects

amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X

ENDFORM construir_catalogo_uexit

amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------

FORM visualizar_ampliacion

DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF

SELECT SINGLE FROM modsapWHERE member EQ l_member

IF sy-subrc IS INITIAL

Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member

ENDIF

ENDFORM visualizar_ampliacion

amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea

RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs

REFRESH r_event r_procs

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event

SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs

SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE

ENDFORM visualizar_bte

amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE

----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c

DATAl_linea(500) TYPE c

DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

MOVE lt_fields-value TO l_linea

PERFORM visualizar_bte USING p_tipol_linea

ENDFORM cargar_bte

amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface

DATAl_linea(500) TYPE c

DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE

InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF

ENDFORM visualizar_interface

amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones

CHECK p_sust IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922

ENDFORM buscar_sustituciones

amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST

ENDFORM construir_catalogo_sust

amp---------------------------------------------------------------------

amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones

ENDFORM TOP_OF_PAGE_SUST

amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4

CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_sust

amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones

CHECK p_val IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931

ENDFORM buscar_validaciones

amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID

ENDFORM construir_catalogo_val

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones

ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2

CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_val

amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto

DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF

SELECT SINGLE FROM modsapWHERE name EQ l_name

IF sy-subrc IS INITIAL

MOVE l_name TO l_member

SELECT SINGLE FROM modactWHERE member EQ l_member

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF

ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF

ENDFORM visualizar_proyecto

amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel

APPEND ti_enh

ENDIFENDIFENDIF

ENDFORM buscar_punto_ampliacioacuten

amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_enh

amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh

DATA l_obj_name TYPE enhobj-obj_name

DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name

CHECK p_enh IS NOT INITIAL

IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF

REFRESH lt_obj_name

LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP

SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name

ENDFORM buscar_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X

ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME

ENDFORM construir_catalogo_enhobj

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENHOBJ

amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM bi_se19

amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro

CLEAR ti_bdcdatati_bdcdata-program = program

ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata

ENDFORM BDC_DYNPRO

amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval

CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata

ENDFORM BDC_FIELD

amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa

DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)

CHECK ti_gb31t[] IS NOT INITIAL

DO

Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2

IF l_exit EQ XEXITENDIF

CHECK l_exit IS INITIAL

Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND

CHECK l_boolpool IS NOT INITIAL

MOVE l_boolpool TO l_repid

Visualizo el programaPERFORM visualizar_linea USING l_repid01

ENDDO

ENDFORM visualizar_programa

amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope

STATICS l_flag TYPE c

DATA l_tit(65) TYPE c

CHECK l_flag IS INITIAL

l_flag = X

WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline

4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM texto_tope

amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf

DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off

CHECK l_off IS NOT INITIAL

ADD 7 TO l_offl_cf = 500 - l_off

SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_enhspotname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1

invalid_object_type = 2OTHERS = 3

ENDFORM bi_se18

amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit

DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE

DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE

MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE

MOVE lt_fields-value TO l_nameENDIF

Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_

LOOP AT lt_tfdir

CLEARl_group l_include l_namespace l_str_area

l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl

IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl

CHECK sy-subrc IS INITIAL

Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP

CHECK l_flag IS INITIAL

La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value

ENDFORM visualizar_fm_exit

amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter

tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten

ENDFORM def_text_parameter

amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones

Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt

Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt

Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt

icon_create RESULT name text infoicon_create

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 43: buscar_ampliaciones FOROSAP

ENDLOOP

ENDFORM buscar_field_exit

amp---------------------------------------------------------------------amp Form fibfamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_CF Coacutedigo fuente----------------------------------------------------------------------FORM fibf USING p_cf LIKE ti_bte-cf

DATAl_fdpos TYPE sy-fdposl_cf TYPE il_tipo TYPE cl_linea(500) TYPE c

SEARCH p_cf FOR c_bte

IF sy-subrc IS INITIAL OPEN_FI_PERFORMl_fdpos = sy-fdpos + 16

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ELSE

SEARCH p_cf FOR c_bte1

CHECK sy-subrc IS INITIAL OUTBOUND_CALLl_fdpos = sy-fdpos + 14

l_cf = 500 - l_fdpos

MOVE p_cf+l_fdpos(l_cf) TO l_linea

MOVE l_linea+9(1) TO l_tipo

ENDIF

IF l_tipo IS NOT INITIAL

PERFORM visualizar_bte USING l_tipol_linea

ELSECALL TRANSACTION FIBFENDIF

ENDFORM fibf

amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT

EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM breakpoint

amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_badi

amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE

i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_bte

amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X TIPO X X c_text_05CF X c_text_04

ENDFORM construir_catalogo_FDEX

amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc

DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

CHECK lt_break[] IS NOT INITIAL

IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix

MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF

IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix

MOVEti_badi-linea TO l_lineti_badi-programa TO l_program

READ TABLE lt_break INTO wa_break

WITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF

IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix

MOVEti_bte-linea TO l_lineti_bte-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF

ENDFORM cargar_break

amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

DATAl_tabix TYPE sy-tabix

l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

SELECT SINGLE FROM d010incWHERE include = p_programa

IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF

MOVEp_linea TO l_linep_programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM asignar_break

amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit

IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF

PERFORM get_objects Get Objects

ENDFORM buscar_user_exit

amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects

DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area

DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix

SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog

IF sy-subrc = 0

SORT ti_tadir BY obj_name devclass

SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass

IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF

- Get UserExit namesLOOP AT ti_jtab

SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E

APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area

l_fname = ti_final-member

CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include

LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP

CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP

ENDFORM get_objects

amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X

ENDFORM construir_catalogo_uexit

amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------

FORM visualizar_ampliacion

DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF

SELECT SINGLE FROM modsapWHERE member EQ l_member

IF sy-subrc IS INITIAL

Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member

ENDIF

ENDFORM visualizar_ampliacion

amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea

RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs

REFRESH r_event r_procs

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event

SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs

SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE

ENDFORM visualizar_bte

amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE

----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c

DATAl_linea(500) TYPE c

DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

MOVE lt_fields-value TO l_linea

PERFORM visualizar_bte USING p_tipol_linea

ENDFORM cargar_bte

amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface

DATAl_linea(500) TYPE c

DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE

InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF

ENDFORM visualizar_interface

amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones

CHECK p_sust IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922

ENDFORM buscar_sustituciones

amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST

ENDFORM construir_catalogo_sust

amp---------------------------------------------------------------------

amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones

ENDFORM TOP_OF_PAGE_SUST

amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4

CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_sust

amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones

CHECK p_val IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931

ENDFORM buscar_validaciones

amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID

ENDFORM construir_catalogo_val

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones

ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2

CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_val

amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto

DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF

SELECT SINGLE FROM modsapWHERE name EQ l_name

IF sy-subrc IS INITIAL

MOVE l_name TO l_member

SELECT SINGLE FROM modactWHERE member EQ l_member

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF

ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF

ENDFORM visualizar_proyecto

amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel

APPEND ti_enh

ENDIFENDIFENDIF

ENDFORM buscar_punto_ampliacioacuten

amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_enh

amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh

DATA l_obj_name TYPE enhobj-obj_name

DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name

CHECK p_enh IS NOT INITIAL

IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF

REFRESH lt_obj_name

LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP

SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name

ENDFORM buscar_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X

ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME

ENDFORM construir_catalogo_enhobj

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENHOBJ

amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM bi_se19

amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro

CLEAR ti_bdcdatati_bdcdata-program = program

ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata

ENDFORM BDC_DYNPRO

amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval

CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata

ENDFORM BDC_FIELD

amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa

DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)

CHECK ti_gb31t[] IS NOT INITIAL

DO

Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2

IF l_exit EQ XEXITENDIF

CHECK l_exit IS INITIAL

Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND

CHECK l_boolpool IS NOT INITIAL

MOVE l_boolpool TO l_repid

Visualizo el programaPERFORM visualizar_linea USING l_repid01

ENDDO

ENDFORM visualizar_programa

amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope

STATICS l_flag TYPE c

DATA l_tit(65) TYPE c

CHECK l_flag IS INITIAL

l_flag = X

WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline

4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM texto_tope

amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf

DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off

CHECK l_off IS NOT INITIAL

ADD 7 TO l_offl_cf = 500 - l_off

SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_enhspotname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1

invalid_object_type = 2OTHERS = 3

ENDFORM bi_se18

amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit

DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE

DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE

MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE

MOVE lt_fields-value TO l_nameENDIF

Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_

LOOP AT lt_tfdir

CLEARl_group l_include l_namespace l_str_area

l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl

IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl

CHECK sy-subrc IS INITIAL

Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP

CHECK l_flag IS INITIAL

La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value

ENDFORM visualizar_fm_exit

amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter

tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten

ENDFORM def_text_parameter

amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones

Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt

Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt

Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt

icon_create RESULT name text infoicon_create

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 44: buscar_ampliaciones FOROSAP

amp---------------------------------------------------------------------amp Form breakpointamp--------------------------------------------------------------------- Seteo los breakpoint para las intancias de las BADIs y para los eventos de las BTEs----------------------------------------------------------------------FORM breakpoint

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

IF p_badi IS NOT INITIAL AND p_handl IS NOT INITIAL Break en el meacutetodo GET_INSTANCE de la clase CL_EXITHANDLER para obtener la definiciones de las BADIsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 25program = CL_EXITHANDLER================CM001mainprogram = CL_EXITHANDLER================CPEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_bte IS NOT INITIAL Break en el moacutedulo de funciones BF_FUNCTIONS_FIND para obtener los eventos de las BTEs de procesoCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LITSRU02mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones PC_FUNCTION_FIND para obtener los eventos de las PampS (publicacioacuten y suscripcioacuten) BTEsCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 18program = LITSRU07mainprogram = SAPLITSREXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_sust IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINT

EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM breakpoint

amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_badi

amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE

i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_bte

amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X TIPO X X c_text_05CF X c_text_04

ENDFORM construir_catalogo_FDEX

amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc

DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

CHECK lt_break[] IS NOT INITIAL

IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix

MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF

IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix

MOVEti_badi-linea TO l_lineti_badi-programa TO l_program

READ TABLE lt_break INTO wa_break

WITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF

IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix

MOVEti_bte-linea TO l_lineti_bte-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF

ENDFORM cargar_break

amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

DATAl_tabix TYPE sy-tabix

l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

SELECT SINGLE FROM d010incWHERE include = p_programa

IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF

MOVEp_linea TO l_linep_programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM asignar_break

amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit

IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF

PERFORM get_objects Get Objects

ENDFORM buscar_user_exit

amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects

DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area

DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix

SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog

IF sy-subrc = 0

SORT ti_tadir BY obj_name devclass

SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass

IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF

- Get UserExit namesLOOP AT ti_jtab

SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E

APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area

l_fname = ti_final-member

CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include

LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP

CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP

ENDFORM get_objects

amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X

ENDFORM construir_catalogo_uexit

amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------

FORM visualizar_ampliacion

DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF

SELECT SINGLE FROM modsapWHERE member EQ l_member

IF sy-subrc IS INITIAL

Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member

ENDIF

ENDFORM visualizar_ampliacion

amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea

RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs

REFRESH r_event r_procs

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event

SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs

SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE

ENDFORM visualizar_bte

amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE

----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c

DATAl_linea(500) TYPE c

DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

MOVE lt_fields-value TO l_linea

PERFORM visualizar_bte USING p_tipol_linea

ENDFORM cargar_bte

amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface

DATAl_linea(500) TYPE c

DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE

InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF

ENDFORM visualizar_interface

amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones

CHECK p_sust IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922

ENDFORM buscar_sustituciones

amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST

ENDFORM construir_catalogo_sust

amp---------------------------------------------------------------------

amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones

ENDFORM TOP_OF_PAGE_SUST

amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4

CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_sust

amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones

CHECK p_val IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931

ENDFORM buscar_validaciones

amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID

ENDFORM construir_catalogo_val

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones

ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2

CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_val

amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto

DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF

SELECT SINGLE FROM modsapWHERE name EQ l_name

IF sy-subrc IS INITIAL

MOVE l_name TO l_member

SELECT SINGLE FROM modactWHERE member EQ l_member

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF

ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF

ENDFORM visualizar_proyecto

amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel

APPEND ti_enh

ENDIFENDIFENDIF

ENDFORM buscar_punto_ampliacioacuten

amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_enh

amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh

DATA l_obj_name TYPE enhobj-obj_name

DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name

CHECK p_enh IS NOT INITIAL

IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF

REFRESH lt_obj_name

LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP

SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name

ENDFORM buscar_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X

ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME

ENDFORM construir_catalogo_enhobj

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENHOBJ

amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM bi_se19

amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro

CLEAR ti_bdcdatati_bdcdata-program = program

ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata

ENDFORM BDC_DYNPRO

amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval

CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata

ENDFORM BDC_FIELD

amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa

DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)

CHECK ti_gb31t[] IS NOT INITIAL

DO

Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2

IF l_exit EQ XEXITENDIF

CHECK l_exit IS INITIAL

Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND

CHECK l_boolpool IS NOT INITIAL

MOVE l_boolpool TO l_repid

Visualizo el programaPERFORM visualizar_linea USING l_repid01

ENDDO

ENDFORM visualizar_programa

amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope

STATICS l_flag TYPE c

DATA l_tit(65) TYPE c

CHECK l_flag IS INITIAL

l_flag = X

WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline

4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM texto_tope

amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf

DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off

CHECK l_off IS NOT INITIAL

ADD 7 TO l_offl_cf = 500 - l_off

SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_enhspotname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1

invalid_object_type = 2OTHERS = 3

ENDFORM bi_se18

amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit

DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE

DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE

MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE

MOVE lt_fields-value TO l_nameENDIF

Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_

LOOP AT lt_tfdir

CLEARl_group l_include l_namespace l_str_area

l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl

IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl

CHECK sy-subrc IS INITIAL

Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP

CHECK l_flag IS INITIAL

La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value

ENDFORM visualizar_fm_exit

amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter

tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten

ENDFORM def_text_parameter

amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones

Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt

Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt

Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt

icon_create RESULT name text infoicon_create

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 45: buscar_ampliaciones FOROSAP

EXPORTINGindex = 42program = LGBL5U04mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_SUBSTITUTION_CALL del cual se desprende el llamado a las sustitucionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 21program = LGBL5U09mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

IF p_val IS NOT INITIAL Break en el moacutedulo de funciones G_VSR_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 30program = LGBL5U01mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2

Break en el moacutedulo de funciones G_VSR_MULTI_VALIDATION_CALL del cual se desprende el llamado a las validacionesCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = 15program = LGBL5U08mainprogram = SAPLGBL5EXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM breakpoint

amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_badi

amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE

i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_bte

amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X TIPO X X c_text_05CF X c_text_04

ENDFORM construir_catalogo_FDEX

amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc

DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

CHECK lt_break[] IS NOT INITIAL

IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix

MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF

IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix

MOVEti_badi-linea TO l_lineti_badi-programa TO l_program

READ TABLE lt_break INTO wa_break

WITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF

IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix

MOVEti_bte-linea TO l_lineti_bte-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF

ENDFORM cargar_break

amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

DATAl_tabix TYPE sy-tabix

l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

SELECT SINGLE FROM d010incWHERE include = p_programa

IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF

MOVEp_linea TO l_linep_programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM asignar_break

amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit

IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF

PERFORM get_objects Get Objects

ENDFORM buscar_user_exit

amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects

DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area

DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix

SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog

IF sy-subrc = 0

SORT ti_tadir BY obj_name devclass

SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass

IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF

- Get UserExit namesLOOP AT ti_jtab

SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E

APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area

l_fname = ti_final-member

CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include

LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP

CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP

ENDFORM get_objects

amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X

ENDFORM construir_catalogo_uexit

amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------

FORM visualizar_ampliacion

DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF

SELECT SINGLE FROM modsapWHERE member EQ l_member

IF sy-subrc IS INITIAL

Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member

ENDIF

ENDFORM visualizar_ampliacion

amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea

RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs

REFRESH r_event r_procs

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event

SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs

SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE

ENDFORM visualizar_bte

amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE

----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c

DATAl_linea(500) TYPE c

DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

MOVE lt_fields-value TO l_linea

PERFORM visualizar_bte USING p_tipol_linea

ENDFORM cargar_bte

amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface

DATAl_linea(500) TYPE c

DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE

InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF

ENDFORM visualizar_interface

amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones

CHECK p_sust IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922

ENDFORM buscar_sustituciones

amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST

ENDFORM construir_catalogo_sust

amp---------------------------------------------------------------------

amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones

ENDFORM TOP_OF_PAGE_SUST

amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4

CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_sust

amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones

CHECK p_val IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931

ENDFORM buscar_validaciones

amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID

ENDFORM construir_catalogo_val

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones

ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2

CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_val

amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto

DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF

SELECT SINGLE FROM modsapWHERE name EQ l_name

IF sy-subrc IS INITIAL

MOVE l_name TO l_member

SELECT SINGLE FROM modactWHERE member EQ l_member

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF

ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF

ENDFORM visualizar_proyecto

amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel

APPEND ti_enh

ENDIFENDIFENDIF

ENDFORM buscar_punto_ampliacioacuten

amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_enh

amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh

DATA l_obj_name TYPE enhobj-obj_name

DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name

CHECK p_enh IS NOT INITIAL

IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF

REFRESH lt_obj_name

LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP

SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name

ENDFORM buscar_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X

ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME

ENDFORM construir_catalogo_enhobj

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENHOBJ

amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM bi_se19

amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro

CLEAR ti_bdcdatati_bdcdata-program = program

ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata

ENDFORM BDC_DYNPRO

amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval

CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata

ENDFORM BDC_FIELD

amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa

DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)

CHECK ti_gb31t[] IS NOT INITIAL

DO

Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2

IF l_exit EQ XEXITENDIF

CHECK l_exit IS INITIAL

Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND

CHECK l_boolpool IS NOT INITIAL

MOVE l_boolpool TO l_repid

Visualizo el programaPERFORM visualizar_linea USING l_repid01

ENDDO

ENDFORM visualizar_programa

amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope

STATICS l_flag TYPE c

DATA l_tit(65) TYPE c

CHECK l_flag IS INITIAL

l_flag = X

WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline

4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM texto_tope

amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf

DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off

CHECK l_off IS NOT INITIAL

ADD 7 TO l_offl_cf = 500 - l_off

SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_enhspotname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1

invalid_object_type = 2OTHERS = 3

ENDFORM bi_se18

amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit

DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE

DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE

MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE

MOVE lt_fields-value TO l_nameENDIF

Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_

LOOP AT lt_tfdir

CLEARl_group l_include l_namespace l_str_area

l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl

IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl

CHECK sy-subrc IS INITIAL

Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP

CHECK l_flag IS INITIAL

La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value

ENDFORM visualizar_fm_exit

amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter

tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten

ENDFORM def_text_parameter

amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones

Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt

Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt

Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt

icon_create RESULT name text infoicon_create

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 46: buscar_ampliaciones FOROSAP

amp---------------------------------------------------------------------amp Form construir_catalogo_badiamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_badi

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BADIi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_badi

amp---------------------------------------------------------------------amp Form construir_catalogo_bteamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_bte

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_BTE

i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_bte

amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X TIPO X X c_text_05CF X c_text_04

ENDFORM construir_catalogo_FDEX

amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc

DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

CHECK lt_break[] IS NOT INITIAL

IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix

MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF

IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix

MOVEti_badi-linea TO l_lineti_badi-programa TO l_program

READ TABLE lt_break INTO wa_break

WITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF

IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix

MOVEti_bte-linea TO l_lineti_bte-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF

ENDFORM cargar_break

amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

DATAl_tabix TYPE sy-tabix

l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

SELECT SINGLE FROM d010incWHERE include = p_programa

IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF

MOVEp_linea TO l_linep_programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM asignar_break

amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit

IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF

PERFORM get_objects Get Objects

ENDFORM buscar_user_exit

amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects

DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area

DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix

SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog

IF sy-subrc = 0

SORT ti_tadir BY obj_name devclass

SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass

IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF

- Get UserExit namesLOOP AT ti_jtab

SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E

APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area

l_fname = ti_final-member

CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include

LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP

CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP

ENDFORM get_objects

amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X

ENDFORM construir_catalogo_uexit

amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------

FORM visualizar_ampliacion

DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF

SELECT SINGLE FROM modsapWHERE member EQ l_member

IF sy-subrc IS INITIAL

Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member

ENDIF

ENDFORM visualizar_ampliacion

amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea

RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs

REFRESH r_event r_procs

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event

SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs

SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE

ENDFORM visualizar_bte

amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE

----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c

DATAl_linea(500) TYPE c

DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

MOVE lt_fields-value TO l_linea

PERFORM visualizar_bte USING p_tipol_linea

ENDFORM cargar_bte

amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface

DATAl_linea(500) TYPE c

DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE

InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF

ENDFORM visualizar_interface

amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones

CHECK p_sust IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922

ENDFORM buscar_sustituciones

amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST

ENDFORM construir_catalogo_sust

amp---------------------------------------------------------------------

amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones

ENDFORM TOP_OF_PAGE_SUST

amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4

CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_sust

amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones

CHECK p_val IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931

ENDFORM buscar_validaciones

amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID

ENDFORM construir_catalogo_val

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones

ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2

CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_val

amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto

DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF

SELECT SINGLE FROM modsapWHERE name EQ l_name

IF sy-subrc IS INITIAL

MOVE l_name TO l_member

SELECT SINGLE FROM modactWHERE member EQ l_member

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF

ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF

ENDFORM visualizar_proyecto

amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel

APPEND ti_enh

ENDIFENDIFENDIF

ENDFORM buscar_punto_ampliacioacuten

amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_enh

amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh

DATA l_obj_name TYPE enhobj-obj_name

DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name

CHECK p_enh IS NOT INITIAL

IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF

REFRESH lt_obj_name

LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP

SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name

ENDFORM buscar_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X

ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME

ENDFORM construir_catalogo_enhobj

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENHOBJ

amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM bi_se19

amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro

CLEAR ti_bdcdatati_bdcdata-program = program

ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata

ENDFORM BDC_DYNPRO

amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval

CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata

ENDFORM BDC_FIELD

amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa

DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)

CHECK ti_gb31t[] IS NOT INITIAL

DO

Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2

IF l_exit EQ XEXITENDIF

CHECK l_exit IS INITIAL

Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND

CHECK l_boolpool IS NOT INITIAL

MOVE l_boolpool TO l_repid

Visualizo el programaPERFORM visualizar_linea USING l_repid01

ENDDO

ENDFORM visualizar_programa

amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope

STATICS l_flag TYPE c

DATA l_tit(65) TYPE c

CHECK l_flag IS INITIAL

l_flag = X

WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline

4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM texto_tope

amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf

DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off

CHECK l_off IS NOT INITIAL

ADD 7 TO l_offl_cf = 500 - l_off

SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_enhspotname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1

invalid_object_type = 2OTHERS = 3

ENDFORM bi_se18

amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit

DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE

DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE

MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE

MOVE lt_fields-value TO l_nameENDIF

Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_

LOOP AT lt_tfdir

CLEARl_group l_include l_namespace l_str_area

l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl

IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl

CHECK sy-subrc IS INITIAL

Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP

CHECK l_flag IS INITIAL

La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value

ENDFORM visualizar_fm_exit

amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter

tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten

ENDFORM def_text_parameter

amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones

Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt

Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt

Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt

icon_create RESULT name text infoicon_create

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 47: buscar_ampliaciones FOROSAP

i_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_bte

amp---------------------------------------------------------------------amp Form construir_catalogo_FDEXamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_fdex

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FDEXi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X TIPO X X c_text_05CF X c_text_04

ENDFORM construir_catalogo_FDEX

amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc

DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

CHECK lt_break[] IS NOT INITIAL

IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix

MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF

IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix

MOVEti_badi-linea TO l_lineti_badi-programa TO l_program

READ TABLE lt_break INTO wa_break

WITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF

IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix

MOVEti_bte-linea TO l_lineti_bte-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF

ENDFORM cargar_break

amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

DATAl_tabix TYPE sy-tabix

l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

SELECT SINGLE FROM d010incWHERE include = p_programa

IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF

MOVEp_linea TO l_linep_programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM asignar_break

amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit

IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF

PERFORM get_objects Get Objects

ENDFORM buscar_user_exit

amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects

DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area

DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix

SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog

IF sy-subrc = 0

SORT ti_tadir BY obj_name devclass

SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass

IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF

- Get UserExit namesLOOP AT ti_jtab

SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E

APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area

l_fname = ti_final-member

CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include

LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP

CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP

ENDFORM get_objects

amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X

ENDFORM construir_catalogo_uexit

amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------

FORM visualizar_ampliacion

DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF

SELECT SINGLE FROM modsapWHERE member EQ l_member

IF sy-subrc IS INITIAL

Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member

ENDIF

ENDFORM visualizar_ampliacion

amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea

RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs

REFRESH r_event r_procs

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event

SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs

SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE

ENDFORM visualizar_bte

amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE

----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c

DATAl_linea(500) TYPE c

DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

MOVE lt_fields-value TO l_linea

PERFORM visualizar_bte USING p_tipol_linea

ENDFORM cargar_bte

amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface

DATAl_linea(500) TYPE c

DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE

InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF

ENDFORM visualizar_interface

amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones

CHECK p_sust IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922

ENDFORM buscar_sustituciones

amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST

ENDFORM construir_catalogo_sust

amp---------------------------------------------------------------------

amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones

ENDFORM TOP_OF_PAGE_SUST

amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4

CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_sust

amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones

CHECK p_val IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931

ENDFORM buscar_validaciones

amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID

ENDFORM construir_catalogo_val

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones

ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2

CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_val

amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto

DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF

SELECT SINGLE FROM modsapWHERE name EQ l_name

IF sy-subrc IS INITIAL

MOVE l_name TO l_member

SELECT SINGLE FROM modactWHERE member EQ l_member

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF

ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF

ENDFORM visualizar_proyecto

amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel

APPEND ti_enh

ENDIFENDIFENDIF

ENDFORM buscar_punto_ampliacioacuten

amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_enh

amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh

DATA l_obj_name TYPE enhobj-obj_name

DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name

CHECK p_enh IS NOT INITIAL

IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF

REFRESH lt_obj_name

LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP

SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name

ENDFORM buscar_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X

ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME

ENDFORM construir_catalogo_enhobj

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENHOBJ

amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM bi_se19

amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro

CLEAR ti_bdcdatati_bdcdata-program = program

ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata

ENDFORM BDC_DYNPRO

amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval

CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata

ENDFORM BDC_FIELD

amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa

DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)

CHECK ti_gb31t[] IS NOT INITIAL

DO

Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2

IF l_exit EQ XEXITENDIF

CHECK l_exit IS INITIAL

Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND

CHECK l_boolpool IS NOT INITIAL

MOVE l_boolpool TO l_repid

Visualizo el programaPERFORM visualizar_linea USING l_repid01

ENDDO

ENDFORM visualizar_programa

amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope

STATICS l_flag TYPE c

DATA l_tit(65) TYPE c

CHECK l_flag IS INITIAL

l_flag = X

WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline

4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM texto_tope

amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf

DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off

CHECK l_off IS NOT INITIAL

ADD 7 TO l_offl_cf = 500 - l_off

SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_enhspotname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1

invalid_object_type = 2OTHERS = 3

ENDFORM bi_se18

amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit

DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE

DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE

MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE

MOVE lt_fields-value TO l_nameENDIF

Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_

LOOP AT lt_tfdir

CLEARl_group l_include l_namespace l_str_area

l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl

IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl

CHECK sy-subrc IS INITIAL

Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP

CHECK l_flag IS INITIAL

La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value

ENDFORM visualizar_fm_exit

amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter

tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten

ENDFORM def_text_parameter

amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones

Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt

Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt

Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt

icon_create RESULT name text infoicon_create

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 48: buscar_ampliaciones FOROSAP

amp---------------------------------------------------------------------amp Form cargar_breakamp--------------------------------------------------------------------- Cargo los break-points en las tablas correspondientes----------------------------------------------------------------------FORM cargar_break

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstruc

DATAl_tabix TYPE sy-tabixl_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

CHECK lt_break[] IS NOT INITIAL

IF p_ue IS NOT INITIALLOOP AT ti_user_exitl_tabix = sy-tabix

MOVEti_user_exit-linea TO l_lineti_user_exit-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_user_exit-breakELSEMOVE icon_space TO ti_user_exit-breakENDIFMODIFY ti_user_exit INDEX l_tabixENDLOOPENDIF

IF p_badi IS NOT INITIALLOOP AT ti_badil_tabix = sy-tabix

MOVEti_badi-linea TO l_lineti_badi-programa TO l_program

READ TABLE lt_break INTO wa_break

WITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF

IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix

MOVEti_bte-linea TO l_lineti_bte-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF

ENDFORM cargar_break

amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

DATAl_tabix TYPE sy-tabix

l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

SELECT SINGLE FROM d010incWHERE include = p_programa

IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF

MOVEp_linea TO l_linep_programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM asignar_break

amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit

IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF

PERFORM get_objects Get Objects

ENDFORM buscar_user_exit

amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects

DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area

DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix

SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog

IF sy-subrc = 0

SORT ti_tadir BY obj_name devclass

SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass

IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF

- Get UserExit namesLOOP AT ti_jtab

SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E

APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area

l_fname = ti_final-member

CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include

LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP

CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP

ENDFORM get_objects

amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X

ENDFORM construir_catalogo_uexit

amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------

FORM visualizar_ampliacion

DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF

SELECT SINGLE FROM modsapWHERE member EQ l_member

IF sy-subrc IS INITIAL

Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member

ENDIF

ENDFORM visualizar_ampliacion

amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea

RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs

REFRESH r_event r_procs

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event

SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs

SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE

ENDFORM visualizar_bte

amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE

----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c

DATAl_linea(500) TYPE c

DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

MOVE lt_fields-value TO l_linea

PERFORM visualizar_bte USING p_tipol_linea

ENDFORM cargar_bte

amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface

DATAl_linea(500) TYPE c

DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE

InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF

ENDFORM visualizar_interface

amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones

CHECK p_sust IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922

ENDFORM buscar_sustituciones

amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST

ENDFORM construir_catalogo_sust

amp---------------------------------------------------------------------

amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones

ENDFORM TOP_OF_PAGE_SUST

amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4

CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_sust

amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones

CHECK p_val IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931

ENDFORM buscar_validaciones

amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID

ENDFORM construir_catalogo_val

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones

ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2

CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_val

amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto

DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF

SELECT SINGLE FROM modsapWHERE name EQ l_name

IF sy-subrc IS INITIAL

MOVE l_name TO l_member

SELECT SINGLE FROM modactWHERE member EQ l_member

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF

ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF

ENDFORM visualizar_proyecto

amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel

APPEND ti_enh

ENDIFENDIFENDIF

ENDFORM buscar_punto_ampliacioacuten

amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_enh

amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh

DATA l_obj_name TYPE enhobj-obj_name

DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name

CHECK p_enh IS NOT INITIAL

IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF

REFRESH lt_obj_name

LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP

SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name

ENDFORM buscar_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X

ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME

ENDFORM construir_catalogo_enhobj

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENHOBJ

amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM bi_se19

amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro

CLEAR ti_bdcdatati_bdcdata-program = program

ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata

ENDFORM BDC_DYNPRO

amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval

CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata

ENDFORM BDC_FIELD

amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa

DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)

CHECK ti_gb31t[] IS NOT INITIAL

DO

Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2

IF l_exit EQ XEXITENDIF

CHECK l_exit IS INITIAL

Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND

CHECK l_boolpool IS NOT INITIAL

MOVE l_boolpool TO l_repid

Visualizo el programaPERFORM visualizar_linea USING l_repid01

ENDDO

ENDFORM visualizar_programa

amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope

STATICS l_flag TYPE c

DATA l_tit(65) TYPE c

CHECK l_flag IS INITIAL

l_flag = X

WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline

4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM texto_tope

amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf

DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off

CHECK l_off IS NOT INITIAL

ADD 7 TO l_offl_cf = 500 - l_off

SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_enhspotname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1

invalid_object_type = 2OTHERS = 3

ENDFORM bi_se18

amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit

DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE

DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE

MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE

MOVE lt_fields-value TO l_nameENDIF

Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_

LOOP AT lt_tfdir

CLEARl_group l_include l_namespace l_str_area

l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl

IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl

CHECK sy-subrc IS INITIAL

Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP

CHECK l_flag IS INITIAL

La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value

ENDFORM visualizar_fm_exit

amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter

tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten

ENDFORM def_text_parameter

amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones

Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt

Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt

Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt

icon_create RESULT name text infoicon_create

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 49: buscar_ampliaciones FOROSAP

WITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_badi-breakELSEMOVE icon_space TO ti_badi-breakENDIFMODIFY ti_badi INDEX l_tabixENDLOOPENDIF

IF p_bte IS NOT INITIALLOOP AT ti_btel_tabix = sy-tabix

MOVEti_bte-linea TO l_lineti_bte-programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIALMOVE icon_breakpoint TO ti_bte-breakELSEMOVE icon_space TO ti_bte-breakENDIFMODIFY ti_bte INDEX l_tabixENDLOOPENDIF

ENDFORM cargar_break

amp---------------------------------------------------------------------amp Form asignar_breakamp--------------------------------------------------------------------- Asigno el break a la linea---------------------------------------------------------------------- --gtP_PROGRAMA text --gtP_LINEA text --gtP_BREAK text----------------------------------------------------------------------FORM asignar_break USING p_programa TYPE sy-repidp_linea LIKE ti_bte-lineap_break TYPE icon-id

TYPES BEGIN OF showbreakpointstrucINCLUDE TYPE breakpointTYPES mainprog TYPE trdir-nametext(72)mark(1)TYPES END OF showbreakpointstrucDATA showbreakpointtab TYPE TABLE OF showbreakpointstruc

DATAl_tabix TYPE sy-tabix

l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

SELECT SINGLE FROM d010incWHERE include = p_programa

IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF

MOVEp_linea TO l_linep_programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM asignar_break

amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit

IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF

PERFORM get_objects Get Objects

ENDFORM buscar_user_exit

amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects

DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area

DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix

SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog

IF sy-subrc = 0

SORT ti_tadir BY obj_name devclass

SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass

IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF

- Get UserExit namesLOOP AT ti_jtab

SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E

APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area

l_fname = ti_final-member

CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include

LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP

CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP

ENDFORM get_objects

amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X

ENDFORM construir_catalogo_uexit

amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------

FORM visualizar_ampliacion

DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF

SELECT SINGLE FROM modsapWHERE member EQ l_member

IF sy-subrc IS INITIAL

Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member

ENDIF

ENDFORM visualizar_ampliacion

amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea

RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs

REFRESH r_event r_procs

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event

SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs

SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE

ENDFORM visualizar_bte

amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE

----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c

DATAl_linea(500) TYPE c

DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

MOVE lt_fields-value TO l_linea

PERFORM visualizar_bte USING p_tipol_linea

ENDFORM cargar_bte

amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface

DATAl_linea(500) TYPE c

DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE

InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF

ENDFORM visualizar_interface

amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones

CHECK p_sust IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922

ENDFORM buscar_sustituciones

amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST

ENDFORM construir_catalogo_sust

amp---------------------------------------------------------------------

amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones

ENDFORM TOP_OF_PAGE_SUST

amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4

CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_sust

amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones

CHECK p_val IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931

ENDFORM buscar_validaciones

amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID

ENDFORM construir_catalogo_val

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones

ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2

CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_val

amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto

DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF

SELECT SINGLE FROM modsapWHERE name EQ l_name

IF sy-subrc IS INITIAL

MOVE l_name TO l_member

SELECT SINGLE FROM modactWHERE member EQ l_member

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF

ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF

ENDFORM visualizar_proyecto

amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel

APPEND ti_enh

ENDIFENDIFENDIF

ENDFORM buscar_punto_ampliacioacuten

amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_enh

amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh

DATA l_obj_name TYPE enhobj-obj_name

DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name

CHECK p_enh IS NOT INITIAL

IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF

REFRESH lt_obj_name

LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP

SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name

ENDFORM buscar_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X

ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME

ENDFORM construir_catalogo_enhobj

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENHOBJ

amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM bi_se19

amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro

CLEAR ti_bdcdatati_bdcdata-program = program

ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata

ENDFORM BDC_DYNPRO

amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval

CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata

ENDFORM BDC_FIELD

amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa

DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)

CHECK ti_gb31t[] IS NOT INITIAL

DO

Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2

IF l_exit EQ XEXITENDIF

CHECK l_exit IS INITIAL

Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND

CHECK l_boolpool IS NOT INITIAL

MOVE l_boolpool TO l_repid

Visualizo el programaPERFORM visualizar_linea USING l_repid01

ENDDO

ENDFORM visualizar_programa

amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope

STATICS l_flag TYPE c

DATA l_tit(65) TYPE c

CHECK l_flag IS INITIAL

l_flag = X

WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline

4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM texto_tope

amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf

DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off

CHECK l_off IS NOT INITIAL

ADD 7 TO l_offl_cf = 500 - l_off

SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_enhspotname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1

invalid_object_type = 2OTHERS = 3

ENDFORM bi_se18

amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit

DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE

DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE

MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE

MOVE lt_fields-value TO l_nameENDIF

Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_

LOOP AT lt_tfdir

CLEARl_group l_include l_namespace l_str_area

l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl

IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl

CHECK sy-subrc IS INITIAL

Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP

CHECK l_flag IS INITIAL

La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value

ENDFORM visualizar_fm_exit

amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter

tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten

ENDFORM def_text_parameter

amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones

Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt

Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt

Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt

icon_create RESULT name text infoicon_create

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 50: buscar_ampliaciones FOROSAP

l_line TYPE breakpoint-linel_program TYPE breakpoint-programwa_break TYPE showbreakpointstruclt_break TYPE TABLE OF showbreakpointstruc

Obtengo todos los breakpoints marcadosCALL FUNCTION RS_GET_ALL_BREAKPOINTSTABLESbreakpointtab = lt_break

SELECT SINGLE FROM d010incWHERE include = p_programa

IF sy-subrc IS NOT INITIALMOVE p_programa TO d010inc-masterENDIF

MOVEp_linea TO l_linep_programa TO l_program

READ TABLE lt_break INTO wa_breakWITH KEY program = l_programline = l_line

IF sy-subrc IS INITIAL Borro el breakCALL FUNCTION RS_DELETE_BREAKPOINTEXPORTINGindex = p_lineamainprog = d010inc-masterprogram = p_programaELSE Seteo el breakpointCALL FUNCTION RS_SET_BREAKPOINTEXPORTINGindex = p_lineaprogram = p_programamainprogram = d010inc-masterEXCEPTIONSnot_executed = 1OTHERS = 2ENDIF

Visualizo todos los breakpointCALL FUNCTION RS_SHOW_BREAKPOINTSEXPORTINGobjektinfp = objekttypp = PGtext1p = text2p = text3p = TABLESbreakpoints = showbreakpointtab

ENDFORM asignar_break

amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit

IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF

PERFORM get_objects Get Objects

ENDFORM buscar_user_exit

amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects

DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area

DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix

SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog

IF sy-subrc = 0

SORT ti_tadir BY obj_name devclass

SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass

IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF

- Get UserExit namesLOOP AT ti_jtab

SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E

APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area

l_fname = ti_final-member

CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include

LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP

CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP

ENDFORM get_objects

amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X

ENDFORM construir_catalogo_uexit

amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------

FORM visualizar_ampliacion

DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF

SELECT SINGLE FROM modsapWHERE member EQ l_member

IF sy-subrc IS INITIAL

Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member

ENDIF

ENDFORM visualizar_ampliacion

amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea

RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs

REFRESH r_event r_procs

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event

SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs

SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE

ENDFORM visualizar_bte

amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE

----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c

DATAl_linea(500) TYPE c

DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

MOVE lt_fields-value TO l_linea

PERFORM visualizar_bte USING p_tipol_linea

ENDFORM cargar_bte

amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface

DATAl_linea(500) TYPE c

DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE

InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF

ENDFORM visualizar_interface

amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones

CHECK p_sust IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922

ENDFORM buscar_sustituciones

amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST

ENDFORM construir_catalogo_sust

amp---------------------------------------------------------------------

amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones

ENDFORM TOP_OF_PAGE_SUST

amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4

CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_sust

amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones

CHECK p_val IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931

ENDFORM buscar_validaciones

amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID

ENDFORM construir_catalogo_val

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones

ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2

CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_val

amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto

DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF

SELECT SINGLE FROM modsapWHERE name EQ l_name

IF sy-subrc IS INITIAL

MOVE l_name TO l_member

SELECT SINGLE FROM modactWHERE member EQ l_member

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF

ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF

ENDFORM visualizar_proyecto

amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel

APPEND ti_enh

ENDIFENDIFENDIF

ENDFORM buscar_punto_ampliacioacuten

amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_enh

amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh

DATA l_obj_name TYPE enhobj-obj_name

DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name

CHECK p_enh IS NOT INITIAL

IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF

REFRESH lt_obj_name

LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP

SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name

ENDFORM buscar_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X

ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME

ENDFORM construir_catalogo_enhobj

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENHOBJ

amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM bi_se19

amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro

CLEAR ti_bdcdatati_bdcdata-program = program

ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata

ENDFORM BDC_DYNPRO

amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval

CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata

ENDFORM BDC_FIELD

amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa

DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)

CHECK ti_gb31t[] IS NOT INITIAL

DO

Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2

IF l_exit EQ XEXITENDIF

CHECK l_exit IS INITIAL

Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND

CHECK l_boolpool IS NOT INITIAL

MOVE l_boolpool TO l_repid

Visualizo el programaPERFORM visualizar_linea USING l_repid01

ENDDO

ENDFORM visualizar_programa

amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope

STATICS l_flag TYPE c

DATA l_tit(65) TYPE c

CHECK l_flag IS INITIAL

l_flag = X

WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline

4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM texto_tope

amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf

DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off

CHECK l_off IS NOT INITIAL

ADD 7 TO l_offl_cf = 500 - l_off

SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_enhspotname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1

invalid_object_type = 2OTHERS = 3

ENDFORM bi_se18

amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit

DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE

DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE

MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE

MOVE lt_fields-value TO l_nameENDIF

Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_

LOOP AT lt_tfdir

CLEARl_group l_include l_namespace l_str_area

l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl

IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl

CHECK sy-subrc IS INITIAL

Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP

CHECK l_flag IS INITIAL

La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value

ENDFORM visualizar_fm_exit

amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter

tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten

ENDFORM def_text_parameter

amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones

Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt

Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt

Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt

icon_create RESULT name text infoicon_create

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 51: buscar_ampliaciones FOROSAP

amp---------------------------------------------------------------------amp Form buscar_user_exitamp--------------------------------------------------------------------- Obtengo los user-exits----------------------------------------------------------------------FORM buscar_user_exit

IF p_prog IS INITIALMOVE tstc-pgmna TO p_progENDIF

PERFORM get_objects Get Objects

ENDFORM buscar_user_exit

amp---------------------------------------------------------------------amp Form get_objectsamp--------------------------------------------------------------------- Get Objects----------------------------------------------------------------------FORM get_objects

DATAl_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_area

DATA v_include LIKE rodiobj-iobjnmDATA e_t_include TYPE STANDARD TABLE OF abapsource WITH HEADER LINEDATAl_line TYPE stringl_tabix LIKE sy-tabix

SELECT obj_name devclassINTO TABLE ti_tadirFROM tadirWHERE pgmid = R3TR ANDobject = PROG ANDobj_name = p_prog

IF sy-subrc = 0

SORT ti_tadir BY obj_name devclass

SELECT obj_nameINTO TABLE ti_jtabFROM tadirFOR ALL ENTRIES IN ti_tadirWHERE pgmid = R3TR ANDobject = SMOD ANDdevclass = ti_tadir-devclass

IF sy-subrc = 0SORT ti_jtab BY obj_nameENDIFENDIF

- Get UserExit namesLOOP AT ti_jtab

SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E

APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area

l_fname = ti_final-member

CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include

LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP

CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP

ENDFORM get_objects

amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X

ENDFORM construir_catalogo_uexit

amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------

FORM visualizar_ampliacion

DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF

SELECT SINGLE FROM modsapWHERE member EQ l_member

IF sy-subrc IS INITIAL

Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member

ENDIF

ENDFORM visualizar_ampliacion

amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea

RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs

REFRESH r_event r_procs

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event

SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs

SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE

ENDFORM visualizar_bte

amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE

----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c

DATAl_linea(500) TYPE c

DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

MOVE lt_fields-value TO l_linea

PERFORM visualizar_bte USING p_tipol_linea

ENDFORM cargar_bte

amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface

DATAl_linea(500) TYPE c

DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE

InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF

ENDFORM visualizar_interface

amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones

CHECK p_sust IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922

ENDFORM buscar_sustituciones

amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST

ENDFORM construir_catalogo_sust

amp---------------------------------------------------------------------

amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones

ENDFORM TOP_OF_PAGE_SUST

amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4

CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_sust

amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones

CHECK p_val IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931

ENDFORM buscar_validaciones

amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID

ENDFORM construir_catalogo_val

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones

ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2

CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_val

amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto

DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF

SELECT SINGLE FROM modsapWHERE name EQ l_name

IF sy-subrc IS INITIAL

MOVE l_name TO l_member

SELECT SINGLE FROM modactWHERE member EQ l_member

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF

ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF

ENDFORM visualizar_proyecto

amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel

APPEND ti_enh

ENDIFENDIFENDIF

ENDFORM buscar_punto_ampliacioacuten

amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_enh

amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh

DATA l_obj_name TYPE enhobj-obj_name

DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name

CHECK p_enh IS NOT INITIAL

IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF

REFRESH lt_obj_name

LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP

SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name

ENDFORM buscar_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X

ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME

ENDFORM construir_catalogo_enhobj

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENHOBJ

amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM bi_se19

amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro

CLEAR ti_bdcdatati_bdcdata-program = program

ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata

ENDFORM BDC_DYNPRO

amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval

CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata

ENDFORM BDC_FIELD

amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa

DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)

CHECK ti_gb31t[] IS NOT INITIAL

DO

Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2

IF l_exit EQ XEXITENDIF

CHECK l_exit IS INITIAL

Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND

CHECK l_boolpool IS NOT INITIAL

MOVE l_boolpool TO l_repid

Visualizo el programaPERFORM visualizar_linea USING l_repid01

ENDDO

ENDFORM visualizar_programa

amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope

STATICS l_flag TYPE c

DATA l_tit(65) TYPE c

CHECK l_flag IS INITIAL

l_flag = X

WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline

4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM texto_tope

amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf

DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off

CHECK l_off IS NOT INITIAL

ADD 7 TO l_offl_cf = 500 - l_off

SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_enhspotname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1

invalid_object_type = 2OTHERS = 3

ENDFORM bi_se18

amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit

DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE

DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE

MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE

MOVE lt_fields-value TO l_nameENDIF

Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_

LOOP AT lt_tfdir

CLEARl_group l_include l_namespace l_str_area

l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl

IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl

CHECK sy-subrc IS INITIAL

Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP

CHECK l_flag IS INITIAL

La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value

ENDFORM visualizar_fm_exit

amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter

tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten

ENDFORM def_text_parameter

amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones

Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt

Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt

Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt

icon_create RESULT name text infoicon_create

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 52: buscar_ampliaciones FOROSAP

- Get UserExit namesLOOP AT ti_jtab

SELECT name memberINTO (ti_final-name ti_final-member)FROM modsapWHERE name = ti_jtab-obj_name ANDtyp = E

APPEND ti_finalCLEAR ti_finalENDSELECTENDLOOP- Process it_final contentsLOOP AT ti_finall_tabix = sy-tabixCLEARl_fname l_group l_include l_namespace l_str_area

l_fname = ti_final-member

CALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Get Source code of includeCLEAR v_include e_t_include e_t_include[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = e_t_include

LOOP AT e_t_includeIF e_t_include-line CS INCLUDECLEAR l_linel_line = e_t_include-lineCONDENSE l_line NO-GAPSTRANSLATE l_line USING l_line = l_line+7ti_final-include = l_lineti_final-programa = l_includeMODIFY ti_final INDEX l_tabixTRANSPORTING include programaENDIFENDLOOP

CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP

ENDFORM get_objects

amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X

ENDFORM construir_catalogo_uexit

amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------

FORM visualizar_ampliacion

DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF

SELECT SINGLE FROM modsapWHERE member EQ l_member

IF sy-subrc IS INITIAL

Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member

ENDIF

ENDFORM visualizar_ampliacion

amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea

RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs

REFRESH r_event r_procs

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event

SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs

SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE

ENDFORM visualizar_bte

amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE

----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c

DATAl_linea(500) TYPE c

DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

MOVE lt_fields-value TO l_linea

PERFORM visualizar_bte USING p_tipol_linea

ENDFORM cargar_bte

amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface

DATAl_linea(500) TYPE c

DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE

InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF

ENDFORM visualizar_interface

amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones

CHECK p_sust IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922

ENDFORM buscar_sustituciones

amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST

ENDFORM construir_catalogo_sust

amp---------------------------------------------------------------------

amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones

ENDFORM TOP_OF_PAGE_SUST

amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4

CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_sust

amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones

CHECK p_val IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931

ENDFORM buscar_validaciones

amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID

ENDFORM construir_catalogo_val

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones

ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2

CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_val

amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto

DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF

SELECT SINGLE FROM modsapWHERE name EQ l_name

IF sy-subrc IS INITIAL

MOVE l_name TO l_member

SELECT SINGLE FROM modactWHERE member EQ l_member

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF

ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF

ENDFORM visualizar_proyecto

amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel

APPEND ti_enh

ENDIFENDIFENDIF

ENDFORM buscar_punto_ampliacioacuten

amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_enh

amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh

DATA l_obj_name TYPE enhobj-obj_name

DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name

CHECK p_enh IS NOT INITIAL

IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF

REFRESH lt_obj_name

LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP

SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name

ENDFORM buscar_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X

ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME

ENDFORM construir_catalogo_enhobj

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENHOBJ

amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM bi_se19

amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro

CLEAR ti_bdcdatati_bdcdata-program = program

ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata

ENDFORM BDC_DYNPRO

amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval

CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata

ENDFORM BDC_FIELD

amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa

DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)

CHECK ti_gb31t[] IS NOT INITIAL

DO

Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2

IF l_exit EQ XEXITENDIF

CHECK l_exit IS INITIAL

Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND

CHECK l_boolpool IS NOT INITIAL

MOVE l_boolpool TO l_repid

Visualizo el programaPERFORM visualizar_linea USING l_repid01

ENDDO

ENDFORM visualizar_programa

amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope

STATICS l_flag TYPE c

DATA l_tit(65) TYPE c

CHECK l_flag IS INITIAL

l_flag = X

WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline

4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM texto_tope

amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf

DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off

CHECK l_off IS NOT INITIAL

ADD 7 TO l_offl_cf = 500 - l_off

SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_enhspotname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1

invalid_object_type = 2OTHERS = 3

ENDFORM bi_se18

amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit

DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE

DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE

MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE

MOVE lt_fields-value TO l_nameENDIF

Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_

LOOP AT lt_tfdir

CLEARl_group l_include l_namespace l_str_area

l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl

IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl

CHECK sy-subrc IS INITIAL

Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP

CHECK l_flag IS INITIAL

La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value

ENDFORM visualizar_fm_exit

amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter

tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten

ENDFORM def_text_parameter

amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones

Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt

Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt

Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt

icon_create RESULT name text infoicon_create

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 53: buscar_ampliaciones FOROSAP

CLEAR tftitSELECT SINGLE stextINTO ti_final-stextFROM tftitWHERE spras = sy-langu ANDfuncname = ti_final-memberMODIFY ti_final INDEX l_tabix TRANSPORTING stextENDIFENDIFENDLOOP

ENDFORM get_objects

amp---------------------------------------------------------------------amp Form construir_catalogo_uexitamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_uexit

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_FINALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X NAME X X MEMBER X STEXT INCLUDE X PROGRAMA X

ENDFORM construir_catalogo_uexit

amp---------------------------------------------------------------------amp Form visualizar_ampliacionamp--------------------------------------------------------------------- Visualizo la ampliacioacuten de un exit----------------------------------------------------------------------

FORM visualizar_ampliacion

DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF

SELECT SINGLE FROM modsapWHERE member EQ l_member

IF sy-subrc IS INITIAL

Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member

ENDIF

ENDFORM visualizar_ampliacion

amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea

RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs

REFRESH r_event r_procs

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event

SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs

SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE

ENDFORM visualizar_bte

amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE

----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c

DATAl_linea(500) TYPE c

DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

MOVE lt_fields-value TO l_linea

PERFORM visualizar_bte USING p_tipol_linea

ENDFORM cargar_bte

amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface

DATAl_linea(500) TYPE c

DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE

InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF

ENDFORM visualizar_interface

amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones

CHECK p_sust IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922

ENDFORM buscar_sustituciones

amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST

ENDFORM construir_catalogo_sust

amp---------------------------------------------------------------------

amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones

ENDFORM TOP_OF_PAGE_SUST

amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4

CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_sust

amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones

CHECK p_val IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931

ENDFORM buscar_validaciones

amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID

ENDFORM construir_catalogo_val

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones

ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2

CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_val

amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto

DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF

SELECT SINGLE FROM modsapWHERE name EQ l_name

IF sy-subrc IS INITIAL

MOVE l_name TO l_member

SELECT SINGLE FROM modactWHERE member EQ l_member

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF

ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF

ENDFORM visualizar_proyecto

amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel

APPEND ti_enh

ENDIFENDIFENDIF

ENDFORM buscar_punto_ampliacioacuten

amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_enh

amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh

DATA l_obj_name TYPE enhobj-obj_name

DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name

CHECK p_enh IS NOT INITIAL

IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF

REFRESH lt_obj_name

LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP

SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name

ENDFORM buscar_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X

ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME

ENDFORM construir_catalogo_enhobj

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENHOBJ

amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM bi_se19

amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro

CLEAR ti_bdcdatati_bdcdata-program = program

ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata

ENDFORM BDC_DYNPRO

amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval

CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata

ENDFORM BDC_FIELD

amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa

DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)

CHECK ti_gb31t[] IS NOT INITIAL

DO

Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2

IF l_exit EQ XEXITENDIF

CHECK l_exit IS INITIAL

Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND

CHECK l_boolpool IS NOT INITIAL

MOVE l_boolpool TO l_repid

Visualizo el programaPERFORM visualizar_linea USING l_repid01

ENDDO

ENDFORM visualizar_programa

amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope

STATICS l_flag TYPE c

DATA l_tit(65) TYPE c

CHECK l_flag IS INITIAL

l_flag = X

WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline

4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM texto_tope

amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf

DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off

CHECK l_off IS NOT INITIAL

ADD 7 TO l_offl_cf = 500 - l_off

SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_enhspotname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1

invalid_object_type = 2OTHERS = 3

ENDFORM bi_se18

amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit

DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE

DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE

MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE

MOVE lt_fields-value TO l_nameENDIF

Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_

LOOP AT lt_tfdir

CLEARl_group l_include l_namespace l_str_area

l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl

IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl

CHECK sy-subrc IS INITIAL

Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP

CHECK l_flag IS INITIAL

La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value

ENDFORM visualizar_fm_exit

amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter

tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten

ENDFORM def_text_parameter

amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones

Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt

Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt

Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt

icon_create RESULT name text infoicon_create

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 54: buscar_ampliaciones FOROSAP

FORM visualizar_ampliacion

DATAl_ret TYPE cl_member TYPE modsap-memberlt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameMEMBER TO lt_fields-fieldnameUser-Exit TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese user-exitIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_memberENDIF

SELECT SINGLE FROM modsapWHERE member EQ l_member

IF sy-subrc IS INITIAL

Visualizo la ampliacioacutenCALL FUNCTION MOD_SAP_HEADEXPORTINGmode = SHOMmodname = modsap-nameEXCEPTIONSattr_enqueued = 1text_enqueued = 2OTHERS = 3

ELSE El exit de funcioacuten amp no existeMESSAGE e015(enhancement) WITH l_member

ENDIF

ENDFORM visualizar_ampliacion

amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea

RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs

REFRESH r_event r_procs

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event

SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs

SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE

ENDFORM visualizar_bte

amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE

----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c

DATAl_linea(500) TYPE c

DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

MOVE lt_fields-value TO l_linea

PERFORM visualizar_bte USING p_tipol_linea

ENDFORM cargar_bte

amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface

DATAl_linea(500) TYPE c

DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE

InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF

ENDFORM visualizar_interface

amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones

CHECK p_sust IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922

ENDFORM buscar_sustituciones

amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST

ENDFORM construir_catalogo_sust

amp---------------------------------------------------------------------

amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones

ENDFORM TOP_OF_PAGE_SUST

amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4

CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_sust

amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones

CHECK p_val IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931

ENDFORM buscar_validaciones

amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID

ENDFORM construir_catalogo_val

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones

ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2

CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_val

amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto

DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF

SELECT SINGLE FROM modsapWHERE name EQ l_name

IF sy-subrc IS INITIAL

MOVE l_name TO l_member

SELECT SINGLE FROM modactWHERE member EQ l_member

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF

ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF

ENDFORM visualizar_proyecto

amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel

APPEND ti_enh

ENDIFENDIFENDIF

ENDFORM buscar_punto_ampliacioacuten

amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_enh

amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh

DATA l_obj_name TYPE enhobj-obj_name

DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name

CHECK p_enh IS NOT INITIAL

IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF

REFRESH lt_obj_name

LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP

SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name

ENDFORM buscar_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X

ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME

ENDFORM construir_catalogo_enhobj

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENHOBJ

amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM bi_se19

amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro

CLEAR ti_bdcdatati_bdcdata-program = program

ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata

ENDFORM BDC_DYNPRO

amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval

CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata

ENDFORM BDC_FIELD

amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa

DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)

CHECK ti_gb31t[] IS NOT INITIAL

DO

Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2

IF l_exit EQ XEXITENDIF

CHECK l_exit IS INITIAL

Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND

CHECK l_boolpool IS NOT INITIAL

MOVE l_boolpool TO l_repid

Visualizo el programaPERFORM visualizar_linea USING l_repid01

ENDDO

ENDFORM visualizar_programa

amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope

STATICS l_flag TYPE c

DATA l_tit(65) TYPE c

CHECK l_flag IS INITIAL

l_flag = X

WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline

4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM texto_tope

amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf

DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off

CHECK l_off IS NOT INITIAL

ADD 7 TO l_offl_cf = 500 - l_off

SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_enhspotname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1

invalid_object_type = 2OTHERS = 3

ENDFORM bi_se18

amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit

DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE

DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE

MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE

MOVE lt_fields-value TO l_nameENDIF

Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_

LOOP AT lt_tfdir

CLEARl_group l_include l_namespace l_str_area

l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl

IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl

CHECK sy-subrc IS INITIAL

Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP

CHECK l_flag IS INITIAL

La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value

ENDFORM visualizar_fm_exit

amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter

tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten

ENDFORM def_text_parameter

amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones

Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt

Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt

Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt

icon_create RESULT name text infoicon_create

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 55: buscar_ampliaciones FOROSAP

ENDIF

ENDFORM visualizar_ampliacion

amp---------------------------------------------------------------------amp Form visualizar_bteamp--------------------------------------------------------------------- Visualizo la BTE---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE --gtP_LINEA Evento o proceso----------------------------------------------------------------------FORM visualizar_bte USING p_tipo TYPE cp_linea

RANGESr_event FOR tbe01-eventr_procs FOR tps01-procs

REFRESH r_event r_procs

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVEI TO r_event-signEQ TO r_event-optionp_linea(8) TO r_event-lowAPPEND r_event

SUBMIT rfopfi00WITH event IN r_eventWITH xonlk = AND RETURNWHEN P Interface de procesoMOVEI TO r_procs-signEQ TO r_procs-optionp_linea(8) TO r_procs-lowAPPEND r_procs

SUBMIT rfopfi01WITH procs IN r_procsWITH xonlk = AND RETURNWHEN OTHERS Do nothing ENDCASE

ENDFORM visualizar_bte

amp---------------------------------------------------------------------amp Form cargar_bteamp--------------------------------------------------------------------- Ingreso la BTE que quiero visualizar---------------------------------------------------------------------- --gtP_TIPO Tipo de BTE

----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c

DATAl_linea(500) TYPE c

DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

MOVE lt_fields-value TO l_linea

PERFORM visualizar_bte USING p_tipol_linea

ENDFORM cargar_bte

amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface

DATAl_linea(500) TYPE c

DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE

InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF

ENDFORM visualizar_interface

amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones

CHECK p_sust IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922

ENDFORM buscar_sustituciones

amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST

ENDFORM construir_catalogo_sust

amp---------------------------------------------------------------------

amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones

ENDFORM TOP_OF_PAGE_SUST

amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4

CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_sust

amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones

CHECK p_val IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931

ENDFORM buscar_validaciones

amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID

ENDFORM construir_catalogo_val

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones

ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2

CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_val

amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto

DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF

SELECT SINGLE FROM modsapWHERE name EQ l_name

IF sy-subrc IS INITIAL

MOVE l_name TO l_member

SELECT SINGLE FROM modactWHERE member EQ l_member

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF

ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF

ENDFORM visualizar_proyecto

amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel

APPEND ti_enh

ENDIFENDIFENDIF

ENDFORM buscar_punto_ampliacioacuten

amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_enh

amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh

DATA l_obj_name TYPE enhobj-obj_name

DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name

CHECK p_enh IS NOT INITIAL

IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF

REFRESH lt_obj_name

LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP

SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name

ENDFORM buscar_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X

ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME

ENDFORM construir_catalogo_enhobj

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENHOBJ

amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM bi_se19

amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro

CLEAR ti_bdcdatati_bdcdata-program = program

ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata

ENDFORM BDC_DYNPRO

amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval

CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata

ENDFORM BDC_FIELD

amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa

DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)

CHECK ti_gb31t[] IS NOT INITIAL

DO

Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2

IF l_exit EQ XEXITENDIF

CHECK l_exit IS INITIAL

Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND

CHECK l_boolpool IS NOT INITIAL

MOVE l_boolpool TO l_repid

Visualizo el programaPERFORM visualizar_linea USING l_repid01

ENDDO

ENDFORM visualizar_programa

amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope

STATICS l_flag TYPE c

DATA l_tit(65) TYPE c

CHECK l_flag IS INITIAL

l_flag = X

WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline

4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM texto_tope

amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf

DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off

CHECK l_off IS NOT INITIAL

ADD 7 TO l_offl_cf = 500 - l_off

SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_enhspotname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1

invalid_object_type = 2OTHERS = 3

ENDFORM bi_se18

amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit

DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE

DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE

MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE

MOVE lt_fields-value TO l_nameENDIF

Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_

LOOP AT lt_tfdir

CLEARl_group l_include l_namespace l_str_area

l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl

IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl

CHECK sy-subrc IS INITIAL

Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP

CHECK l_flag IS INITIAL

La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value

ENDFORM visualizar_fm_exit

amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter

tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten

ENDFORM def_text_parameter

amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones

Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt

Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt

Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt

icon_create RESULT name text infoicon_create

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 56: buscar_ampliaciones FOROSAP

----------------------------------------------------------------------FORM cargar_bte USING p_tipo TYPE c

DATAl_linea(500) TYPE c

DATAl_ret TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

CASE p_tipoWHEN E Interface de publicacioacuten y suscripcioacutenMOVETBE01 TO lt_fields-tabnameEVENT TO lt_fields-fieldnameWHEN P Interface de procesoMOVETPS01 TO lt_fields-tabnamePROCS TO lt_fields-fieldnameWHEN OTHERS Do nothing ENDCASEAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese BTEIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

MOVE lt_fields-value TO l_linea

PERFORM visualizar_bte USING p_tipol_linea

ENDFORM cargar_bte

amp---------------------------------------------------------------------amp Form visualizar_interfaceamp--------------------------------------------------------------------- Visualizo la definicioacuten de la BADI que corresponde a la interface----------------------------------------------------------------------FORM visualizar_interface

DATAl_linea(500) TYPE c

DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE

InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF

ENDFORM visualizar_interface

amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones

CHECK p_sust IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922

ENDFORM buscar_sustituciones

amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST

ENDFORM construir_catalogo_sust

amp---------------------------------------------------------------------

amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones

ENDFORM TOP_OF_PAGE_SUST

amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4

CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_sust

amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones

CHECK p_val IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931

ENDFORM buscar_validaciones

amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID

ENDFORM construir_catalogo_val

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones

ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2

CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_val

amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto

DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF

SELECT SINGLE FROM modsapWHERE name EQ l_name

IF sy-subrc IS INITIAL

MOVE l_name TO l_member

SELECT SINGLE FROM modactWHERE member EQ l_member

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF

ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF

ENDFORM visualizar_proyecto

amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel

APPEND ti_enh

ENDIFENDIFENDIF

ENDFORM buscar_punto_ampliacioacuten

amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_enh

amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh

DATA l_obj_name TYPE enhobj-obj_name

DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name

CHECK p_enh IS NOT INITIAL

IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF

REFRESH lt_obj_name

LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP

SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name

ENDFORM buscar_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X

ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME

ENDFORM construir_catalogo_enhobj

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENHOBJ

amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM bi_se19

amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro

CLEAR ti_bdcdatati_bdcdata-program = program

ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata

ENDFORM BDC_DYNPRO

amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval

CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata

ENDFORM BDC_FIELD

amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa

DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)

CHECK ti_gb31t[] IS NOT INITIAL

DO

Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2

IF l_exit EQ XEXITENDIF

CHECK l_exit IS INITIAL

Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND

CHECK l_boolpool IS NOT INITIAL

MOVE l_boolpool TO l_repid

Visualizo el programaPERFORM visualizar_linea USING l_repid01

ENDDO

ENDFORM visualizar_programa

amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope

STATICS l_flag TYPE c

DATA l_tit(65) TYPE c

CHECK l_flag IS INITIAL

l_flag = X

WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline

4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM texto_tope

amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf

DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off

CHECK l_off IS NOT INITIAL

ADD 7 TO l_offl_cf = 500 - l_off

SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_enhspotname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1

invalid_object_type = 2OTHERS = 3

ENDFORM bi_se18

amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit

DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE

DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE

MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE

MOVE lt_fields-value TO l_nameENDIF

Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_

LOOP AT lt_tfdir

CLEARl_group l_include l_namespace l_str_area

l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl

IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl

CHECK sy-subrc IS INITIAL

Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP

CHECK l_flag IS INITIAL

La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value

ENDFORM visualizar_fm_exit

amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter

tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten

ENDFORM def_text_parameter

amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones

Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt

Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt

Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt

icon_create RESULT name text infoicon_create

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 57: buscar_ampliaciones FOROSAP

DATAl_linea(500) TYPE c

DATAl_ret TYPE cl_inter_name TYPE sxs_inter-inter_namelt_fields TYPE sval OCCURS 0 WITH HEADER LINE

InterfaceMOVESXS_INTER TO lt_fields-tabnameINTER_NAME TO lt_fields-fieldnameAPPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese interfaceIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

TRANSLATE lt_fields-value TO UPPER CASEMOVE lt_fields-value TO l_inter_name

Obtengo a partir de la interface la definicioacuten de la BADISELECT SINGLE FROM sxs_interWHERE inter_name EQ l_inter_name

IF sy-subrc IS INITIAL Visualizo la definicioacuten de la BADICALL FUNCTION SXO_BADI_SHOWEXPORTINGexit_name = sxs_inter-exit_nameEXCEPTIONSaction_canceled = 1access_failure = 2badi_not_exixting = 3OTHERS = 4

ELSE El interface amp es erroacuteneoMESSAGE e226(enhancement) WITH l_inter_nameENDIF

ENDFORM visualizar_interface

amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones

CHECK p_sust IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922

ENDFORM buscar_sustituciones

amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST

ENDFORM construir_catalogo_sust

amp---------------------------------------------------------------------

amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones

ENDFORM TOP_OF_PAGE_SUST

amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4

CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_sust

amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones

CHECK p_val IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931

ENDFORM buscar_validaciones

amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID

ENDFORM construir_catalogo_val

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones

ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2

CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_val

amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto

DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF

SELECT SINGLE FROM modsapWHERE name EQ l_name

IF sy-subrc IS INITIAL

MOVE l_name TO l_member

SELECT SINGLE FROM modactWHERE member EQ l_member

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF

ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF

ENDFORM visualizar_proyecto

amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel

APPEND ti_enh

ENDIFENDIFENDIF

ENDFORM buscar_punto_ampliacioacuten

amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_enh

amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh

DATA l_obj_name TYPE enhobj-obj_name

DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name

CHECK p_enh IS NOT INITIAL

IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF

REFRESH lt_obj_name

LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP

SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name

ENDFORM buscar_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X

ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME

ENDFORM construir_catalogo_enhobj

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENHOBJ

amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM bi_se19

amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro

CLEAR ti_bdcdatati_bdcdata-program = program

ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata

ENDFORM BDC_DYNPRO

amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval

CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata

ENDFORM BDC_FIELD

amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa

DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)

CHECK ti_gb31t[] IS NOT INITIAL

DO

Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2

IF l_exit EQ XEXITENDIF

CHECK l_exit IS INITIAL

Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND

CHECK l_boolpool IS NOT INITIAL

MOVE l_boolpool TO l_repid

Visualizo el programaPERFORM visualizar_linea USING l_repid01

ENDDO

ENDFORM visualizar_programa

amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope

STATICS l_flag TYPE c

DATA l_tit(65) TYPE c

CHECK l_flag IS INITIAL

l_flag = X

WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline

4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM texto_tope

amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf

DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off

CHECK l_off IS NOT INITIAL

ADD 7 TO l_offl_cf = 500 - l_off

SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_enhspotname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1

invalid_object_type = 2OTHERS = 3

ENDFORM bi_se18

amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit

DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE

DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE

MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE

MOVE lt_fields-value TO l_nameENDIF

Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_

LOOP AT lt_tfdir

CLEARl_group l_include l_namespace l_str_area

l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl

IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl

CHECK sy-subrc IS INITIAL

Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP

CHECK l_flag IS INITIAL

La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value

ENDFORM visualizar_fm_exit

amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter

tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten

ENDFORM def_text_parameter

amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones

Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt

Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt

Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt

icon_create RESULT name text infoicon_create

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 58: buscar_ampliaciones FOROSAP

amp---------------------------------------------------------------------amp Form buscar_sustitucionesamp--------------------------------------------------------------------- Obtengo las sustituciones creadas----------------------------------------------------------------------FORM buscar_sustituciones

CHECK p_sust IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_sustFROM gb922

ENDFORM buscar_sustituciones

amp---------------------------------------------------------------------amp Form construir_catalogo_sustamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_sust

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_SUSTi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X SUBSTID X X X SUBSEQNR X X X CONSEQNR X X SUBSTAB SUBSFIELD SUBSVAL EXITSUBST

ENDFORM construir_catalogo_sust

amp---------------------------------------------------------------------

amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones

ENDFORM TOP_OF_PAGE_SUST

amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4

CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_sust

amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones

CHECK p_val IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931

ENDFORM buscar_validaciones

amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID

ENDFORM construir_catalogo_val

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones

ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2

CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_val

amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto

DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF

SELECT SINGLE FROM modsapWHERE name EQ l_name

IF sy-subrc IS INITIAL

MOVE l_name TO l_member

SELECT SINGLE FROM modactWHERE member EQ l_member

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF

ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF

ENDFORM visualizar_proyecto

amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel

APPEND ti_enh

ENDIFENDIFENDIF

ENDFORM buscar_punto_ampliacioacuten

amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_enh

amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh

DATA l_obj_name TYPE enhobj-obj_name

DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name

CHECK p_enh IS NOT INITIAL

IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF

REFRESH lt_obj_name

LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP

SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name

ENDFORM buscar_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X

ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME

ENDFORM construir_catalogo_enhobj

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENHOBJ

amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM bi_se19

amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro

CLEAR ti_bdcdatati_bdcdata-program = program

ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata

ENDFORM BDC_DYNPRO

amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval

CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata

ENDFORM BDC_FIELD

amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa

DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)

CHECK ti_gb31t[] IS NOT INITIAL

DO

Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2

IF l_exit EQ XEXITENDIF

CHECK l_exit IS INITIAL

Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND

CHECK l_boolpool IS NOT INITIAL

MOVE l_boolpool TO l_repid

Visualizo el programaPERFORM visualizar_linea USING l_repid01

ENDDO

ENDFORM visualizar_programa

amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope

STATICS l_flag TYPE c

DATA l_tit(65) TYPE c

CHECK l_flag IS INITIAL

l_flag = X

WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline

4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM texto_tope

amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf

DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off

CHECK l_off IS NOT INITIAL

ADD 7 TO l_offl_cf = 500 - l_off

SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_enhspotname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1

invalid_object_type = 2OTHERS = 3

ENDFORM bi_se18

amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit

DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE

DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE

MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE

MOVE lt_fields-value TO l_nameENDIF

Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_

LOOP AT lt_tfdir

CLEARl_group l_include l_namespace l_str_area

l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl

IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl

CHECK sy-subrc IS INITIAL

Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP

CHECK l_flag IS INITIAL

La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value

ENDFORM visualizar_fm_exit

amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter

tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten

ENDFORM def_text_parameter

amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones

Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt

Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt

Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt

icon_create RESULT name text infoicon_create

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 59: buscar_ampliaciones FOROSAP

amp Form TOP_OF_PAGE_SUSTamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_sust

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_sustWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incSustituciones

ENDFORM TOP_OF_PAGE_SUST

amp---------------------------------------------------------------------amp Form visualizar_sustamp--------------------------------------------------------------------- Visualizo la sustitucioacuten---------------------------------------------------------------------- --gtP_SUBSTID Nombre de la sustitucioacuten --gtP_SUBSEQNR Nuacutemero de paso de la sustitucioacuten----------------------------------------------------------------------FORM visualizar_sust USING p_substid TYPE gb922-substidp_subseqnr TYPE gb922-subseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_SUBSTITUTIONEXPORTINGsubstitution = p_substidIMPORTINGvalevent_fnd = l_valevenvaluser_fnd = l_valuserEXCEPTIONSnot_found = 1OTHERS = 4

CALL FUNCTION G_SUBSTITUTION_ENVIRONMENTEXPORTINGbsubevent = Xbsubuser = Xsubevent = l_valevensubstid = p_substidsubuser = l_valuserview_only = Xaction_mode = Vskip_first_screen = Xstep = p_subseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_sust

amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones

CHECK p_val IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931

ENDFORM buscar_validaciones

amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID

ENDFORM construir_catalogo_val

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones

ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2

CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_val

amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto

DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF

SELECT SINGLE FROM modsapWHERE name EQ l_name

IF sy-subrc IS INITIAL

MOVE l_name TO l_member

SELECT SINGLE FROM modactWHERE member EQ l_member

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF

ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF

ENDFORM visualizar_proyecto

amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel

APPEND ti_enh

ENDIFENDIFENDIF

ENDFORM buscar_punto_ampliacioacuten

amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_enh

amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh

DATA l_obj_name TYPE enhobj-obj_name

DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name

CHECK p_enh IS NOT INITIAL

IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF

REFRESH lt_obj_name

LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP

SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name

ENDFORM buscar_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X

ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME

ENDFORM construir_catalogo_enhobj

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENHOBJ

amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM bi_se19

amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro

CLEAR ti_bdcdatati_bdcdata-program = program

ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata

ENDFORM BDC_DYNPRO

amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval

CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata

ENDFORM BDC_FIELD

amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa

DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)

CHECK ti_gb31t[] IS NOT INITIAL

DO

Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2

IF l_exit EQ XEXITENDIF

CHECK l_exit IS INITIAL

Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND

CHECK l_boolpool IS NOT INITIAL

MOVE l_boolpool TO l_repid

Visualizo el programaPERFORM visualizar_linea USING l_repid01

ENDDO

ENDFORM visualizar_programa

amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope

STATICS l_flag TYPE c

DATA l_tit(65) TYPE c

CHECK l_flag IS INITIAL

l_flag = X

WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline

4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM texto_tope

amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf

DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off

CHECK l_off IS NOT INITIAL

ADD 7 TO l_offl_cf = 500 - l_off

SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_enhspotname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1

invalid_object_type = 2OTHERS = 3

ENDFORM bi_se18

amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit

DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE

DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE

MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE

MOVE lt_fields-value TO l_nameENDIF

Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_

LOOP AT lt_tfdir

CLEARl_group l_include l_namespace l_str_area

l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl

IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl

CHECK sy-subrc IS INITIAL

Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP

CHECK l_flag IS INITIAL

La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value

ENDFORM visualizar_fm_exit

amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter

tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten

ENDFORM def_text_parameter

amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones

Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt

Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt

Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt

icon_create RESULT name text infoicon_create

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 60: buscar_ampliaciones FOROSAP

not_found = 1OTHERS = 2

ENDFORM visualizar_sust

amp---------------------------------------------------------------------amp Form buscar_validacionesamp--------------------------------------------------------------------- Obtengo las validaciones creadas----------------------------------------------------------------------FORM buscar_validaciones

CHECK p_val IS NOT INITIAL

SELECT INTO CORRESPONDING FIELDS OF TABLE ti_valFROM gb931

ENDFORM buscar_validaciones

amp---------------------------------------------------------------------amp Form construir_catalogo_valamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_val

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_VALi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X VALID X X X VALSEQNR X X X CONDID CHECKID

ENDFORM construir_catalogo_val

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones

ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2

CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_val

amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto

DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF

SELECT SINGLE FROM modsapWHERE name EQ l_name

IF sy-subrc IS INITIAL

MOVE l_name TO l_member

SELECT SINGLE FROM modactWHERE member EQ l_member

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF

ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF

ENDFORM visualizar_proyecto

amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel

APPEND ti_enh

ENDIFENDIFENDIF

ENDFORM buscar_punto_ampliacioacuten

amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_enh

amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh

DATA l_obj_name TYPE enhobj-obj_name

DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name

CHECK p_enh IS NOT INITIAL

IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF

REFRESH lt_obj_name

LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP

SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name

ENDFORM buscar_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X

ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME

ENDFORM construir_catalogo_enhobj

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENHOBJ

amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM bi_se19

amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro

CLEAR ti_bdcdatati_bdcdata-program = program

ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata

ENDFORM BDC_DYNPRO

amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval

CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata

ENDFORM BDC_FIELD

amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa

DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)

CHECK ti_gb31t[] IS NOT INITIAL

DO

Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2

IF l_exit EQ XEXITENDIF

CHECK l_exit IS INITIAL

Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND

CHECK l_boolpool IS NOT INITIAL

MOVE l_boolpool TO l_repid

Visualizo el programaPERFORM visualizar_linea USING l_repid01

ENDDO

ENDFORM visualizar_programa

amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope

STATICS l_flag TYPE c

DATA l_tit(65) TYPE c

CHECK l_flag IS INITIAL

l_flag = X

WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline

4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM texto_tope

amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf

DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off

CHECK l_off IS NOT INITIAL

ADD 7 TO l_offl_cf = 500 - l_off

SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_enhspotname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1

invalid_object_type = 2OTHERS = 3

ENDFORM bi_se18

amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit

DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE

DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE

MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE

MOVE lt_fields-value TO l_nameENDIF

Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_

LOOP AT lt_tfdir

CLEARl_group l_include l_namespace l_str_area

l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl

IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl

CHECK sy-subrc IS INITIAL

Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP

CHECK l_flag IS INITIAL

La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value

ENDFORM visualizar_fm_exit

amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter

tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten

ENDFORM def_text_parameter

amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones

Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt

Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt

Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt

icon_create RESULT name text infoicon_create

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 61: buscar_ampliaciones FOROSAP

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_VALamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_val

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_valWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incValidaciones

ENDFORM TOP_OF_PAGE_VALamp---------------------------------------------------------------------amp Form visualizar_valamp--------------------------------------------------------------------- Visualizo la validacioacuten---------------------------------------------------------------------- --gtP_VALID Validacioacuten --gtP_VALSEQNR Nuacutemero secuencial de una etapa de validacioacuten----------------------------------------------------------------------FORM visualizar_val USING p_valid TYPE gb931-validp_valseqnr TYPE gb931-valseqnr

DATAl_valuser LIKE gb31-valuserl_valeven LIKE gb31-valevent

CALL FUNCTION G_BOOL_EXIST_VALIDATIONEXPORTINGvalidation = p_validIMPORTINGvaluser_fnd = l_valuservalevent_fnd = l_valevenEXCEPTIONSnot_found = 1null_id = 2

CALL FUNCTION G_VALIDATION_ENVIRONMENTEXPORTINGaction_mode = Vskip_first_screen = Xbvalevent = Xbvaluser = Xvalid = p_validvaluser = l_valuservalevent = l_valevenview_only = Xstep = p_valseqnrEXCEPTIONS

not_found = 1OTHERS = 2

ENDFORM visualizar_val

amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto

DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF

SELECT SINGLE FROM modsapWHERE name EQ l_name

IF sy-subrc IS INITIAL

MOVE l_name TO l_member

SELECT SINGLE FROM modactWHERE member EQ l_member

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF

ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF

ENDFORM visualizar_proyecto

amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel

APPEND ti_enh

ENDIFENDIFENDIF

ENDFORM buscar_punto_ampliacioacuten

amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_enh

amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh

DATA l_obj_name TYPE enhobj-obj_name

DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name

CHECK p_enh IS NOT INITIAL

IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF

REFRESH lt_obj_name

LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP

SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name

ENDFORM buscar_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X

ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME

ENDFORM construir_catalogo_enhobj

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENHOBJ

amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM bi_se19

amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro

CLEAR ti_bdcdatati_bdcdata-program = program

ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata

ENDFORM BDC_DYNPRO

amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval

CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata

ENDFORM BDC_FIELD

amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa

DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)

CHECK ti_gb31t[] IS NOT INITIAL

DO

Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2

IF l_exit EQ XEXITENDIF

CHECK l_exit IS INITIAL

Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND

CHECK l_boolpool IS NOT INITIAL

MOVE l_boolpool TO l_repid

Visualizo el programaPERFORM visualizar_linea USING l_repid01

ENDDO

ENDFORM visualizar_programa

amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope

STATICS l_flag TYPE c

DATA l_tit(65) TYPE c

CHECK l_flag IS INITIAL

l_flag = X

WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline

4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM texto_tope

amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf

DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off

CHECK l_off IS NOT INITIAL

ADD 7 TO l_offl_cf = 500 - l_off

SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_enhspotname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1

invalid_object_type = 2OTHERS = 3

ENDFORM bi_se18

amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit

DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE

DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE

MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE

MOVE lt_fields-value TO l_nameENDIF

Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_

LOOP AT lt_tfdir

CLEARl_group l_include l_namespace l_str_area

l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl

IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl

CHECK sy-subrc IS INITIAL

Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP

CHECK l_flag IS INITIAL

La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value

ENDFORM visualizar_fm_exit

amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter

tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten

ENDFORM def_text_parameter

amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones

Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt

Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt

Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt

icon_create RESULT name text infoicon_create

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 62: buscar_ampliaciones FOROSAP

not_found = 1OTHERS = 2

ENDFORM visualizar_val

amp---------------------------------------------------------------------amp Form visualizar_proyectoamp--------------------------------------------------------------------- Visualizo el proyecto asosiado a una ampliacioacuten----------------------------------------------------------------------FORM visualizar_proyecto

DATAl_ret TYPE cl_name TYPE modsap-namel_member TYPE modact-memberl_modname TYPE modact-namel_standard(3) TYPE clt_fields TYPE sval OCCURS 0 WITH HEADER LINE

MOVEMODSAP TO lt_fields-tabnameNAME TO lt_fields-fieldname

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSEMOVE lt_fields-value TO l_nameENDIF

SELECT SINGLE FROM modsapWHERE name EQ l_name

IF sy-subrc IS INITIAL

MOVE l_name TO l_member

SELECT SINGLE FROM modactWHERE member EQ l_member

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF

ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF

ENDFORM visualizar_proyecto

amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel

APPEND ti_enh

ENDIFENDIFENDIF

ENDFORM buscar_punto_ampliacioacuten

amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_enh

amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh

DATA l_obj_name TYPE enhobj-obj_name

DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name

CHECK p_enh IS NOT INITIAL

IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF

REFRESH lt_obj_name

LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP

SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name

ENDFORM buscar_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X

ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME

ENDFORM construir_catalogo_enhobj

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENHOBJ

amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM bi_se19

amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro

CLEAR ti_bdcdatati_bdcdata-program = program

ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata

ENDFORM BDC_DYNPRO

amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval

CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata

ENDFORM BDC_FIELD

amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa

DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)

CHECK ti_gb31t[] IS NOT INITIAL

DO

Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2

IF l_exit EQ XEXITENDIF

CHECK l_exit IS INITIAL

Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND

CHECK l_boolpool IS NOT INITIAL

MOVE l_boolpool TO l_repid

Visualizo el programaPERFORM visualizar_linea USING l_repid01

ENDDO

ENDFORM visualizar_programa

amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope

STATICS l_flag TYPE c

DATA l_tit(65) TYPE c

CHECK l_flag IS INITIAL

l_flag = X

WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline

4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM texto_tope

amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf

DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off

CHECK l_off IS NOT INITIAL

ADD 7 TO l_offl_cf = 500 - l_off

SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_enhspotname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1

invalid_object_type = 2OTHERS = 3

ENDFORM bi_se18

amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit

DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE

DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE

MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE

MOVE lt_fields-value TO l_nameENDIF

Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_

LOOP AT lt_tfdir

CLEARl_group l_include l_namespace l_str_area

l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl

IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl

CHECK sy-subrc IS INITIAL

Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP

CHECK l_flag IS INITIAL

La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value

ENDFORM visualizar_fm_exit

amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter

tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten

ENDFORM def_text_parameter

amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones

Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt

Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt

Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt

icon_create RESULT name text infoicon_create

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 63: buscar_ampliaciones FOROSAP

SELECT SINGLE FROM modactWHERE member EQ l_member

IF sy-subrc IS INITIAL Se encontroacute el proyecto para la ampliacioacutenMOVEmodact-name TO l_modnamec_std_implmnt TO l_standard

CALL FUNCTION MOD_COMPONENTSEXPORTINGmode = SHOMmodname = l_modnamep_standard = l_standardEXCEPTIONSpermission_failure = 1not_found = 2OTHERS = 3ELSE Indicar un proyecto de ampliacioacutenMESSAGE e398(00)WITH La ampliacioacuten l_name no tiene proyectoENDIF

ELSE La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueENDIF

ENDFORM visualizar_proyecto

amp---------------------------------------------------------------------amp Form buscar_punto_ampliacioacutenamp--------------------------------------------------------------------- Obtengo los puntos de ampliacioacuten ya implementados----------------------------------------------------------------------FORM buscar_punto_ampliacion

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh1- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS INCLUDE DEL GRUPO DE FUNCIOacuteNSEARCH ti_programa-cf FOR c_includeCHECK sy-subrc NE 0- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel

APPEND ti_enh

ENDIFENDIFENDIF

ENDFORM buscar_punto_ampliacioacuten

amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_enh

amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh

DATA l_obj_name TYPE enhobj-obj_name

DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name

CHECK p_enh IS NOT INITIAL

IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF

REFRESH lt_obj_name

LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP

SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name

ENDFORM buscar_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X

ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME

ENDFORM construir_catalogo_enhobj

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENHOBJ

amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM bi_se19

amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro

CLEAR ti_bdcdatati_bdcdata-program = program

ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata

ENDFORM BDC_DYNPRO

amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval

CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata

ENDFORM BDC_FIELD

amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa

DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)

CHECK ti_gb31t[] IS NOT INITIAL

DO

Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2

IF l_exit EQ XEXITENDIF

CHECK l_exit IS INITIAL

Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND

CHECK l_boolpool IS NOT INITIAL

MOVE l_boolpool TO l_repid

Visualizo el programaPERFORM visualizar_linea USING l_repid01

ENDDO

ENDFORM visualizar_programa

amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope

STATICS l_flag TYPE c

DATA l_tit(65) TYPE c

CHECK l_flag IS INITIAL

l_flag = X

WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline

4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM texto_tope

amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf

DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off

CHECK l_off IS NOT INITIAL

ADD 7 TO l_offl_cf = 500 - l_off

SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_enhspotname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1

invalid_object_type = 2OTHERS = 3

ENDFORM bi_se18

amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit

DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE

DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE

MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE

MOVE lt_fields-value TO l_nameENDIF

Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_

LOOP AT lt_tfdir

CLEARl_group l_include l_namespace l_str_area

l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl

IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl

CHECK sy-subrc IS INITIAL

Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP

CHECK l_flag IS INITIAL

La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value

ENDFORM visualizar_fm_exit

amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter

tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten

ENDFORM def_text_parameter

amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones

Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt

Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt

Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt

icon_create RESULT name text infoicon_create

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 64: buscar_ampliaciones FOROSAP

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh2- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE NO TRAIGA LOS ENDENHANCEMENTSEARCH ti_programa-cf FOR c_endenhCHECK sy-subrc NE 0

- VERIFICO QUE NO TRAIGA LOS END-ENHANCEMENT-SECTIONSEARCH ti_programa-cf FOR c_endenh1CHECK sy-subrc NE 0

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivelAPPEND ti_enhELSE

- VERIFICA SI EN LA LINEA DEL PROGRAMA EXISTE ALGUN PUNTO DE- AMPLIACIOacuteNSEARCH ti_programa-cf FOR c_enh- SE ENCONTRO UN PUNTO DE AMPLIACIOacuteN Y SE VERIFICA SI LA LINEA NO ESTAacute- COMENTADAIF sy-subrc EQ 0AND ti_programa-cf+0(1) NE c_comentario

- VERIFICO QUE TRAIGA LOS ENHANCEMENTCHECK ti_programa-cf(11) EQ c_enh

CLEAR ti_enh- REMUEVE ESPACIOS EN EL INICIO DEL STRINGSHIFT ti_programa-cf LEFT DELETING LEADING spaceMOVE ti_includes-nome TO ti_enh-programac_enht TO ti_enh-tiposy-tabix TO ti_enh-lineati_programa-cf TO ti_enh-cfti_includes-nivel TO ti_enh-nivel

APPEND ti_enh

ENDIFENDIFENDIF

ENDFORM buscar_punto_ampliacioacuten

amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_enh

amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh

DATA l_obj_name TYPE enhobj-obj_name

DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name

CHECK p_enh IS NOT INITIAL

IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF

REFRESH lt_obj_name

LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP

SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name

ENDFORM buscar_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X

ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME

ENDFORM construir_catalogo_enhobj

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENHOBJ

amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM bi_se19

amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro

CLEAR ti_bdcdatati_bdcdata-program = program

ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata

ENDFORM BDC_DYNPRO

amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval

CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata

ENDFORM BDC_FIELD

amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa

DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)

CHECK ti_gb31t[] IS NOT INITIAL

DO

Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2

IF l_exit EQ XEXITENDIF

CHECK l_exit IS INITIAL

Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND

CHECK l_boolpool IS NOT INITIAL

MOVE l_boolpool TO l_repid

Visualizo el programaPERFORM visualizar_linea USING l_repid01

ENDDO

ENDFORM visualizar_programa

amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope

STATICS l_flag TYPE c

DATA l_tit(65) TYPE c

CHECK l_flag IS INITIAL

l_flag = X

WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline

4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM texto_tope

amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf

DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off

CHECK l_off IS NOT INITIAL

ADD 7 TO l_offl_cf = 500 - l_off

SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_enhspotname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1

invalid_object_type = 2OTHERS = 3

ENDFORM bi_se18

amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit

DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE

DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE

MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE

MOVE lt_fields-value TO l_nameENDIF

Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_

LOOP AT lt_tfdir

CLEARl_group l_include l_namespace l_str_area

l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl

IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl

CHECK sy-subrc IS INITIAL

Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP

CHECK l_flag IS INITIAL

La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value

ENDFORM visualizar_fm_exit

amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter

tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten

ENDFORM def_text_parameter

amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones

Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt

Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt

Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt

icon_create RESULT name text infoicon_create

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 65: buscar_ampliaciones FOROSAP

APPEND ti_enh

ENDIFENDIFENDIF

ENDFORM buscar_punto_ampliacioacuten

amp---------------------------------------------------------------------amp Form construir_catalogo_enhamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enh

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X PROGRAMA X X c_text_01TIPO X X c_text_05NIVEL X c_text_02BREAK X X X c_text_07LINEA X c_text_03CF X c_text_04

ENDFORM construir_catalogo_enh

amp---------------------------------------------------------------------amp Form buscar_enhamp--------------------------------------------------------------------- Busco los puntos de ampliacioacuten del programa----------------------------------------------------------------------FORM buscar_enh

DATA l_obj_name TYPE enhobj-obj_name

DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name

CHECK p_enh IS NOT INITIAL

IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF

REFRESH lt_obj_name

LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP

SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name

ENDFORM buscar_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X

ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME

ENDFORM construir_catalogo_enhobj

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENHOBJ

amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM bi_se19

amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro

CLEAR ti_bdcdatati_bdcdata-program = program

ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata

ENDFORM BDC_DYNPRO

amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval

CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata

ENDFORM BDC_FIELD

amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa

DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)

CHECK ti_gb31t[] IS NOT INITIAL

DO

Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2

IF l_exit EQ XEXITENDIF

CHECK l_exit IS INITIAL

Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND

CHECK l_boolpool IS NOT INITIAL

MOVE l_boolpool TO l_repid

Visualizo el programaPERFORM visualizar_linea USING l_repid01

ENDDO

ENDFORM visualizar_programa

amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope

STATICS l_flag TYPE c

DATA l_tit(65) TYPE c

CHECK l_flag IS INITIAL

l_flag = X

WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline

4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM texto_tope

amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf

DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off

CHECK l_off IS NOT INITIAL

ADD 7 TO l_offl_cf = 500 - l_off

SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_enhspotname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1

invalid_object_type = 2OTHERS = 3

ENDFORM bi_se18

amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit

DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE

DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE

MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE

MOVE lt_fields-value TO l_nameENDIF

Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_

LOOP AT lt_tfdir

CLEARl_group l_include l_namespace l_str_area

l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl

IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl

CHECK sy-subrc IS INITIAL

Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP

CHECK l_flag IS INITIAL

La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value

ENDFORM visualizar_fm_exit

amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter

tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten

ENDFORM def_text_parameter

amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones

Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt

Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt

Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt

icon_create RESULT name text infoicon_create

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 66: buscar_ampliaciones FOROSAP

DATA BEGIN OF lt_obj_name OCCURS 0obj_name TYPE enhobj-obj_nameEND OF lt_obj_name

CHECK p_enh IS NOT INITIAL

IF p_prog IS NOT INITIAL MOVE p_prog TO l_obj_name ELSE MOVE tstc-pgmna TO l_obj_name ENDIF

REFRESH lt_obj_name

LOOP AT ti_includesAPPEND ti_includes-nome TO lt_obj_nameENDLOOP

SELECT enhname version obj_type obj_nameINTO CORRESPONDING FIELDS OF TABLE ti_enhobjFROM enhobjFOR ALL ENTRIES IN lt_obj_nameWHERE obj_type EQ PROGAND obj_name EQ lt_obj_name-obj_name

ENDFORM buscar_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_enhobjamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_enhobj

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_ENHOBJi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

SEL X X X X X

ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME

ENDFORM construir_catalogo_enhobj

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENHOBJ

amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM bi_se19

amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro

CLEAR ti_bdcdatati_bdcdata-program = program

ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata

ENDFORM BDC_DYNPRO

amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval

CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata

ENDFORM BDC_FIELD

amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa

DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)

CHECK ti_gb31t[] IS NOT INITIAL

DO

Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2

IF l_exit EQ XEXITENDIF

CHECK l_exit IS INITIAL

Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND

CHECK l_boolpool IS NOT INITIAL

MOVE l_boolpool TO l_repid

Visualizo el programaPERFORM visualizar_linea USING l_repid01

ENDDO

ENDFORM visualizar_programa

amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope

STATICS l_flag TYPE c

DATA l_tit(65) TYPE c

CHECK l_flag IS INITIAL

l_flag = X

WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline

4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM texto_tope

amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf

DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off

CHECK l_off IS NOT INITIAL

ADD 7 TO l_offl_cf = 500 - l_off

SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_enhspotname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1

invalid_object_type = 2OTHERS = 3

ENDFORM bi_se18

amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit

DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE

DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE

MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE

MOVE lt_fields-value TO l_nameENDIF

Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_

LOOP AT lt_tfdir

CLEARl_group l_include l_namespace l_str_area

l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl

IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl

CHECK sy-subrc IS INITIAL

Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP

CHECK l_flag IS INITIAL

La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value

ENDFORM visualizar_fm_exit

amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter

tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten

ENDFORM def_text_parameter

amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones

Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt

Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt

Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt

icon_create RESULT name text infoicon_create

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 67: buscar_ampliaciones FOROSAP

ENHNAME X X X VERSION X X OBJ_TYPE X OBJ_NAME

ENDFORM construir_catalogo_enhobj

amp---------------------------------------------------------------------amp Form TOP_OF_PAGE_ENHOBJamp--------------------------------------------------------------------- Mostrar cabecera de paacutegina----------------------------------------------------------------------FORM top_of_page_enhobj

DATAl_tfill_inc(20) TYPE cl_tfill_cant(20) TYPE c

DESCRIBE TABLE ti_enhobjWRITE sy-tfill TO l_tfill_cantCONDENSE l_tfill_cant NO-GAPS

Construir encabezado del reportePERFORM set_header USING l_tfill_cantl_tfill_incPuntos de ampliacioacuten

ENDFORM TOP_OF_PAGE_ENHOBJ

amp---------------------------------------------------------------------amp Form bi_se19amp--------------------------------------------------------------------- Visualizo el punto de ampliacioacuten implementado---------------------------------------------------------------------- --gtP_ENHNAME Punto de ampliacioacuten implementado----------------------------------------------------------------------FORM bi_se19 USING p_enhname TYPE enhobj-enhname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = p_enhnameobject_type = ENHOEXCEPTIONSnot_executed = 1invalid_object_type = 2OTHERS = 3

ENDFORM bi_se19

amp---------------------------------------------------------------------amp Form BDC_DYNPROamp---------------------------------------------------------------------FORM bdc_dynpro USING program dynpro

CLEAR ti_bdcdatati_bdcdata-program = program

ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata

ENDFORM BDC_DYNPRO

amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval

CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata

ENDFORM BDC_FIELD

amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa

DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)

CHECK ti_gb31t[] IS NOT INITIAL

DO

Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2

IF l_exit EQ XEXITENDIF

CHECK l_exit IS INITIAL

Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND

CHECK l_boolpool IS NOT INITIAL

MOVE l_boolpool TO l_repid

Visualizo el programaPERFORM visualizar_linea USING l_repid01

ENDDO

ENDFORM visualizar_programa

amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope

STATICS l_flag TYPE c

DATA l_tit(65) TYPE c

CHECK l_flag IS INITIAL

l_flag = X

WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline

4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM texto_tope

amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf

DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off

CHECK l_off IS NOT INITIAL

ADD 7 TO l_offl_cf = 500 - l_off

SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_enhspotname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1

invalid_object_type = 2OTHERS = 3

ENDFORM bi_se18

amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit

DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE

DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE

MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE

MOVE lt_fields-value TO l_nameENDIF

Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_

LOOP AT lt_tfdir

CLEARl_group l_include l_namespace l_str_area

l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl

IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl

CHECK sy-subrc IS INITIAL

Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP

CHECK l_flag IS INITIAL

La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value

ENDFORM visualizar_fm_exit

amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter

tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten

ENDFORM def_text_parameter

amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones

Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt

Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt

Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt

icon_create RESULT name text infoicon_create

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 68: buscar_ampliaciones FOROSAP

ti_bdcdata-dynpro = dynproti_bdcdata-dynbegin = XAPPEND ti_bdcdata

ENDFORM BDC_DYNPRO

amp---------------------------------------------------------------------amp Form BDC_FIELDamp---------------------------------------------------------------------FORM bdc_field USING fnam fval

CLEAR ti_bdcdatati_bdcdata-fnam = fnamti_bdcdata-fval = fvalAPPEND ti_bdcdata

ENDFORM BDC_FIELD

amp---------------------------------------------------------------------amp Form visualizar_programaamp--------------------------------------------------------------------- Visualizo el programa que se genera dinaacutemicamente para las sustituciones y validaciones de FI----------------------------------------------------------------------FORM visualizar_programa

DATAl_selfield TYPE slis_selfieldl_exit TYPE cl_repid TYPE sy-repidl_boolpool(8)

CHECK ti_gb31t[] IS NOT INITIAL

DO

Visualizo los distintos eventos para que puedan realizar la seleccioacutenCALL FUNCTION REUSE_ALV_POPUP_TO_SELECTEXPORTINGi_title = ValidacioacutenSustitucioacuten Eventoi_zebra = Xi_tabname = TI_GB31Ti_structure_name = GB31TIMPORTINGes_selfield = l_selfielde_exit = l_exitTABLESt_outtab = ti_gb31tEXCEPTIONSprogram_error = 1OTHERS = 2

IF l_exit EQ XEXITENDIF

CHECK l_exit IS INITIAL

Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND

CHECK l_boolpool IS NOT INITIAL

MOVE l_boolpool TO l_repid

Visualizo el programaPERFORM visualizar_linea USING l_repid01

ENDDO

ENDFORM visualizar_programa

amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope

STATICS l_flag TYPE c

DATA l_tit(65) TYPE c

CHECK l_flag IS INITIAL

l_flag = X

WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline

4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM texto_tope

amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf

DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off

CHECK l_off IS NOT INITIAL

ADD 7 TO l_offl_cf = 500 - l_off

SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_enhspotname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1

invalid_object_type = 2OTHERS = 3

ENDFORM bi_se18

amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit

DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE

DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE

MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE

MOVE lt_fields-value TO l_nameENDIF

Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_

LOOP AT lt_tfdir

CLEARl_group l_include l_namespace l_str_area

l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl

IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl

CHECK sy-subrc IS INITIAL

Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP

CHECK l_flag IS INITIAL

La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value

ENDFORM visualizar_fm_exit

amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter

tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten

ENDFORM def_text_parameter

amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones

Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt

Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt

Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt

icon_create RESULT name text infoicon_create

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 69: buscar_ampliaciones FOROSAP

Obtengo el nombre del programa de sustitucioacuten y validacioacuten asociado a la seleccioacuten del usuarioPERFORM create_bool_filename(saplgbl5)USING ti_gb31t-valuserti_gb31t-valeventCHANGING l_boolpoolIF FOUND

CHECK l_boolpool IS NOT INITIAL

MOVE l_boolpool TO l_repid

Visualizo el programaPERFORM visualizar_linea USING l_repid01

ENDDO

ENDFORM visualizar_programa

amp---------------------------------------------------------------------amp Form texto_topeamp--------------------------------------------------------------------- Encabezado que explica la funcionalidad de algunas columnas del reporte----------------------------------------------------------------------FORM texto_tope

STATICS l_flag TYPE c

DATA l_tit(65) TYPE c

CHECK l_flag IS INITIAL

l_flag = X

WRITE FUNCIOANALIDAD DE LAS COLUMNAS TO l_tit CENTEREDFORMAT COLOR = 1

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline1er linea1(1) sy-vline3 TIPO Se visualiza las definiciones de los objetos de70(1) sy-vline2da linea1(1) sy-vline3 ampliacioacuten70(1) sy-vline3ra linea1(1) sy-vline3 STOP Agrega un BREAK en la liacutenea de coacutedigo seleccionada70(1) sy-vline

4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM texto_tope

amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf

DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off

CHECK l_off IS NOT INITIAL

ADD 7 TO l_offl_cf = 500 - l_off

SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_enhspotname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1

invalid_object_type = 2OTHERS = 3

ENDFORM bi_se18

amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit

DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE

DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE

MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE

MOVE lt_fields-value TO l_nameENDIF

Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_

LOOP AT lt_tfdir

CLEARl_group l_include l_namespace l_str_area

l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl

IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl

CHECK sy-subrc IS INITIAL

Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP

CHECK l_flag IS INITIAL

La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value

ENDFORM visualizar_fm_exit

amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter

tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten

ENDFORM def_text_parameter

amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones

Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt

Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt

Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt

icon_create RESULT name text infoicon_create

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 70: buscar_ampliaciones FOROSAP

4ta linea1(1) sy-vline3 COacuteDIGO FUENTE Se visualiza la liacutenea de coacutedigo en el 70(1) sy-vline5ta linea1(1) sy-vline3 programa correspondiente70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM texto_tope

amp---------------------------------------------------------------------amp Form bi_se18amp--------------------------------------------------------------------- Visualizo la definicioacuten del enhancement pointamp---------------------------------------------------------------------FORM bi_se18 USING p_cf

DATAl_enhspotname TYPE enhspotnamel_off TYPE il_cf TYPE i

DATA BEGIN OF lt_cf OCCURS 0linea(500)END OF lt_cf

FIND FIRST OCCURRENCE OF SPOT IN p_cf MATCH OFFSET l_off

CHECK l_off IS NOT INITIAL

ADD 7 TO l_offl_cf = 500 - l_off

SPLIT p_cf+l_off(l_cf) AT space INTO TABLE lt_cf

CHECK sy-subrc IS INITIAL

Obtengo el nombre de la definicioacuten del enhancementREAD TABLE lt_cf INDEX 1

TRANSLATE lt_cf-linea TO UPPER CASETRANSLATE lt_cf-linea USING

MOVE lt_cf-linea TO l_enhspotname

Visualizo la linea seleccionada en el programaCALL FUNCTION RS_TOOL_ACCESSEXPORTINGoperation = c_operationobject_name = l_enhspotnameobject_type = ENHSEXCEPTIONSnot_executed = 1

invalid_object_type = 2OTHERS = 3

ENDFORM bi_se18

amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit

DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE

DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE

MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE

MOVE lt_fields-value TO l_nameENDIF

Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_

LOOP AT lt_tfdir

CLEARl_group l_include l_namespace l_str_area

l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl

IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl

CHECK sy-subrc IS INITIAL

Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP

CHECK l_flag IS INITIAL

La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value

ENDFORM visualizar_fm_exit

amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter

tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten

ENDFORM def_text_parameter

amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones

Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt

Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt

Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt

icon_create RESULT name text infoicon_create

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 71: buscar_ampliaciones FOROSAP

invalid_object_type = 2OTHERS = 3

ENDFORM bi_se18

amp---------------------------------------------------------------------amp Form visualizar_fm_exitamp--------------------------------------------------------------------- Se visualiza el moacutedulo de funciones del user-exits que contiene al include Z indicado----------------------------------------------------------------------FORM visualizar_fm_exit

DATAl_ret TYPE cl_flag TYPE cl_name TYPE trdir-namelt_fields TYPE sval OCCURS 0 WITH HEADER LINElt_tfdir TYPE tfdir OCCURS 0 WITH HEADER LINE

DATAv_include LIKE rodiobj-iobjnml_fname LIKE rs38l-namel_group LIKE rs38l-areal_include LIKE rs38l-includel_namespace LIKE rs38l-namespacel_str_area LIKE rs38l-str_arealt_incl TYPE STANDARD TABLE OF abapsource WITH HEADER LINE

MOVERS38L TO lt_fields-tabnameINCLUDE TO lt_fields-fieldnameInclude TO lt_fields-fieldtext

APPEND lt_fields

CALL FUNCTION POPUP_GET_VALUESEXPORTINGpopup_title = Ingrese ampliacioacutenIMPORTINGreturncode = l_retTABLESfields = lt_fieldsEXCEPTIONSerror_in_fields = 1OTHERS = 2

Verifico que no haya canceladoCHECK l_ret NE A

READ TABLE lt_fields INDEX 1

CHECK sy-subrc IS INITIAL

IF lt_fields-value IS INITIAL OR lt_fields-value(1) NE Z La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-valueELSE

MOVE lt_fields-value TO l_nameENDIF

Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_

LOOP AT lt_tfdir

CLEARl_group l_include l_namespace l_str_area

l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl

IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl

CHECK sy-subrc IS INITIAL

Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP

CHECK l_flag IS INITIAL

La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value

ENDFORM visualizar_fm_exit

amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter

tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten

ENDFORM def_text_parameter

amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones

Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt

Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt

Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt

icon_create RESULT name text infoicon_create

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 72: buscar_ampliaciones FOROSAP

MOVE lt_fields-value TO l_nameENDIF

Obtengo los FM de los exitsSELECT INTO TABLE lt_tfdirFROM tfdirWHERE funcname LIKE EXIT_

LOOP AT lt_tfdir

CLEARl_group l_include l_namespace l_str_area

l_fname = lt_tfdir-funcname Obtengo el include del user-extisCALL FUNCTION FUNCTION_EXISTSEXPORTINGfuncname = l_fnameIMPORTINGgroup = l_groupinclude = l_includenamespace = l_namespacestr_area = l_str_areaEXCEPTIONSfunction_not_exist = 1OTHERS = 2

IF sy-subrc = 0IF NOT l_include IS INITIAL- Obtengo el coacutedigo fuente del user-exitsCLEAR v_include lt_incl lt_incl[]v_include = l_includeCALL FUNCTION MU_INCLUDE_GETEXPORTINGi_include = v_includeTABLESe_t_include = lt_incl

IF lt_incl[] IS NOT INITIAL Verifico si alguna de las liacuteneas contiene el includeFIND FIRST OCCURRENCE OF l_nameIN TABLE lt_incl

CHECK sy-subrc IS INITIAL

Visualizo el FM del user-exitPERFORM visualizar_linea USING l_include01l_flag = XEXITENDIFENDIFENDIFENDLOOP

CHECK l_flag IS INITIAL

La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value

ENDFORM visualizar_fm_exit

amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter

tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten

ENDFORM def_text_parameter

amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones

Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt

Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt

Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt

icon_create RESULT name text infoicon_create

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 73: buscar_ampliaciones FOROSAP

La ampliacioacuten amp no existeMESSAGE e012(enhancement) WITH lt_fields-value

ENDFORM visualizar_fm_exit

amp---------------------------------------------------------------------amp Form def_text_parameteramp--------------------------------------------------------------------- Defino los textos de los paraacutemetros de seleccioacuten----------------------------------------------------------------------FORM def_text_parameter

tit1 = Paraacutemetrostit2 = Tipo de ampliacioacutentit3 = Tipo de ejecucioacutentext1 = Programatext2 = Transaccioacutentext3 = Includestext4 = Funcionestext5 = Submittext6 = Niveltext7 = User-exittext8 = Baditext9 = BTEtext10 = Sustitucioacutentext11 = Field-exittext12 = c_handlertext13 = Validacioacutentext14 = Punto de ampliacioacuten

ENDFORM def_text_parameter

amp---------------------------------------------------------------------amp Form def_botonesamp--------------------------------------------------------------------- Defino los textos de las botoneras de la pantalla de seleccioacuten----------------------------------------------------------------------FORM def_botones

Agrego el boton de marcar todo en STATUS GUIfunctxt-icon_id = icon_select_allfunctxt-quickinfo = c_text_08sscrfields-functxt_01 = functxt

Agrego el boton de desmarcar todo en STATUS GUIfunctxt-icon_id = icon_deselect_allfunctxt-quickinfo = c_text_09sscrfields-functxt_02 = functxt

Agrego el boton de Breakpoint en STATUS GUIfunctxt-icon_id = icon_message_criticalfunctxt-quickinfo = c_text_06functxt-icon_text = c_text_06sscrfields-functxt_03 = functxt

icon_create RESULT name text infoicon_create

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 74: buscar_ampliaciones FOROSAP

Creo la visualizacioacuten del botoacuten de exits en la DYNPRObtn icon_display_note Ampliacioacuten Visualizar ampliacioacuten Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext1 icon_display_note Proyecto Visualizar Proyecto Creo la visualizacioacuten del botoacuten de proyectos exits en la DYNPROext2 icon_display_note User-exit Visualizar User-exit Creo la visualizacioacuten del botoacuten de Interface en la DYNPRObadi icon_availability_display Interface Visualizar DefInterface Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn1 icon_display_text Tx OBBH Visualizar sustituciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROsust icon_report ProgGenerado Visprograma generado Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPROob28 icon_display_text Tx OB28 Visualizar validaciones Creo la visualizacioacuten del botoacuten de sustitucioacuten en la DYNPRObtn2 icon_display Field-exits Visualizar Field-exits Creo la visualizacioacuten del botoacuten de FIBF en la DYNPRObte1 icon_toggle_display Visualizar FIBF Creo la visualizacioacuten del botoacuten de Evento en la DYNPRObte2 icon_show_events Evento Visualizar Evento Creo la visualizacioacuten del botoacuten de Proceso en la DYNPRObte3 icon_bw_apd Proceso Visualizar Proceso Creo Marcar todo en la DYNPROall icon_select_all c_text_08 Creo Desmarcar todo en la DYNPROdal icon_deselect_all c_text_09 Creo la visualizacioacuten del botoacuten de SENH en la DYNPROsenh icon_detail Visualizar SENH Creo la visualizacioacuten del botoacuten de Customer Implement en la DYNPROcimp icon_table_settings CustImpl Customer Implementation

MOVE sust TO val

ENDFORM def_botones

amp---------------------------------------------------------------------amp Form set_headeramp--------------------------------------------------------------------- Creo el encabezado del ALV correspondiente----------------------------------------------------------------------FORM set_header USING p_cantp_incp_text

DATAl_tit(65) TYPE c

STATICS l_col TYPE i

PERFORM texto_tope

IF l_col IS INITIAL OR l_col EQ 7l_col = 3ELSEADD 1 TO l_colENDIF

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 75: buscar_ampliaciones FOROSAP

FORMAT COLOR = l_col

WRITE p_text TO l_tit CENTERED

TRANSLATE l_tit USING

WRITE Tiacutetulo(70) sy-uline1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

FORMAT COLOR = 2

IF p_tcode IS INITIALCONCATENATE Ampliaciones encontradas en el programa p_progINTO l_tit SEPARATED BY spaceELSECONCATENATE Ampliaciones encontradas en la transaccioacuten p_tcodeINTO l_tit SEPARATED BY spaceENDIF

WRITE Tiacutetulo1(1) sy-vline3 l_tit70(1) sy-vline

IF p_tcode IS INITIAL Obtengo la descripcioacuten del programaSELECT SINGLE FROM trdirtWHERE name EQ p_progAND sprsl EQ sy-langu

CONCATENATE Descripcioacuten trdirt-textINTO l_tit SEPARATED BY space

ELSE Obtengo la descripcioacuten de la transaccioacutenSELECT SINGLE FROM tstctWHERE sprsl EQ sy-languAND tcode EQ p_tcode

CONCATENATE Descripcioacuten tstct-ttextINTO l_tit SEPARATED BY space

ENDIF

WRITE1(1) sy-vline3 l_tit70(1) sy-vline(70) sy-uline

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 76: buscar_ampliaciones FOROSAP

IF p_inc IS NOT INITIAL

CONCATENATE PGMs analizados p_incINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

CONCATENATE Nivel p_nivelINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline

ENDIF

CONCATENATE CantAmpliaciones p_cantINTO l_tit SEPARATED BY space

WRITE1(1) sy-vline3 l_tit70(1) sy-vline Cierro el cuadro(70) sy-uline

SKIP

ENDFORM set_header

amp---------------------------------------------------------------------amp Form visualizar_imp_enhamp--------------------------------------------------------------------- Visualizo las implementaciones del cliente de los enhancement de cualquier tipo----------------------------------------------------------------------FORM visualizar_imp_enh

DATAl_repid LIKE sy-repid

l_repid = sy-repid

PERFORM get_imp_enhPERFORM construir_catalogo_cimpPERFORM definir_layout USING TI_CIMPCHANGING wa_layout

CALL FUNCTION REUSE_ALV_LIST_DISPLAYEXPORTINGi_callback_program = l_repidi_callback_user_command = USER_COMMANDis_layout = wa_layoutit_fieldcat = ti_cat

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 77: buscar_ampliaciones FOROSAP

i_default = Xi_save = ATABLESt_outtab = ti_cimpEXCEPTIONSprogram_error = 1OTHERS = 2

ENDFORM visualizar_imp_enh

amp---------------------------------------------------------------------amp Form construir_catalogo_cimpamp--------------------------------------------------------------------- Construir catalogo de campos para ALV----------------------------------------------------------------------FORM construir_catalogo_cimp

DATAl_repid LIKE sy-repid

REFRESH ti_cat

l_repid = sy-repid

CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGEEXPORTINGi_program_name = l_repidi_internal_tabname = TI_CIMPi_inclname = l_repidCHANGINGct_fieldcat = ti_catEXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3

Asignar atributos de campo en el catalogo de reporte ALVPERFORM asignar_campo_a_catalogo TABLES ti_catUSING

ENHNAME X X X X OBJ_TYPE OBJ_NAME ELEMUSAGE ENHINCLUDE X

ENDFORM construir_catalogo_cimp

amp---------------------------------------------------------------------amp Form get_imp_enhamp--------------------------------------------------------------------- Obtengo las implementaciones creadas----------------------------------------------------------------------FORM get_imp_enh

SELECT enhobj~enhname enhobj~obj_type enhobj~obj_name enhobj~elemusageenhincinx~enhincludeFROM enhobj LEFT OUTER JOIN enhincinx ON

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf

Page 78: buscar_ampliaciones FOROSAP

enhobj~enhname = enhincinx~enhnameINTO TABLE ti_cimpWHERE enhobj~enhname LIKE Z ORenhobj~enhname LIKE Y ANDenhobj~version EQ A

SORT ti_cimp BY enhname obj_type

ENDFORM get_imp_enh

amp---------------------------------------------------------------------amp Form visualizar_enh_cfamp--------------------------------------------------------------------- Visualizo el coacutedigo fuente del enhancement----------------------------------------------------------------------FORM visualizar_enh_cf USING p_enhinclude TYPE any

DATAl_changed LIKE s38e-buf_variedl_subrc LIKE sy-subrclt_source TYPE TABLE OF string

CHECK p_enhinclude IS NOT INITIAL

READ REPORT p_enhinclude INTO lt_source

CHECK sy-subrc IS INITIAL

CALL FUNCTION EDITOR_TABLEEXPORTINGdisplay = Xname = p_enhincludeIMPORTINGchanged = l_changedsubrc = l_subrcTABLEScontent = lt_source

ENDFORM visualizar_enh_cf