Vorlage Upload CSV-Datei mit Job-Steps und Suche nach Stichwort in Programmen
Aus SAP-Wiki
Zur Navigation springenZur Suche springen
Siehe Reporting.
Siehe Report-Vorlage mit Form-Routinen.
Siehe Report-Vorlage mit Lokaler Klasse.
Siehe ALV-Vorlage CL GUI ALV GRID.
Siehe ALV-Vorlage REUSE ALV GRID DISPLAY LVC.
Siehe ALV-Vorlage CL SALV* (Factory).
Siehe Vorlage Upload/Download Datei Frontend.
Siehe Vorlage Upload CSV-Datei mit Job-Steps und Suche nach Stichwort in Programmen.
Siehe Kategorie: ABAP-Vorlagen.
************************************************************************
* Programmname...............: ZLESHP_JOBANALYSE *
* Entwickler.................: René Eberstein *
* CR.........................: Programmanalysen fixe *
* Nummernkreise Ausgangslieferungen *
* Ansprechpartner Berater....: *
* Erstellt am................: 18.10.2023 *
* Online/Batch/USER-EXIT ....: Online *
* Tabellen : TBTCP (Steps von einem Job) *
* Funktionsbeschreibung .....: *
* Es wird eine CSV-Datei hochgeladen mit letzten 3 Monaten Jobs auf *
* Z-Programme aus dem Produktivsystem (Tabelle TBTCP) und diese nach *
* einem String (hier "S_VEELN") durchsucht. *
*----------------------------------------------------------------------*
*& Ä N D E R U N G E N: *
*& <nr>, <sy-uname>, <sy-datum>, <ticket>, <beschreibung> *
*&---------------------------------------------------------------------*
REPORT zleshp_jobanalyse_vbeln.
****************
* DATA & TYPES *
****************
TYPES: BEGIN OF ty_itab,
jobname TYPE tbtcp-jobname, "Jobname
jobcount TYPE tbtcp-jobcount, "Jobcounter
stepcount TYPE tbtcp-stepcount, "Counter
progname TYPE tbtcp-progname, "Programmname
sdldate TYPE tbtcp-sdldate, "Datum
sdltime TYPE tbtcp-sdltime, "Uhrzeit
sdluname TYPE tbtcp-sdluname, "Einplaner
variant TYPE tbtcp-variant, "Variante
vbeln_x TYPE xfeld, "'S_VBELN' vorhanden in Report
devclass TYPE tadir-devclass, "Paket
END OF ty_itab.
Tables: tbtcp.
TYPES: tty_itab TYPE STANDARD TABLE OF ty_itab.
TYPES: BEGIN OF ty_file,
data(900),
END OF ty_file.
TYPES: tty_file TYPE STANDARD TABLE OF ty_file.
TYPES: BEGIN OF ty_upload,
jobname TYPE char100,
jobcount TYPE char100,
stepcount TYPE char100,
progname TYPE char100,
progfromln TYPE char100,
progtoln TYPE char100,
sdldate TYPE char100,
sdltime TYPE char100,
sdluname TYPE char100,
variant TYPE char100,
authcknam TYPE char100,
listident TYPE char100,
xpgpid TYPE char100,
xpgtgtsys TYPE char100,
xpgrfcdest TYPE char100,
xpgprog TYPE char100,
xpgparams TYPE char100,
xpgflag TYPE char100,
conncntl TYPE char100,
stdincntl TYPE char100,
stdoutcntl TYPE char100,
stderrcntl TYPE char100,
tracecntl TYPE char100,
termcntl TYPE char100,
status TYPE char100,
exitcode TYPE char100,
language TYPE char100,
extcmd TYPE char100,
opsystem TYPE char100,
pdest TYPE char100,
prcop TYPE char100,
plist TYPE char100,
prtxt TYPE char100,
primm TYPE char100,
prrel TYPE char100,
prnew TYPE char100,
pexpi TYPE char100,
linct TYPE char100,
linsz TYPE char100,
paart TYPE char100,
prbig TYPE char100,
prsap TYPE char100,
prrec TYPE char100,
prabt TYPE char100,
rest TYPE char255,
END OF ty_upload.
TYPES: tty_upload TYPE STANDARD TABLE OF ty_upload.
DATA: gt_file TYPE STANDARD TABLE OF ty_file,
gt_upload TYPE tty_upload,
gt_itab TYPE tty_itab,
gt_outfile TYPE tty_file.
DATA: gv_down_file TYPE rlgrap-filename.
**********************
* PARAMETER - SCREEN *
**********************
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001. "Selektion
PARAMETERS: p_file TYPE rlgrap-filename.
Parameters: p_split TYPE char1 DEFAULT ',',
p_head AS CHECKBOX DEFAULT abap_true,
p_verd AS CHECKBOX DEFAULT abap_true,
p_suche TYPE char50 default 'S_VBELN'.
Select-Options s_prog for tbtcp-progname.
SELECTION-SCREEN END OF BLOCK b1.
****************************************
* AT SELECTION-SCREEN ON VALUE-REQUEST *
****************************************
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
* Open-File-Dialog zur Auswahl Inputdatei
PERFORM get_filename.
***********************
* AT SELECTION-SCREEN *
***********************
AT SELECTION-SCREEN.
**********************
* START-OF-SELECTION *
**********************
START-OF-SELECTION.
* Datei hochladen in Flatfile von Frontend
PERFORM upload_file
USING p_file
CHANGING gt_file.
* Flatfile in strukturierte interne Tabelle GT_UPLOAD konvertieren
PERFORM read_flatfile_into_upload
USING gt_file
CHANGING gt_upload.
* Fülle Itab
PERFORM fill_itab
USING gt_upload
CHANGING gt_itab.
IF p_suche is not initial.
PERFORM check_suchstring
CHANGING gt_itab.
ENDIF.
PERFORM get_paket
CHANGING gt_itab.
PERFORM alv_itab
USING gt_itab.
**&---------------------------------------------------------------------
**& Form alv_itab
*&---------------------------------------------------------------------
* ALV Function Mod. 'REUSE_ALV_GRID_DISPLAY_LVC'
*----------------------------------------------------------------------
FORM alv_itab
USING it_itab TYPE tty_itab.
TYPE-POOLS: slis.
DATA: lv_repid TYPE sy-repid,
lt_fcat TYPE lvc_t_fcat,
ls_layout TYPE lvc_s_layo,
* ls_sort type LVC_S_SORT,
* lt_sort type LVC_T_SORT,
lt_events TYPE slis_t_event,
ls_variant TYPE disvariant.
lv_repid = sy-repid.
****************
* Fill Variant *
****************
* ls_variant = value #( report = lv_repid
* username = sy-uname
* variant = p_vari ).
***************
* Fill Layout *
***************
PERFORM alv_itab_layout
CHANGING ls_layout.
*************
* Fill Sort *
*************
*lt_sort = value #( base lt_sort
* ( fieldname = ' ' "Identische Werte, die übereinander stehen, werden
* spos = '1' "verbunden und nur der oberste Wert wird angezeigt
* up = 'X'
* group = 'UL'
* subtot = 'X' ) ). "Zwischensummen
***************
* Fill Events *
***************
PERFORM alv_itab_events "Definition Events und Form-Routinten für
CHANGING lt_events. "User-Command, Top-Of-List und Status
*****************
* Fill Fieldcat *
*****************
PERFORM alv_itab_fcat "Definition Felder, die ausgegeben werden sollen
CHANGING lt_fcat.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_interface_check = 'I'
i_callback_program = lv_repid
is_layout_lvc = ls_layout "Layout ALV
it_fieldcat_lvc = lt_fcat "Tabellen mit Feldern der Liste
"it_sort_lvc = lt_sort "Sortierung
i_default = 'X' "Default Variante kann abgespeichert werden
i_save = 'A' "Benutzerabhängige Varianten können gespeichert werden
is_variant = ls_variant "Layoutvariante ziehen
it_events = lt_events "Event-Tabelle
TABLES
t_outtab = it_itab "Daten Ausgabetabelle
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE i531(0u) WITH 'Problem beim Fuba REUSE_ALV_GRID_DISPLAY_LVC'.
ENDIF.
ENDFORM. " alv_itab
*&---------------------------------------------------------------------*
*& Form ALV_ITAB_LAYOUT
*&---------------------------------------------------------------------*
*& ALV Layout füllen
*&---------------------------------------------------------------------*
FORM alv_itab_layout
CHANGING cs_layout TYPE lvc_s_layo.
* cs_layout-zebra = 'X'. "Liste wird im Zebra-Look ausgegeben
* cs_layout-box_fname = 'SELKZ'. "Zeilen der Liste können markiert werden mit Spalte SELKZ
* cs_layout-no_rowmark = abap_true.
* cs_layout-no_toolbar = 'X'. "Keine Toolbar
* cs_layout-excp_fname = 'AMPEL'. "'1'=rot, '2'=gelb, '3'=grün
* cs_layout-excp_led = 'X'. " 'X'=LED, sonst Ampel
* cs_layout-totals_bef = 'X'. "Summen vor Einzelsätzen
cs_layout-cwidth_opt = 'A'. "Spaltenbreite wird optimiert
cs_layout-ctab_fname = 'CELLCOL'. "Tabellenfeld mit Zellfarben
ENDFORM.
*&---------------------------------------------------------------------*
*& Form pf_status_set
*&---------------------------------------------------------------------*
* Kopie des Standardstatus STANDARD aus der Funktionsgruppe SALV
*----------------------------------------------------------------------*
FORM alv_itab_pf_status_set
USING it_extab TYPE slis_t_extab. "#EC CALLED
SET PF-STATUS 'STATUS' EXCLUDING it_extab.
"set TITLEBAR 'TITLE'.
ENDFORM. "pf_status_set
*&---------------------------------------------------------------------*
*& Form alv_itab_events
*&---------------------------------------------------------------------*
* ALV-Events
*----------------------------------------------------------------------*
FORM alv_itab_events
CHANGING pct_events TYPE slis_t_event.
pct_events = VALUE #( ( name = 'USER_COMMAND'
form = 'ALV_ITAB_USER_COMMAND' )
( name = 'TOP_OF_PAGE'
form = 'ALV_ITAB_TOP_OF_PAGE' )
( name = 'PF_STATUS_SET'
form = 'ALV_ITAB_PF_STATUS_SET' )
).
ENDFORM. " alv_itab_events
*&---------------------------------------------------------------------*
*& Form alv_itab_fcat
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM alv_itab_fcat "LVC_S_FCAT
CHANGING ct_fcat TYPE lvc_t_fcat.
* Field =
ct_fcat = VALUE #( BASE ct_fcat ( fieldname = 'VBELN_X'
key = abap_true
) ).
* Field = Entwicklungsklasse
ct_fcat = VALUE #( BASE ct_fcat ( fieldname = 'DEVCLASS'
ref_field = 'DEVCLASS'
ref_table = 'TADIR'
) ).
* Field =
ct_fcat = VALUE #( BASE ct_fcat ( fieldname = 'JOBNAME'
ref_field = 'JOBNAME'
ref_table = 'TBTCP'
) ).
* Field =
ct_fcat = VALUE #( BASE ct_fcat ( fieldname = 'JOBCOUNT'
ref_field = 'JOBCOUNT'
ref_table = 'TBTCP'
) ).
* Field =
ct_fcat = VALUE #( BASE ct_fcat ( fieldname = 'STEPCOUNT'
ref_field = 'STEPCOUNT'
ref_table = 'TBTCP'
) ).
* Field =
ct_fcat = VALUE #( BASE ct_fcat ( fieldname = 'PROGNAME'
ref_field = 'PROGNAME'
ref_table = 'TBTCP'
) ).
* Field =
ct_fcat = VALUE #( BASE ct_fcat ( fieldname = 'SDLDATE'
ref_field = 'SDLDATE'
ref_table = 'TBTCP'
) ).
* Field =
ct_fcat = VALUE #( BASE ct_fcat ( fieldname = 'SDLTIME'
ref_field = 'SDLTIME'
ref_table = 'TBTCP'
) ).
* Field =
ct_fcat = VALUE #( BASE ct_fcat ( fieldname = 'SDLUNAME'
ref_field = 'SDLUNAME'
ref_table = 'TBTCP'
) ).
* Field =
ct_fcat = VALUE #( BASE ct_fcat ( fieldname = 'VARIANT'
ref_field = 'VARIANT'
ref_table = 'TBTCP'
) ).
** Field =
* ct_fcat = value #( base ct_fcat ( fieldname = ' '
* ref_field = ' '
* ref_table = ' '
* ) ).
*
* fieldname = ' ' "Fieldname Itab ALV, obligatory field
* ref_field = ' ' "Referencefield
* ref_table = ' ' "Referecetable
* rollname = ' ' "Dataelement (alternativ to referencefield and referencetable)
* cfieldname = ' ' "Reference currency fields
* qfieldname = ' ' "Referenz quantity fields
* SCRTEXT_L = ' '
* SCRTEXT_M = ' '
* SCRTEXT_S = ' ' "max 10 letters
* REPTEXT = ' '
* SELTEXT = ' '
* tooltip = ' ' "Tooltip
* convexit = 'ALPHA' "Konvertierungsexit ALPHA (Columnvalues without leading 0)
* outputlen = 10 "Outputlength
* emphasize = 'C300' "Color column Beige
* edit = abap_true "Field with input
* f4availabl = abap_true "F4-Valuehelp will be forced
* do_sum = abap_true "Sum values on field
* icon = abap_true "Display value as Icon
* checkbox = abap_true "Display field as checkbox (space/X intern)
* key = abap_true "Display field as key (blue color and stable colum while scrolling left/right)
* no_zero = abap_true "No display 0-values
ENDFORM. " alv_fcat
*&---------------------------------------------------------------------
*& Form USER_COMMAND
*&---------------------------------------------------------------------
* User Command
*----------------------------------------------------------------------
FORM alv_itab_user_command "#EC CALLED
USING r_ucomm TYPE sy-ucomm
rs_selfield TYPE slis_selfield.
DATA: ls_itab TYPE ty_itab.
DATA: lo_ref_alv TYPE REF TO cl_gui_alv_grid,
lt_index_columns TYPE lvc_t_col,
lv_valid TYPE c. "#EC NEEDED
* geänderte Daten holen
* Referenz auf ALV holen
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = lo_ref_alv.
* Gibt die geänderte ITAB zurück
* Wenn die Feldprüfung für geänderte Daten nicht erfolgreich, dann ist lv_valid = space
CALL METHOD lo_ref_alv->check_changed_data
IMPORTING
e_valid = lv_valid.
* Liest die selektierten Spalten
CALL METHOD lo_ref_alv->get_selected_columns
IMPORTING
et_index_columns = lt_index_columns.
* Prüfe ob ein Doppelklick auf eine Zeile erfolgte
CASE r_ucomm.
WHEN '&IC1'.
* Read line of clicked item
READ TABLE gt_itab INDEX rs_selfield-tabindex
INTO ls_itab.
* case rs_selfield-fieldname.
*
* when ' '.
* endcase.
ENDCASE.
ENDFORM. " USER_COMMAND_ITAB
*---------------------------------------------------------------------
* FORM top_of_page
*---------------------------------------------------------------------
* Fülle Header für ALV-Listen
*----------------------------------------------------------------------
FORM alv_itab_top_of_page. "#EC CALLED
DATA: lt_listheader TYPE slis_t_listheader,
lv_datum(10) TYPE c.
* Schreibe Anzahl Datensätze Reporte in Grid Titel
DATA(lv_lines) = lines( gt_itab ).
* Datum in Ausgabeform bringen
WRITE sy-datum TO lv_datum.
lt_listheader = VALUE #( ( typ = 'S'
key = 'Datum'
info = lv_datum )
( typ = 'S'
key = 'Anzahl Datensätze'
info = lv_lines )
).
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = lt_listheader.
* I_LOGO =
* I_END_OF_LIST_GRID =
ENDFORM.
*&---------------------------------------------------------------------*
*& Form GET_FILENAME
*&---------------------------------------------------------------------*
* Popupdialog für Uploadpfad in Parameter laden
*----------------------------------------------------------------------*
FORM get_filename.
DATA: lt_file_table TYPE filetable,
ls_file TYPE file_table,
lv_rc TYPE i.
ls_file-filename = p_file.
APPEND ls_file TO lt_file_table.
CALL METHOD cl_gui_frontend_services=>file_open_dialog
* EXPORTING
* WINDOW_TITLE =
* DEFAULT_EXTENSION =
* DEFAULT_FILENAME =
* FILE_FILTER =
* WITH_ENCODING =
* INITIAL_DIRECTORY =
* MULTISELECTION =
CHANGING
file_table = lt_file_table
rc = lv_rc
* USER_ACTION =
* FILE_ENCODING =
EXCEPTIONS
file_open_dialog_failed = 1
cntl_error = 2
error_no_gui = 3
not_supported_by_gui = 4
OTHERS = 5.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid "Nachrichtenklasse
TYPE sy-msgty "Typ (E = Error, S = Success, I = Info, A = Abbruch)
NUMBER sy-msgno "Nachrichtennummer
WITH sy-msgv1 "Platzhaltervariable1
sy-msgv2 "Platzhaltervariable2
sy-msgv3 "Platzhaltervariable3
sy-msgv4. "Platzhaltervariable4
MESSAGE i800(29) WITH p_file. "Die sequentielle Datei & konnte nicht geöffnet werden
MESSAGE i821(29). "Verarbeitung wurde abgebrochen
LEAVE PROGRAM.
ENDIF.
READ TABLE lt_file_table INTO ls_file INDEX 1.
IF sy-subrc = 0.
p_file = ls_file-filename.
ENDIF.
ENDFORM. " GET_FILENAME
*&---------------------------------------------------------------------*
*& Form UPLOAD_FILE
*&---------------------------------------------------------------------*
* Upload Datei
*----------------------------------------------------------------------*
FORM upload_file
USING iv_file TYPE rlgrap-filename
CHANGING ct_file TYPE tty_file.
DATA: lv_filename TYPE string.
CONSTANTS: lc_11 TYPE i VALUE 11,
lc_12 TYPE i VALUE 12,
lc_13 TYPE i VALUE 13,
lc_14 TYPE i VALUE 14,
lc_15 TYPE i VALUE 15,
lc_16 TYPE i VALUE 16,
lc_17 TYPE i VALUE 17,
lc_18 TYPE i VALUE 18,
lc_19 TYPE i VALUE 19.
lv_filename = iv_file.
CALL METHOD cl_gui_frontend_services=>gui_upload
EXPORTING
filename = lv_filename
* FILETYPE = 'ASC'
* HAS_FIELD_SEPARATOR = SPACE
* HEADER_LENGTH = 0
* READ_BY_LINE = 'X'
* DAT_MODE = SPACE
* CODEPAGE = '1100' "SAP(ISO)-Codepage 1100 Bezug auf ISO-Codepage 8859-1 (umfasst meiste westeuropäischen Zeichen)
* IGNORE_CERR = ABAP_TRUE
* REPLACEMENT = '#'
* VIRUS_SCAN_PROFILE =
* IMPORTING
* FILELENGTH =
* HEADER =
CHANGING
data_tab = ct_file
EXCEPTIONS
file_open_error = 1
file_read_error = 2
no_batch = 3
gui_refuse_filetransfer = 4
invalid_type = 5
no_authority = 6
unknown_error = 7
bad_data_format = 8
header_not_allowed = 9
separator_not_allowed = 10
header_too_long = lc_11
unknown_dp_error = lc_12
access_denied = lc_13
dp_out_of_memory = lc_14
disk_full = lc_15
dp_timeout = lc_16
not_supported_by_gui = lc_17
error_no_gui = lc_18
OTHERS = lc_19.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. " UPLOAD_FILE
*&---------------------------------------------------------------------*
*& Form READ_FLATFILE_INTO_UPLOAD
*&---------------------------------------------------------------------*
* Flatfile in strukturierte ITAB konvertieren
*----------------------------------------------------------------------*
FORM read_flatfile_into_upload
USING it_file TYPE tty_file
CHANGING ct_upload TYPE tty_upload.
DATA: ls_file TYPE ty_file,
ls_upload TYPE ty_upload.
LOOP AT it_file INTO ls_file.
CLEAR ls_upload.
SPLIT ls_file-data
AT p_split
INTO ls_upload-jobname
ls_upload-jobcount
ls_upload-stepcount
ls_upload-progname
ls_upload-progfromln
ls_upload-progtoln
ls_upload-sdldate
ls_upload-sdltime
ls_upload-sdluname
ls_upload-variant
ls_upload-authcknam
ls_upload-listident
ls_upload-xpgpid
ls_upload-xpgtgtsys
ls_upload-xpgrfcdest
ls_upload-xpgprog
ls_upload-xpgparams
ls_upload-xpgflag
ls_upload-conncntl
ls_upload-stdincntl
ls_upload-stdoutcntl
ls_upload-stderrcntl
ls_upload-tracecntl
ls_upload-termcntl
ls_upload-status
ls_upload-exitcode
ls_upload-language
ls_upload-extcmd
ls_upload-opsystem
ls_upload-pdest
ls_upload-prcop
ls_upload-plist
ls_upload-prtxt
ls_upload-primm
ls_upload-prrel
ls_upload-prnew
ls_upload-pexpi
ls_upload-linct
ls_upload-linsz
ls_upload-paart
ls_upload-prbig
ls_upload-prsap
ls_upload-prrec
ls_upload-prabt
ls_upload-rest.
check ls_upload-progname in s_prog.
APPEND ls_upload TO ct_upload.
ENDLOOP.
ENDFORM. " READ_FLATFILE_INTO_UPLOAD
*&---------------------------------------------------------------------*
*& Form FILL_ITAB
*&---------------------------------------------------------------------*
* Füllen Interne Tabelle
*----------------------------------------------------------------------*
FORM fill_itab
USING it_upload TYPE tty_upload
CHANGING ct_itab TYPE tty_itab.
DATA: ls_file TYPE ty_file,
ls_itab TYPE ty_itab.
*********************
* Füllen Positionen *
*********************
LOOP AT it_upload ASSIGNING FIELD-SYMBOL(<fs_upload>).
* Überschriftenzeile übergehen
IF p_head = abap_true AND sy-tabix = 1 and s_prog is initial.
CONTINUE.
ENDIF.
* Umformatieren Zeit, wenn führende Null fehlt
if strlen( <fs_upload>-sdltime ) = 7.
<fs_upload>-sdltime = '0' && <fs_upload>-sdltime.
endif.
* Felder CT_ITAB füllen
ls_itab = VALUE #( jobname = <fs_upload>-jobname
jobcount = <fs_upload>-jobcount
stepcount = <fs_upload>-stepcount
progname = <fs_upload>-progname
sdldate = |{ <fs_upload>-sdldate+6(4) }{ <fs_upload>-sdldate+3(2) }{ <fs_upload>-sdldate(2) }|
sdltime = |{ <fs_upload>-sdltime+(2) }{ <fs_upload>-sdltime+3(2) }{ <fs_upload>-sdltime+6(2) }|
sdluname = <fs_upload>-sdluname
variant = <fs_upload>-variant
).
APPEND ls_itab TO ct_itab.
ENDLOOP.
ENDFORM. " FILL_OUTPUT
*&---------------------------------------------------------------------*
*& Form CHECK_SUCHSTRING
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM check_suchstring
CHANGING ct_itab TYPE tty_itab.
TYPES: BEGIN OF ty_hash,
progname TYPE tbtcp-progname,
vbeln_x TYPE xfeld,
END OF ty_hash.
DATA: lt_hash TYPE HASHED TABLE OF ty_hash WITH UNIQUE KEY progname,
ls_hash TYPE ty_hash.
TYPES: BEGIN OF ty_file,
data TYPE c LENGTH 900,
END OF ty_file.
DATA: lt_file TYPE STANDARD TABLE OF ty_file.
LOOP AT ct_itab ASSIGNING FIELD-SYMBOL(<fs_itab>).
* Prüfe erst mal von der Hash-Tabelle
READ TABLE lt_hash INTO ls_hash WITH KEY progname = <fs_itab>-progname.
IF sy-subrc = 0.
CASE ls_hash-vbeln_x.
WHEN abap_true.
<fs_itab>-vbeln_x = abap_true.
CONTINUE.
WHEN abap_false.
<fs_itab>-vbeln_x = abap_false.
CONTINUE.
ENDCASE.
ENDIF.
* Wenn nicht Hash-Tabelle, dann prüfe in Programmcode, ob 'S_VBELN' vorhanden ist
READ REPORT <fs_itab>-progname INTO lt_file.
LOOP AT lt_file ASSIGNING FIELD-SYMBOL(<fs_file>).
TRANSLATE <fs_file>-data TO UPPER CASE.
SEARCH <fs_file>-data FOR p_suche.
IF sy-subrc = 0.
<fs_itab>-vbeln_x = abap_true.
EXIT.
ENDIF.
ENDLOOP.
ls_hash = VALUE #( progname = <fs_itab>-progname
vbeln_x = <fs_itab>-vbeln_x ).
INSERT ls_hash INTO TABLE lt_hash.
ENDLOOP.
* Lösche alle Programme, wo nicht S_VBELN auftaucht
DELETE ct_itab WHERE vbeln_x = abap_false.
IF p_verd = abap_true.
SORT ct_itab BY progname sdldate DESCENDING.
DELETE ADJACENT DUPLICATES FROM ct_itab COMPARING progname.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form GET_PAKET
*&---------------------------------------------------------------------*
* Lese Paket zum Entwicklungsobjekt
*----------------------------------------------------------------------*
FORM get_paket
CHANGING ct_itab TYPE tty_itab.
LOOP AT ct_itab ASSIGNING FIELD-SYMBOL(<fs_itab>).
SELECT SINGLE
devclass
INTO <fs_itab>-devclass
FROM tadir
WHERE pgmid = 'R3TR'
AND object = 'PROG'
AND obj_name = <fs_itab>-progname.
ENDLOOP.
ENDFORM.