Interne Tabelle-Existiert Kopfzeile?? (cl_abap_typedescr)

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
12 Beiträge • Seite 1 von 1
12 Beiträge Seite 1 von 1

Interne Tabelle-Existiert Kopfzeile?? (cl_abap_typedescr)

Beitrag von hfahrian (ForumUser / 53 / 7 / 0 ) »
Hallo zusammen,
Kennt jemand eine Möglichkeit, die Info zu einer internen Tabelle zu ermitteln, ob diese mit einer Kopfzeile definiert ist oder nicht (with header line).
Ich möchte diese Info zur Laufzeit ermitteln und dementsprechend dann weiterverfahren.
Meine Funktionen werden auch in älteren ABAP Programmen verwendet, wo teilweise noch mit Header Lines gearbeitet wird.
IDEE: ... cl_abap_typedescr=>describe_by_data( ITAB) ...
Aber ich habe noch nicht die eindeutigen Ergebnisse finden können.
Zur Not wäre zwar ein Test-Methodenaufruf machbar, der per TRY und CATCH einen Abbruch bei Methodenübergabe einer ITAB mit Header Line abfängt/analysiert.
Aber vielleicht gibt es ja einen besseren Trick dazu.

Beste Grüsse soweit,
Henry
Henry Fahrian
Director Innovate ITC - SAP Consulting/Development
Mauritius

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


