Vergleich Spalteninhalte ohne Angabe von Feldnamen einer ita

Getting started ... Alles für einen gelungenen Start.
10 Beiträge • Seite 1 von 1
10 Beiträge Seite 1 von 1

Vergleich Spalteninhalte ohne Angabe von Feldnamen einer ita

Beitrag von c oco (Specialist / 326 / 12 / 16 ) »
Hallo Abap Forum,

erstmal: ich wünsche euch allen ein frohes neues Jahr...

Es geht um eine dynamische Spaltenabfrage: Hierzu habe ich schon hier Einträge gefunden, was auch gut funktioniert bis auf eine Kleinigkeit.

Was ich hier gefunden habe, ist, das der Spaltenname mittels eines Parameters mitgegeben wird.

Kann ich das auch machen, ohne den Spaltennamen mitzugeben?

Ich habe eine itab. Es sollen dynamisch die Felder vertikal abgearbeitet werden, z.b. mittels index und dann soll der Inhalt des Feldes verglichen werden.

Ich will damit eine Ampelanzeige im ALV Grid darstellen.

Funktioniert alles wunderbar, bis dahin, dass ich keine Spaltennamen mitgeben möchte, weil der Wert, der abgefragt wird, ja in jedem Feld vorkommen könnte.

Code: Alles auswählen.

CLEAR ls_rec.
  LOOP AT lt_rec INTO ls_rec.
    CONCATENATE 'ls_rec-' field INTO fieldname.   [color=#008000] hier hat field den Wert z.b. Matnr das als Parameter mitgegeben wird[/color]
    ASSIGN (fieldname) TO <field>.
    IF sy-subrc <> 0.
      MESSAGE i888(sabapdocu) WITH 'Feldname' field 'nicht in Struktur T000 vorhanden'.
      STOP.
    ENDIF.

    IF <field> EQ 'muss'.
      ls_rec-light = '1'.
    ELSEIF <field> EQ 'optional'.
      ls_rec-light = '2'.
    ELSE.
      ls_rec-light = '3'.
    ENDIF.
    MODIFY lt_rec FROM ls_rec.

  ENDLOOP.
Habt ihr Ideen?

Viele Grüße
coco

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: Vergleich Spalteninhalte ohne Angabe von Feldnamen einer

Beitrag von Ratazong (Specialist / 144 / 1 / 14 ) »

Code: Alles auswählen.

do.
  assign component sy-index of structure ls_rec to <field>.
  if sy-subrc <> 0.
    exit.
  endif.
* Prüfung
enddo.
Gruß

Rata
Normale Menschen wundern sich, warum in der Welt so viel schief läuft.
Programmierer wundern sich, warum alles so gut funktioniert.

Re: Vergleich Spalteninhalte ohne Angabe von Feldnamen einer

Beitrag von a-dead-trousers (Top Expert / 4396 / 223 / 1182 ) »
hi!

Alternativ kannst du auch die Klassen rund um CL_ABAP_TYPEDESCR verwenden um dynamisch die Informationen über den Aufbau der Tabelle/Struktur zu ermitteln.

Code: Alles auswählen.

DATA: lr_table TYPE REF TO cl_abap_tabledescr,
      lr_struct TYPE REF TO cl_abap_structdescr,
      lt_component TYPE abap_compdescr_tab.

lr_table ?= cl_abap_typedescr=>describe_by_data( lt_rec ).
lr_struct ?= lr_table->get_table_line_type( ).
lt_component = lr_struct->get_components( ).
Ist zwar etwas aufwändiger, hat aber den Vorteil, dass man dieses Coding für beliebige Strukturen verwenden kann und zur Laufzeit alle Informationen zur Verfügung hat. Vor Allem wenn man die Struktur nicht kennt (weil z.B. dynamisch generiert) kann man so im Debugger sofort sehen, welche Felder überhaupt vorhanden sind. Und man kann diese Infos auch für andere Zwecke verwenden, z.B. ausgeben aller Felder im Ergebnis usw.
Weiters kann man mithilfe dieser Klassen auch weitere Datenobjekt mittel RTTC anlegen, oder sogar das Ergebnis um zusätzliche Felder erweitern.
Sprich auf diesem Weg ist man flexibler und wenn man es sich von Anfang an angewöhnt, Daten auf diesem Weg zu bearbeiten, hat man für spätere vielleicht aufwändigere Aufgaben bereits das passende Werkzeug zur Hand und weiß auch damit richtig umzugehen. 8)

