Psst.. new poll here.
[email protected] webmail now available. Want one? Go here.
Cannot use outlook/hotmail/live here to register as they blocking our mail servers. #microsoftdeez
Obey the Epel!
Paste
Pasted by IBA ( 13 years ago )
*&---------------------------------------------------------------------*
*& Form get_entrys
*&---------------------------------------------------------------------*
FORM get_entrys.
* Einlesen Basis über SELECT-OPTIONS abgegrenzt.
DATA:
lt_tfdir TYPE STANDARD TABLE OF tfdir,
lt_name TYPE RANGE OF trdir-name,
lw_name LIKE LINE OF lt_name,
lc_name TYPE trdir-name,
lt_trdir TYPE ty_t_trdir,
lt_class TYPE ty_t_trdir,
li_off TYPE syfdpos,
li_len TYPE syfdpos,
lb_app TYPE abap_bool.
*
FIELD-SYMBOLS:
<trd> TYPE trdir.
*
IF pc_reprt EQ abap_true.
SELECT * FROM trdir INTO TABLE lt_trdir
WHERE name IN so_name
AND subc IN (' ', '1')
AND cnam IN so_cnam
AND cdat IN so_cdat
AND unam IN so_unam
AND udat IN so_udat
AND rstat IN so_rstat.
* Eingelesene Zeilen merken:
gw_sysd-rtrd = gw_sysd-rtrd + sy-dbcnt.
APPEND LINES OF lt_trdir TO gt_trdir.
REFRESH lt_trdir.
ENDIF.
*
IF pc_incld EQ abap_true.
SELECT * FROM trdir INTO TABLE lt_trdir
WHERE name IN so_name
AND subc IN (' ', 'I')
AND cnam IN so_cnam
AND cdat IN so_cdat
AND unam IN so_unam
AND udat IN so_udat
AND rstat IN so_rstat.
* Eingelesene Zeilen merken:
gw_sysd-rtrd = gw_sysd-rtrd + sy-dbcnt.
APPEND LINES OF lt_trdir TO gt_trdir.
REFRESH lt_trdir.
ENDIF.
*
IF pc_modup EQ abap_true.
lt_name[] = so_name[].
LOOP AT so_name INTO lw_name.
lb_app = abap_false.
IF lw_name-low IS NOT INITIAL
AND lw_name-low+0(5) NE 'SAPMZ'.
CONCATENATE 'SAPMZ' lw_name-low INTO lw_name-low.
lb_app = abap_true.
ENDIF.
IF lw_name-high IS NOT INITIAL
AND lw_name-high+0(5) NE 'SAPMZ'.
CONCATENATE 'SAPMZ' lw_name-high INTO lw_name-high.
lb_app = abap_true.
ENDIF.
IF lb_app EQ abap_true.
APPEND lw_name TO lt_name.
ENDIF.
ENDLOOP.
SELECT * FROM trdir INTO TABLE lt_trdir
WHERE name IN lt_name
AND subc IN (' ', 'M')
AND cnam IN so_cnam
AND cdat IN so_cdat
AND unam IN so_unam
AND udat IN so_udat
AND rstat IN so_rstat.
* Eingelesene Zeilen merken:
gw_sysd-rtrd = gw_sysd-rtrd + sy-dbcnt.
APPEND LINES OF lt_trdir TO gt_trdir.
REFRESH lt_trdir.
ENDIF.
*
IF pc_fubas EQ abap_true.
SELECT * FROM tfdir INTO TABLE lt_tfdir
WHERE funcname IN so_name.
IF sy-dbcnt GT 0.
SELECT * FROM trdir INTO TABLE lt_trdir
FOR ALL ENTRIES IN lt_tfdir
WHERE name EQ lt_tfdir-pname
AND subc IN (' ', 'F')
AND cnam IN so_cnam
AND cdat IN so_cdat
AND unam IN so_unam
AND udat IN so_udat
AND rstat IN so_rstat.
* Eingelesene Zeilen merken:
gw_sysd-rtrd = gw_sysd-rtrd + sy-dbcnt.
APPEND LINES OF lt_trdir TO gt_trdir.
REFRESH lt_trdir.
REFRESH lt_tfdir.
ELSE.
lt_name[] = so_name[].
LOOP AT so_name INTO lw_name.
lb_app = abap_false.
IF lw_name-low IS NOT INITIAL
AND lw_name-low CN '='
AND lw_name-low CN '*'
AND lw_name-option NE 'CP'.
CONCATENATE lw_name-low '*' INTO lw_name-low.
lw_name-option = 'CP'.
lb_app = abap_true.
ENDIF.
IF lw_name-high IS NOT INITIAL
AND lw_name-high CN '='
AND lw_name-high CN '*'
AND lw_name-option NE 'CP'.
CONCATENATE lw_name-high '*' INTO lw_name-high.
lb_app = abap_true.
ENDIF.
IF lb_app EQ abap_true.
APPEND lw_name TO lt_name.
ENDIF.
lb_app = abap_false.
IF lw_name-low IS NOT INITIAL
AND lw_name-low+0(5) NE 'SAPL'
AND lw_name-low+0(1) NE '*'.
CONCATENATE 'SAPL' lw_name-low INTO lw_name-low.
lb_app = abap_true.
ENDIF.
IF lw_name-high IS NOT INITIAL
AND lw_name-high+0(5) NE 'SAPL'
AND lw_name-high+0(1) NE '*'.
CONCATENATE 'SAPL' lw_name-high INTO lw_name-high.
lb_app = abap_true.
ENDIF.
IF lb_app EQ abap_true.
APPEND lw_name TO lt_name.
ENDIF.
ENDLOOP.
SELECT * FROM trdir INTO TABLE lt_trdir
WHERE name IN lt_name
AND subc IN (' ', 'F')
AND cnam IN so_cnam
AND cdat IN so_cdat
AND unam IN so_unam
AND udat IN so_udat
AND rstat IN so_rstat.
* Eingelesene Zeilen merken:
gw_sysd-rtrd = gw_sysd-rtrd + sy-dbcnt.
APPEND LINES OF lt_trdir TO gt_trdir.
REFRESH lt_trdir.
ENDIF.
ENDIF.
*
IF pc_subrt EQ abap_true.
lt_name[] = so_name[].
LOOP AT so_name INTO lw_name.
lb_app = abap_false.
IF lw_name-low IS NOT INITIAL
AND lw_name-low+0(5) NE 'SAPMZ'.
CONCATENATE 'SAPMZ' lw_name-low INTO lw_name-low.
lb_app = abap_true.
ENDIF.
IF lw_name-high IS NOT INITIAL
AND lw_name-high+0(5) NE 'SAPMZ'.
CONCATENATE 'SAPMZ' lw_name-high INTO lw_name-high.
lb_app = abap_true.
ENDIF.
IF lb_app EQ abap_true.
APPEND lw_name TO lt_name.
ENDIF.
ENDLOOP.
SELECT * FROM trdir INTO TABLE lt_trdir
WHERE name IN lt_name
AND subc IN (' ', 'S')
AND cnam IN so_cnam
AND cdat IN so_cdat
AND unam IN so_unam
AND udat IN so_udat
AND rstat IN so_rstat.
* Eingelesene Zeilen merken:
gw_sysd-rtrd = gw_sysd-rtrd + sy-dbcnt.
APPEND LINES OF lt_trdir TO gt_trdir.
REFRESH lt_trdir.
ENDIF.
*
IF pc_class EQ abap_true.
lt_name[] = so_name[].
LOOP AT so_name INTO lw_name.
lb_app = abap_false.
IF lw_name-low IS NOT INITIAL
AND lw_name-low CN '='
AND lw_name-low CN '*'
AND lw_name-option NE 'CP'.
CONCATENATE lw_name-low '*' INTO lw_name-low.
lw_name-option = 'CP'.
lb_app = abap_true.
ENDIF.
IF lw_name-high IS NOT INITIAL
AND lw_name-high CN '='
AND lw_name-high CN '*'
AND lw_name-option NE 'CP'.
CONCATENATE lw_name-high '*' INTO lw_name-high.
lb_app = abap_true.
ENDIF.
IF lb_app EQ abap_true.
APPEND lw_name TO lt_name.
ENDIF.
ENDLOOP.
SELECT * FROM trdir INTO TABLE lt_trdir
WHERE name IN lt_name
AND subc IN (' ', 'K')
AND cnam IN so_cnam
AND cdat IN so_cdat
AND unam IN so_unam
AND udat IN so_udat
AND rstat IN so_rstat.
* Eingelesene Zeilen merken:
gw_sysd-rtrd = gw_sysd-rtrd + sy-dbcnt.
APPEND LINES OF lt_trdir TO gt_trdir.
LOOP AT lt_trdir ASSIGNING <trd>.
FIND '=' IN <trd>-name MATCH OFFSET li_off MATCH LENGTH li_len.
IF sy-subrc EQ 0
AND li_off GT 0.
li_len = li_len + li_off.
lc_name = <trd>-name(li_len).
CONCATENATE lc_name '%' INTO lc_name.
SELECT * FROM trdir INTO TABLE lt_class
WHERE name LIKE lc_name
AND subc EQ 'I'
AND cnam IN so_cnam
AND cdat IN so_cdat
AND unam IN so_unam
AND udat IN so_udat
AND rstat IN so_rstat.
* Eingelesene Zeilen merken:
gw_sysd-rtrd = gw_sysd-rtrd + sy-dbcnt.
APPEND LINES OF lt_class TO gt_trdir.
REFRESH lt_class.
ENDIF.
ENDLOOP.
REFRESH lt_trdir.
ENDIF.
*
SORT gt_trdir BY name.
DELETE ADJACENT DUPLICATES FROM gt_trdir.
ENDFORM. " get_entrys
*&---------------------------------------------------------------------*
*& Form chk_devcls
*&---------------------------------------------------------------------*
FORM chk_devcls.
* Entwicklungsklasse/Paket verifizieren.
DATA:
lc_name TYPE tadir-obj_name,
li_off TYPE syfdpos.
*
FIELD-SYMBOLS:
<trd> TYPE trdir.
*
CHECK ( so_pakt IS NOT INITIAL ). "*/ Nur wenn vorgegeben!
*
LOOP AT gt_trdir ASSIGNING <trd>.
CASE <trd>-subc.
WHEN space OR '1'.
SELECT SINGLE COUNT( * ) FROM tadir "#EC *
WHERE pgmid EQ 'R3TR'
AND object EQ 'PROG'
AND obj_name EQ <trd>-name
AND devclass IN so_pakt.
WHEN 'I'.
FIND '=' IN <trd>-name MATCH OFFSET li_off.
IF sy-subrc EQ 0
AND li_off GT 0.
lc_name = <trd>-name(li_off).
SELECT SINGLE COUNT( * ) FROM tadir "#EC *
WHERE pgmid EQ 'R3TR'
AND object EQ 'CLAS'
AND obj_name EQ lc_name
AND devclass IN so_pakt.
ENDIF.
IF sy-dbcnt EQ 0.
SELECT SINGLE COUNT( * ) FROM tadir "#EC *
WHERE pgmid EQ 'R3TR'
AND object EQ 'PROG'
AND obj_name EQ <trd>-name
AND devclass IN so_pakt.
ENDIF.
IF sy-dbcnt EQ 0.
lc_name = <trd>-name.
SHIFT lc_name LEFT DELETING LEADING 'L'.
SELECT SINGLE COUNT( * ) FROM tadir "#EC *
WHERE pgmid EQ 'R3TR'
AND object EQ 'PROG'
AND obj_name EQ lc_name
AND devclass IN so_pakt.
ENDIF.
IF sy-dbcnt EQ 0.
lc_name = <trd>-name.
SHIFT lc_name LEFT DELETING LEADING 'SAPL'.
SELECT SINGLE COUNT( * ) FROM tadir "#EC *
WHERE pgmid EQ 'R3TR'
AND object EQ 'PROG'
AND obj_name EQ lc_name
AND devclass IN so_pakt.
ENDIF.
WHEN 'M' OR 'S'.
WHEN 'F'.
IF <trd>-name CS '='.
FIND '=' IN <trd>-name MATCH OFFSET sy-fdpos.
lc_name = <trd>-name(sy-fdpos).
ELSE.
lc_name = <trd>-name.
ENDIF.
SELECT SINGLE COUNT( * ) FROM tadir
WHERE pgmid EQ 'R3TR'
AND object IN ('FUGR', 'PROG') "#EC *
AND obj_name EQ lc_name
AND devclass IN so_pakt.
IF sy-dbcnt EQ 0.
lc_name = <trd>-name.
SHIFT lc_name LEFT DELETING LEADING 'L'.
SELECT SINGLE COUNT( * ) FROM tadir "#EC *
WHERE pgmid EQ 'R3TR'
AND object EQ 'FUGR'
AND obj_name EQ lc_name
AND devclass IN so_pakt.
IF sy-dbcnt EQ 0.
lc_name = <trd>-name.
SHIFT lc_name LEFT DELETING LEADING 'SAPL'.
SELECT SINGLE COUNT( * ) FROM tadir "#EC *
WHERE pgmid EQ 'R3TR'
AND object EQ 'FUGR'
AND obj_name EQ lc_name
AND devclass IN so_pakt.
ENDIF.
ENDIF.
WHEN 'J' OR 'K'.
IF <trd>-name CS '='.
FIND '=' IN <trd>-name MATCH OFFSET sy-fdpos.
lc_name = <trd>-name(sy-fdpos).
ELSE.
lc_name = <trd>-name.
ENDIF.
SELECT SINGLE COUNT( * ) FROM tadir
WHERE pgmid EQ 'R3TR'
AND object IN ('CLAS', 'PROG') "#EC *
AND obj_name EQ lc_name
AND devclass IN so_pakt.
ENDCASE.
*
IF sy-dbcnt EQ 0.
DELETE gt_trdir.
ELSE.
gw_sysd-rtad = gw_sysd-rtad + sy-dbcnt.
ENDIF.
ENDLOOP.
ENDFORM. " chk_devcls
*&---------------------------------------------------------------------*
*& Form get_source
*&---------------------------------------------------------------------*
FORM get_source.
* Quellcode der Objekte reinholen.
DATA:
lt_tab TYPE ty_t_src, "*/ Quellcode
lb_fndd TYPE abap_bool, "*/ Dynpro
lb_fndi TYPE abap_bool, "*/ Include
lb_fndt TYPE abap_bool. "*/ Text
*
FIELD-SYMBOLS:
<tab> TYPE ty_t_src,
<trd> TYPE trdir.
*
ASSIGN lt_tab TO <tab>.
*
LOOP AT gt_trdir ASSIGNING <trd>.
CLEAR gw_result.
REFRESH <tab>.
READ REPORT <trd>-name INTO <tab>
MAXIMUM WIDTH INTO gw_result-maxlen.
IF sy-subrc EQ 0.
gw_result-trdir = <trd>.
gw_sysd-rlin = gw_sysd-rlin + LINES( <tab> ).
PERFORM get_incs USING lb_fndi.
PERFORM get_text USING lb_fndt.
PERFORM get_dynp USING lb_fndd.
SEARCH <tab> FOR pc_searc.
IF sy-subrc EQ 0
OR lb_fndi EQ abap_true
OR lb_fndt EQ abap_true
OR lb_fndd EQ abap_true.
gw_result-source = <tab>.
APPEND gw_result TO gt_result.
ENDIF.
ENDIF.
ENDLOOP.
*
DELETE gt_incs
WHERE fnds EQ abap_false
AND fndt EQ abap_false.
ENDFORM. " get_source
*&---------------------------------------------------------------------*
*& Form get_incs
*&---------------------------------------------------------------------*
FORM get_incs USING fnd TYPE abap_bool.
DATA:
lw_incp TYPE d010inc, "*/ Zuordnung
lw_incs TYPE ty_s_incs. "*/ Source
*
FIELD-SYMBOLS:
<inn> TYPE d010inc-include, "*/ Namen
<inp> TYPE d010inc, "*/ Zuordnung
<ins> TYPE ty_s_incs, "*/ Source
<txt> TYPE textpool. "*/ TEXTPOOL
*
CLEAR fnd.
CHECK ( pc_inclu EQ abap_true ).
* Alle INCLUDES des Reports reinholen:
SELECT include FROM d010inc INTO TABLE gw_result-incn
WHERE master EQ gw_result-trdir-name
AND include NE 'DB__SSEL'
AND include NOT LIKE '<%'
AND include NOT LIKE '>%'
AND include NOT LIKE '%*%*_%' ESCAPE '*'
AND include NOT LIKE '%=%'.
* Drüberloopen:
LOOP AT gw_result-incn ASSIGNING <inn>.
CLEAR: lw_incp, lw_incs.
* Dieses INCLUDE schon mal bearbeitet?
READ TABLE gt_incp ASSIGNING <inp>
WITH KEY include = <inn>.
* Ja. Dann nur Zuordnung zum Report herstellen:
IF sy-subrc EQ 0.
lw_incp-master = gw_result-trdir-name.
lw_incp-include = <inp>-include.
APPEND lw_incp TO gt_incp.
READ TABLE gt_incs ASSIGNING <ins>
WITH KEY incn = <inp>-include.
IF sy-subrc EQ 0.
fnd = <ins>-fnds.
ENDIF.
* Nein. Dann reinholen
ELSE.
lw_incp-master = gw_result-trdir-name.
lw_incp-include = <inn>.
APPEND lw_incp TO gt_incp.
lw_incs-incn = <inn>.
lw_incs-chk = abap_false.
lw_incs-fnds = abap_false.
READ REPORT lw_incs-incn INTO lw_incs-source.
IF sy-subrc EQ 0.
gw_sysd-rinc = gw_sysd-rinc + LINES( lw_incs-source ).
SEARCH lw_incs-source FOR pc_searc.
IF sy-subrc EQ 0.
lw_incs-fnds = abap_true.
fnd = abap_true.
ELSE.
REFRESH lw_incs-source.
ENDIF.
ENDIF.
IF pc_texte EQ abap_true.
READ TEXTPOOL lw_incs-incn INTO lw_incs-text.
IF sy-subrc EQ 0.
gw_sysd-rtxt = gw_sysd-rtxt + LINES( lw_incs-text ).
LOOP AT lw_incs-text ASSIGNING <txt>.
SEARCH <txt>-entry FOR pc_searc.
IF sy-subrc EQ 0.
lw_incs-fndt = abap_true.
fnd = abap_true.
ELSE.
DELETE lw_incs-text.
ENDIF.
ENDLOOP.
ENDIF.
ENDIF.
APPEND lw_incs TO gt_incs.
ENDIF.
ENDLOOP.
ENDFORM. " get_incls
*&---------------------------------------------------------------------*
*& Form get_text
*&---------------------------------------------------------------------*
FORM get_text USING fnd TYPE abap_bool.
FIELD-SYMBOLS:
<txt> TYPE textpool.
*
CLEAR fnd.
*
CHECK ( pc_texte EQ abap_true ).
*
READ TEXTPOOL gw_result-trdir-name INTO gw_result-text.
IF sy-subrc EQ 0.
gw_sysd-rtxt = gw_sysd-rtxt + LINES( gw_result-text ).
LOOP AT gw_result-text ASSIGNING <txt>.
SEARCH <txt>-entry FOR pc_searc.
IF sy-subrc EQ 0.
fnd = abap_true.
ELSE.
DELETE gw_result-text.
ENDIF.
ENDLOOP.
ENDIF.
ENDFORM. " get_text
*&---------------------------------------------------------------------*
*& Form get_dynp
*&---------------------------------------------------------------------*
FORM get_dynp USING fnd TYPE abap_bool.
DATA:
lt_tmp TYPE STANDARD TABLE OF d020t,
lw_tmp TYPE d020s, "#EC NEEDED
lw_dyn TYPE ty_s_dynp,
lb_log TYPE abap_bool,
lb_fld TYPE abap_bool,
lb_prm TYPE abap_bool,
lb_txt TYPE abap_bool.
*
FIELD-SYMBOLS:
<tmp> TYPE d020t,
<pgm> TYPE d020s-prog,
<dnr> TYPE d020s-dnum,
<fld> TYPE d021s.
*
CLEAR fnd.
*
CHECK ( pc_dynpr EQ abap_true ).
*
SELECT * FROM d020t INTO TABLE lt_tmp
WHERE prog EQ gw_result-trdir-name.
* AND dtxt NOT LIKE 'SEL_SCREEN%'.
*
LOOP AT lt_tmp ASSIGNING <tmp>.
lw_dyn-head = <tmp>.
ASSIGN lw_dyn-head-dynr TO <dnr> CASTING.
ASSIGN lw_dyn-head-prog TO <pgm> CASTING.
IMPORT DYNPRO
lw_tmp
lw_dyn-field
lw_dyn-logic
lw_dyn-parms ID <tmp>.
IF sy-subrc EQ 0.
gw_sysd-rdyn = gw_sysd-rdyn + 1.
CLEAR: lb_log, lb_fld, lb_prm, lb_txt.
SEARCH lw_dyn-logic FOR pc_searc.
IF sy-subrc EQ 0.
lb_log = abap_true.
ELSE.
REFRESH lw_dyn-logic.
ENDIF.
LOOP AT lw_dyn-field ASSIGNING <fld>.
SEARCH <fld>-stxt FOR pc_searc.
IF sy-subrc NE 0.
SEARCH <fld>-res1 FOR pc_searc.
IF sy-subrc NE 0.
SEARCH <fld>-res2 FOR pc_searc.
ENDIF.
ENDIF.
IF sy-subrc EQ 0.
lb_fld = abap_true.
ELSE.
DELETE lw_dyn-field.
ENDIF.
ENDLOOP.
SEARCH lw_dyn-parms FOR pc_searc.
IF sy-subrc EQ 0.
lb_prm = abap_true.
ELSE.
REFRESH lw_dyn-parms.
ENDIF.
SEARCH lw_dyn-text FOR pc_searc.
IF sy-subrc EQ 0.
lb_txt = abap_true.
ELSE.
REFRESH lw_dyn-text.
ENDIF.
SEARCH lw_dyn-head FOR pc_searc.
IF sy-subrc EQ 0
OR lb_log EQ abap_true
OR lb_fld EQ abap_true
OR lb_prm EQ abap_true
OR lb_txt EQ abap_true.
fnd = abap_true.
APPEND lw_dyn TO gt_dynp.
ENDIF.
ENDIF.
CLEAR lw_dyn.
ENDLOOP.
ENDFORM. " get_dynp
Revise this Paste