Du willst die Lösung und ich finde das das suboptimal. Du willst ja was lernen, ich lass mal die Implementierung weg.Kai999 hat geschrieben:Danke Ralf für die Antwort, aber wie gesagt, ich bin ein Anfänger und weiß jetzt nicht wie ich das als Coding eingeben soll. Kannst du ein Beispiel posten?
Code: Alles auswählen.
*----------------------------------------------------------------------*
* CLASS lcl_abapforum DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_abapforum DEFINITION CREATE PUBLIC FINAL.
PUBLIC SECTION.
TYPES:
BEGIN OF _list_entry,
fieldname TYPE fieldname,
counter TYPE i,
END OF _list_entry,
_list_table TYPE STANDARD TABLE OF _list_entry.
CLASS-DATA:
"! application object
application TYPE REF TO lcl_abapforum.
METHODS:
"! object constructor
"!
"! @parameter tabname | name of requested table
"! @raising cx_create_error | Table does not exist
constructor
IMPORTING
tabname TYPE tabname
RAISING cx_create_error,
"! count filled zz-fields
"!
count.
PRIVATE SECTION.
DATA:
"! name of requested table
"! (from user input)
tabname TYPE tabname,
"! list of fieldnames, beginning with ZZ
zz_fieldnames TYPE STANDARD TABLE OF fieldname,
"! result list
list_table TYPE _list_table.
METHODS:
"! check if table exists
"!
"! @parameter tabname | name of requested table
"! @parameter result | indicator: table exists
"! @raising cx_dd_parameter_error | Table does not exist
table_exists
IMPORTING
tabname TYPE tabname
RETURNING
value(result) TYPE abap_bool
RAISING
cx_dd_parameter_error,
"! get fieldnames beginning with ZZ...
"!
get_zz_fieldnames.
ENDCLASS. " lcl_abapforum
*----------------------------------------------------------------------*
* CLASS lcl_abapforum IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_abapforum IMPLEMENTATION.
*......
ENDCLASS. " lcl_abapforum
PARAMETERS:
"! user input: requested table's name
tabname TYPE tabname MATCHCODE OBJECT dd_tabl.
START-OF-SELECTION.
TRY.
" object creation
CREATE OBJECT lcl_abapforum=>application
EXPORTING
tabname = tabname.
lcl_abapforum=>application->count( ).
" application result in lcl_abapforum->application->list_table
" use for alv or whatever you want
CATCH cx_create_error.
* Fehlermeldung....
ENDTRY.
Folgende Benutzer bedankten sich beim Autor ralf.wenzel für den Beitrag:
Kai999
Code: Alles auswählen.
REPORT zz_test.
TYPES: BEGIN OF ty_counter,
fieldname TYPE dd03l-fieldname,
counter TYPE i,
END OF ty_counter,
tt_counter TYPE STANDARD TABLE OF ty_counter.
DATA: gv_tabname TYPE dd02l-tabname,
gt_dd03l TYPE TABLE OF dd03l,
gs_dd03l TYPE dd03l,
gt_counter TYPE tt_counter,
gs_counter TYPE ty_counter,
where_cond TYPE string.
PARAMETERS p_tab TYPE dd02l-tabname.
START-OF-SELECTION.
* 1. Prüfen, ob Tabelle überhaupt existiert.
SELECT SINGLE tabname FROM dd02l INTO gv_tabname
WHERE tabname EQ p_tab.
IF sy-subrc NE 0.
WRITE: / 'Tabelle', p_tab, 'unbekannt'.
RETURN.
ENDIF.
* 2. Felder mit ZZ besorgen
SELECT * FROM dd03l INTO TABLE gt_dd03l
WHERE tabname = p_tab
AND fieldname LIKE 'ZZ%'.
* wenn keine ZZ_Felder vorhanden, entpsrehcende Nachricht ausgeben
IF gt_dd03l IS INITIAL.
WRITE: / 'Keine ZZ_Felder vorhanden'.
ENDIF.
* 3. Arbeitsvorrat abarbeiten und Ergebnis in eine Tabelle GT_COUNTER stellen
LOOP AT gt_dd03l INTO gs_dd03l.
gs_counter-fieldname = gs_dd03l-fieldname.
"where Bedingung dynamisch aufbauen
CLEAR where_cond.
CONCATENATE gs_dd03l-fieldname 'ne space' INTO where_cond SEPARATED BY space.
"Select Count Abfrage
SELECT COUNT( * ) FROM (p_tab) INTO gs_counter-counter WHERE (where_cond).
"Ergebnis wegschreiben
APPEND gs_counter TO gt_counter.
CLEAR gs_counter.
ENDLOOP.
* Ergebnis ausgeben.
LOOP AT gt_counter INTO gs_counter.
WRITE: / gs_counter-fieldname, gs_counter-counter.
ENDLOOP.
Folgende Benutzer bedankten sich beim Autor PeterPaletti für den Beitrag:
Kai999
Super, nu muss er gar nix mehr selbst machen. Genau DAS wollte ich verhindern. Genau wie das Vermitteln schlechten Programmierstils.PeterPaletti hat geschrieben:Ein Beispiel
Folgende Benutzer bedankten sich beim Autor ralf.wenzel für den Beitrag:
gtoXX
Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag (Insgesamt 2):
Unit605 • Murdock
Edsger W. Dijkstra hat geschrieben:Object-oriented programming is an exceptionally bad idea which could only have originated in California.