Re: Interne Tabelle-Existiert Kopfzeile?? (cl_abap_typedescr

Beitrag von ewx (Top Expert / 4784 / 294 / 628 ) »
Ich könnte mir nur vorstellen, dass man einmal explizit auf den Tabellenkörper abfragt ITAB[] und einmal nur auf den Namen ITAB.
Ist die Tabelle ohne Kopfzeile definiert, dann könnten beide Referenzen von cl_abap_typedescr gleich sein.
Wenn ITAB die Kopfzeile ist, müsste es ein anderer Typ sein.
vielleicht reicht deswegen bereits die Abfrage zu ITAB. Wenn es eine Tabelle ist, dann bekommst du diese Info zurück. Wenn es die Kopfzeile der gleichnamigen Tabelle ist, dann müsstest du die Info "Struktur" zurück bekommen.

Re: Interne Tabelle-Existiert Kopfzeile?? (cl_abap_typedescr

Beitrag von Somani (ForumUser / 81 / 12 / 20 ) »
Hallo

Bei Kopfzeile hat cl_abap_typedescr->kind bei ITAB den Wert cl_abap_typedescr->kind_struct und bei ITAB[] den Wert cl_abap_typedescr->kind_table.
Bei itabs ohne Kopfzeile in beiden Fällen kind_table.

Code: Alles auswählen.

DATA: lt_mara1       TYPE TABLE OF mara,
      lt_mara2       TYPE TABLE OF mara WITH HEADER LINE,
      lr_type_descr1 TYPE REF TO cl_abap_typedescr,
      lr_type_descr2 TYPE REF TO cl_abap_typedescr.


lr_type_descr1 ?= cl_abap_typedescr=>describe_by_data( lt_mara1 ).
lr_type_descr2 ?= cl_abap_typedescr=>describe_by_data( lt_mara1[] ).

IF ( lr_type_descr1->kind = lr_type_descr1->kind_table ) AND ( lr_type_descr2->kind = lr_type_descr2->kind_table ).
  " Zwangsläufig beides "Table" -> also keine Kopfzeile
  WRITE:/ 'lt_mara1 ist ohne Header'.
ELSEIF ( lr_type_descr1->kind = lr_type_descr2->kind_struct ) AND ( lr_type_descr2->kind = lr_type_descr2->kind_table ).
  " Das eine ist Struktur, das andere Table, also Kopfzeile
  WRITE:/ 'lt_mara1 ist mit Header'.
ENDIF.

lr_type_descr1 ?= cl_abap_typedescr=>describe_by_data( lt_mara2 ).
lr_type_descr2 ?= cl_abap_typedescr=>describe_by_data( lt_mara2[] ).

IF ( lr_type_descr1->kind = lr_type_descr1->kind_table ) AND ( lr_type_descr2->kind = lr_type_descr2->kind_table ).
  " Zwangsläufig beides "Table" -> also keine Kopfzeile
  WRITE:/ 'lt_mara2 ist ohne Header'.
ELSEIF ( lr_type_descr1->kind = lr_type_descr2->kind_struct ) AND ( lr_type_descr2->kind = lr_type_descr2->kind_table ).
  " Das eine ist Struktur, das andere Table, also Kopfzeile
  WRITE:/ 'lt_mara2 ist mit Header'.
ENDIF.
Gruss

Edit: ewx schneller ^^

Folgende Benutzer bedankten sich beim Autor Somani für den Beitrag:
ewx


Re: Interne Tabelle-Existiert Kopfzeile?? (cl_abap_typedescr

Beitrag von black_adept (Top Expert / 3943 / 105 / 886 ) »
@Somani,ewx: Aber wenn die Itab eine Tabelle von Tabellen ist, klappt das nicht mehr
@Henry:

Code: Alles auswählen.

GET REFERENCE OF ITAB INTO dref1.  
GET REFERENCE OF ITAB[] INTO dref2.
IF dref1 = dref2.
* ohne Kopfzeile
else.
* mit Kopfzeile
endif.
Aber denk dran, dass du das Coding nicht einfach in eine Form-Routine oder sonstwo hin kapseln kannst, da Tabellen manchmal bei Übergabe ihren Typ ändern. Wenn du eine ohne Kopfzeile definierte Tabelle mittels PERFORM...TABLES ct_table übergibt, so ist sie innerhalb der FORM-Routine auf einmal mit Kopfzeile ansprechbar...

Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag (Insgesamt 2):
ewxSomani

live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Interne Tabelle-Existiert Kopfzeile?? (cl_abap_typedescr

Beitrag von Somani (ForumUser / 81 / 12 / 20 ) »
Uh, danke für die Ergänzung/Korrektur.

Re: Interne Tabelle-Existiert Kopfzeile?? (cl_abap_typedescr

Beitrag von hfahrian (ForumUser / 53 / 7 / 0 ) »
Danke für die Antworten!
Problem kann ich damit handeln!
Die ITAB ist nie von der Form Tabelle von Tabellen, das ist sichergestellt!

Henry :-)
Henry Fahrian
Director Innovate ITC - SAP Consulting/Development
Mauritius

Re: Interne Tabelle-Existiert Kopfzeile?? (cl_abap_typedescr

Beitrag von DeathAndPain (Top Expert / 1795 / 213 / 396 ) »
Trotzdem hätte mich interessiert, wofür Du die Information genau brauchst bzw. was Du im einen Fall anders machen willst als im anderen.

Mal eine ganz dämliche Frage: Würde es anstelle des ganzen Gefaxes mit cl_abap_typedescr nicht einfach ausreichen zu schreiben:

IF meinetabelle <> meinetabelle[].
...
ELSE.
...
ENDIF.


Ohne die eckigen Klammern wird der IF die Kopfzeile für den Vergleich nehmen, wenn es eine gibt.

Und dann kommt aber eine gemeine Frage: Wenn die Tabelle eine Kopfzeile hat, der Tabellenkörper aber genau eine Zeile enthält und diese Zeile mit der Kopfzeile übereinstimmt, wäre der IF dann auch wahr?

Re: Interne Tabelle-Existiert Kopfzeile?? (cl_abap_typedescr

Beitrag von ewx (Top Expert / 4784 / 294 / 628 ) »
IF itab = itab[].
ABAP Compiler hat geschrieben:"ITAB" und "ITAB" dürfen nicht verglichen werden.
:)

Re: Interne Tabelle-Existiert Kopfzeile?? (cl_abap_typedescr

Beitrag von DeathAndPain (Top Expert / 1795 / 213 / 396 ) »
Ich habe die Lösung zwar noch nicht gefunden, aber ich bin dennoch nicht überzeugt, dass es nicht machbar ist. Der von Dir monierte Compilerfehler lässt sich vermeiden:

Code: Alles auswählen.

REPORT ZTEST5.

TYPES: BEGIN OF BEST,
         PLANR TYPE C,
       END OF BEST.

DATA: T1 TYPE TABLE OF BEST WITH HEADER LINE,
      T2 TYPE TABLE OF BEST.

  PERFORM TEST USING T1 T1{}. " geschweifte Klammern, weil eckige in den Forums-code-Tags nicht funktionieren.

*&---------------------------------------------------------------------*
*&      Form  TEST USING T1 TYPE ANY T2 TYPE ANY
*&---------------------------------------------------------------------*
FORM TEST USING T1 TYPE ANY T2 TYPE ANY.
  TRY.
    IF T1 = T2.
      WRITE 'yes'.
    ENDIF.
  CATCH CX_ROOT.
    WRITE 'no'.
  ENDTRY.

ENDFORM.
Leider funktioniert mein obenstehender Code nicht, weil der Vergleich nicht zu einer (behandelbaren) Ausnahme, sondern direkt zu einem Dump führt. Ich habe aber das Gefühhl, schon ziemlich dicht dran zu sein. Man muss nur einen Weg finden, die Zulässigkeit des IFs zu prüfen, ohne in einen Dump reinzulaufen.

Re: Interne Tabelle-Existiert Kopfzeile?? (cl_abap_typedescr

Beitrag von DeathAndPain (Top Expert / 1795 / 213 / 396 ) »
Ich habe es mit ASSIGN versucht angesichts der Tatsache, dass ASSIGN normalerweise niemals dumpt (z.B. wenn man mit 7.40-Mitteln eine nicht vorhandene Tabellenzeile einem Feldsymbol zuweist).

Leider musste ich erkennen, dass ASSIGN offenbar doch dumpen kann, und zwar bei diesem genialen Versuch: :-D

Code: Alles auswählen.

REPORT ZTEST5.

TYPES: BEGIN OF BEST,
         PLANR TYPE C,
       END OF BEST.

DATA: T1 TYPE TABLE OF BEST WITH HEADER LINE.

  PERFORM TEST USING T1.

*&---------------------------------------------------------------------*
*&      Form  TEST USING T1 TYPE ANY
*&---------------------------------------------------------------------*
FORM TEST USING T1 TYPE ANY.

  FIELD-SYMBOLS <T> TYPE TABLE.

  ASSIGN T1 TO <T>.
  IF SY-SUBRC = 0.
    WRITE 'yes'.
  ELSE.
    WRITE 'no'.
  ENDIF.

ENDFORM.
Aber das muss doch irgendwie gehen? :x

Re: Interne Tabelle-Existiert Kopfzeile?? (cl_abap_typedescr

Beitrag von DeathAndPain (Top Expert / 1795 / 213 / 396 ) »
Vielleicht mit einem CAST? Dafür gibt es behandelbare Ausnahmen, wenn der scheitert.

Re: Interne Tabelle-Existiert Kopfzeile?? (cl_abap_typedescr

Beitrag von Somani (ForumUser / 81 / 12 / 20 ) »
DeathAndPain hat geschrieben:Vielleicht mit einem CAST? Dafür gibt es behandelbare Ausnahmen, wenn der scheitert.
Gäbe es schon, aber CAST geht nur wenn das FS voll typisiert ist.

Seite 1 von 1

Vergleichbare Themen

12
Antw.
9358
Views
Interne Tabelle onne Kopfzeile
von Seeburg » 30.05.2005 13:11 • Verfasst in ABAP® für Anfänger
2
Antw.
10509
Views
OO - Interne Tabelle ohne Kopfzeile
von Ifrit » 19.06.2006 16:35 • Verfasst in ABAP® für Anfänger
3
Antw.
1601
Views
Interne Tabelle mit kopfzeile umwandeln
von kaufmann123 » 19.04.2018 11:16 • Verfasst in ABAP® für Anfänger
8
Antw.
3956
Views
Kopfzeile oder Workarea - interne Tabellen
von huckb » 21.02.2013 09:05 • Verfasst in ABAP® Core

Über diesen Beitrag


Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

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

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.

Unbeantwortete Forenbeiträge

Zwischensumme Adobe Forms
vor 3 Tagen von Lucyalison 1 / 71
Group Items auf einer Filterbar
vor einer Woche von Bright4.5 1 / 111
tRFC Transaktionen SM58
vor 4 Wochen von A6272 1 / 141