Wie gesagt, dass soll jetzt die vorherige Lösung in keinster Weise schmälern, nur möchte ich hiermit weitere Alternativen aufzeigen.

P.S.: RTTI/RTTC ist mir inzwischen schon so ans Herz gewachsen ;) Ich kann gar nicht aufhören Lobgesänge darüber zu verfassen :hallo: Ach, wie bin ich früher nur ohne damit zu Recht gekommen? :cry:
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Vergleich Spalteninhalte ohne Angabe von Feldnamen einer

Beitrag von c oco (Specialist / 326 / 12 / 16 ) »
Danke für die Tipps.

@Rata: quick and easy, es funktioniert.

a-dead-trousers: deinen Vorschlag werde ich auch gleich umsetzen, ist auf jeden Fall spannend. Ich muss allerdings vorher mich mit RTTI auseinandersetzen, da ich keine Ahnung davon habe. Hast du vielleicht ausser der SAP Hilfe oder Google irgendwelche aussergewöhnlichen Quellen, die du mir ans Herz legen möchtest, um mir den Einstieg zu erleichtern? Oder wie waren deine Anfänge damit?

Viele Grüße
coco

Re: Vergleich Spalteninhalte ohne Angabe von Feldnamen einer

Beitrag von a-dead-trousers (Top Expert / 4396 / 223 / 1182 ) »
Ich brauchte was OHNE GENERATE SUBROUTINE POOL (viel zu sperrig), also hab ich gegoogelt und damals noch unter 4.63b hab ich RTTI gefunden.
Das wurde dann mit Basis 6.0 glaub ich auf RTTC hochgerüstet.

Grundsätzlich gibt es dazu von SAP eine sehr gute Einführung "ABAP351 SAP RTTI".
Die hab ich im Internet gefunden ;)

In der SAP Hilfe unter CREATE DATA ... TYPE HANDLE ... sind auch noch Infos zu finden.

Grundsätzlich sollte über die Vererbung der Objekte schon ungefähr klar sein wie sich der Datenspeicher im SAP aufbaut.
Ich hab noch zwei Screenshots aus den Unterlagen angehägt die das verdeutlichen sollen, was ich meine ;)

EDIT: Hab das ganze jetzt auch in ein schönes Beispiel gepackt
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Vergleich Spalteninhalte ohne Angabe von Feldnamen einer

Beitrag von c oco (Specialist / 326 / 12 / 16 ) »
Danke für die Empfehlungen. Werd mich damit auseinandersetzen. Ein bissle Respekt hab ich davor schon, das war glaub ich auch der Grund, warum ich mich bis jetzt nicht daran gewagt habe. Aber dank dir hab ich ja schonmal einen guten Ansatz zum Einsteigen.

Viele Grüße
coco

Re: Vergleich Spalteninhalte ohne Angabe von Feldnamen einer

Beitrag von c oco (Specialist / 326 / 12 / 16 ) »
Hallo a_dead_trousers,

ich habe dein Beispiel

Code: Alles auswählen.

    DATA: lr_table TYPE REF TO cl_abap_tabledescr,
          lr_struct TYPE REF TO cl_abap_structdescr,
          lt_component TYPE abap_compdescr_tab.

    lr_table ?= cl_abap_typedescr=>describe_by_data( lt_rec ).
    lr_struct ?= lr_table->get_table_line_type( ).
    lt_component = lr_struct->get_components( ).
in mein code eingefügt aber es funktioniert nicht. Da kommt die Meldung:
Das Ergebnis der funktionalen Methode ist nicht in den Typ von lt_component konvertierbar.

Dann hab ich dein Beispiel Code-Schnippsel: bel. Daten mittels RTTI bestimmen versucht umzusetzen.
Leider kein Erfolg. Kommen sehr viele Fehlermeldungen, da Performs mit unterschiedlichen Formalparametern mehrmals aufgerufen werden usw.
Nach 2 Stunden umstellen habe ich es aufgegeben.

Re: Vergleich Spalteninhalte ohne Angabe von Feldnamen einer

Beitrag von Paddy (ForumUser / 21 / 5 / 0 ) »
also, die Fehlermeldung sagt ja lediglich, dass der Rückgabewert der Methode get_components( ) nicht mit deinem Zuweisungsobjekt harmoniert..

deklariere es mal so:

lt_component TYPE table of abap_componentdescr,

Grüße
Paddy

Re: Vergleich Spalteninhalte ohne Angabe von Feldnamen einer

Beitrag von a-dead-trousers (Top Expert / 4396 / 223 / 1182 ) »
c oco hat geschrieben: Dann hab ich dein Beispiel Code-Schnippsel: bel. Daten mittels RTTI bestimmen versucht umzusetzen.
Leider kein Erfolg. Kommen sehr viele Fehlermeldungen, da Performs mit unterschiedlichen Formalparametern mehrmals aufgerufen werden usw.
Nach 2 Stunden umstellen habe ich es aufgegeben.
ups.. das muss ich glaub ich korrigieren. sry :oops:

Schau dir wenn wieder so eine Fehlermeldung kommt einfach die Parameter der betroffenen Methode an (Doppelklick). Dann merkt man gleich warums nicht geht.

lg ADT

EDIT: Habs korrigiert! Ein ENDFORM hat gefehlt und bei zwei der rekursiven Aufrufe habe ich den falschen Übergabetyp verwendet. Na ja... :evil:
Hatte es leider nicht wirklich gestestet, muss ich zugeben, aber wäre eine schöne Übung gewesen wenn du diese Fehler selbst korrigiert hättest :P
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Vergleich Spalteninhalte ohne Angabe von Feldnamen einer

Beitrag von c oco (Specialist / 326 / 12 / 16 ) »
Danke Paddy es funktioniert. Ich wusste nicht, von welchem Typ ich es deklarieren soll. :(

a-dead-trousers: ich habe es wirklich versucht aber irgendwann hab ich mich nur noch im kreis gedreht. Danke für die Mühe. Ich werde es gleich umsetzen. Ich habe dich ja gewarnt als ich sagte, ich hab davon keine Ahnung aber nur so lernt man.

Danke euch und schönes WE.

Seite 1 von 1

Vergleichbare Themen

0
Antw.
1079
Views
Angabe ob Teillierferschein - Restlieferschein
von Richard_Z » 08.06.2005 16:03 • Verfasst in ABAP® für Anfänger
2
Antw.
4484
Views
Transaktionen mit Angabe des Namensraums
von Ralf Gantenbrink » 22.04.2005 15:26 • Verfasst in Basis
6
Antw.
3448
Views
column/row Angabe mit FUBA GUI DOWNLOAD
von nkuhn » 22.02.2007 16:10 • Verfasst in ABAP® Core
0
Antw.
1066
Views
zusätzliche Angabe von Debitorennummern oder Vertragsnummern
von Jimmy » 08.04.2009 21:03 • Verfasst in Financials
3
Antw.
2626
Views
Fehler:Die BSP URL / enthält keine Angabe eines Namensraumes
von Jana » 03.12.2004 11:32 • Verfasst in Web-Dynpro, BSP + BHTML

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Aktuelle Forenbeiträge

Dialog-Container mit Toolbar/Status
vor 10 Stunden von black_adept gelöst 23 / 3646
User Exit EXIT_RQCPRM10_001
vor 11 Stunden von a-dead-trousers 2 / 244
Trennen Strasse und Hausnummer
vor 17 Stunden von payten 13 / 10574
Daten an Tabelle binden
Gestern von Lukas Sanders 2 / 1294

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Aktuelle Forenbeiträge

Dialog-Container mit Toolbar/Status
vor 10 Stunden von black_adept gelöst 23 / 3646
User Exit EXIT_RQCPRM10_001
vor 11 Stunden von a-dead-trousers 2 / 244
Trennen Strasse und Hausnummer
vor 17 Stunden von payten 13 / 10574
Daten an Tabelle binden
Gestern von Lukas Sanders 2 / 1294

Unbeantwortete Forenbeiträge

aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2837
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9425