Fehlersuche Feldsymbol

für eilige Fragen
3 Beiträge • Seite 1 von 1
3 Beiträge Seite 1 von 1

Fehlersuche Feldsymbol

Beitrag von m.schwertle (ForumUser / 94 / 0 / 0 ) »
Was bitte ist hierdran falsch?

Code: Alles auswählen.

*&---------------------------------------------------------------------*
*& Program  Z_DYNAMIC_SQL2
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

PROGRAM  Z_DYNAMIC_SQL2.

TYPE-POOLS abap.

PARAMETERS: lt    RADIOBUTTON GROUP 1 DEFAULT 'X',
            gt    RADIOBUTTON GROUP 1,
            value TYPE i.

DATA: BEGIN OF wa,
        count   TYPE i,
INCLUDE TYPE spfli,
END OF wa.

DATA: checked     TYPE abap_bool,
      name        TYPE fieldname,
      lines       TYPE i,
      descr_ref   TYPE REF TO cl_abap_structdescr,
      sel_list    TYPE TABLE OF edpline,
      group_list  TYPE TABLE OF edpline,
      having      TYPE string.

FIELD-SYMBOLS: <fs>       TYPE ANY,
               <comp_wa>  TYPE abap_compdescr.

START-OF-SELECTION.

  SET PF-STATUS 'MAIN'.

* get all components of table 'SPFLI'
  descr_ref ?= cl_abap_typedescr=>describe_by_name( 'SPFLI' ).

  LOOP AT descr_ref->components ASSIGNING <comp_wa>.
    name = <comp_wa>-name.
    WRITE: / checked AS CHECKBOX, name.
  ENDLOOP.
  lines = LINES( descr_ref->components ).

AT USER-COMMAND.

* determine selected columns
  CLEAR: sel_list, group_list.
  APPEND 'count(*) AS count' TO sel_list.
  DO lines TIMES.
    READ LINE sy-index FIELD VALUE checked.
    IF checked = 'X'.
      READ LINE sy-index FIELD VALUE name.
      APPEND name TO: sel_list, group_list.
    ENDIF.
  ENDDO.

* determine operator
  IF gt = 'X'.
    having = 'count(*) > value'.
  ELSE.
    having = 'count(*) < value'.
  ENDIF.

  SELECT (sel_list)
    FROM spfli UP TO 20 ROWS
    INTO CORRESPONDING FIELDS OF wa
    GROUP BY (group_list)
    HAVING (having).

* write all components to list
    WRITE / wa-count.
    LOOP AT group_list INTO name.
      ASSIGN COMPONENT name OF STRUCTURE wa TO <fs>.
      WRITE <fs>.
    ENDLOOP.
  ENDSELECT.
Laufzeitfehler tritt hier auf:

Code: Alles auswählen.

* write all components to list
    WRITE / wa-count.
    LOOP AT group_list INTO name.
      ASSIGN COMPONENT name OF STRUCTURE wa TO <fs>.
****************************************
      WRITE <fs>. " Fehler hier
****************************************
    ENDLOOP.
  ENDSELECT.
Fehleranalyse:

Code: Alles auswählen.

Fehleranalyse
    Es wurde auf ein noch nicht zugewiesenes Feldsymbol zugegriffen
    (Datensegment Nr. 10).

    Dieser Fehler tritt auf, wenn
    - ein typisiertes Feldsymbol angesprochen wird, bevor es mittels
      ASSIGN gesetzt wird, oder
    - ein Feldsymbol angesprochen wird, das auf die Zeile einer
      internen Tabelle gezeigt hat, die gelöscht wurde, oder
    - ein Feldsymbol angesprochen wird, das vorher mit UNASSIGN
      zurückgesetzt wurde oder das auf ein lokales Feld gezeigt hat,
      das nicht mehr existiert oder
    - ein Parameter einer globalen Funktionsschnittstelle angesprochen
      wird, obwohl der entsprechende Funktionsbaustein nicht aktiv ist,
      d.h. nicht in der Liste der aktiven Aufrufe steht. Die Liste der
      aktiven Aufrufe kann diesem Kurzdump entnommen werden.
Dabei habe ich die Zeile vorher alles ganz sauber assigned... (zumal ich den Code aus einem Handbuch für dynamisches Open SQL habe)

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


Beitrag von ewx (Top Expert / 4887 / 319 / 644 ) »
Die stelle hier:

Code: Alles auswählen.

DATA: BEGIN OF wa,
        count   TYPE i.
        INCLUDE STRUCTURE spfli.
DATA END OF wa.
Jetzt werden nur die Felder von SPFLI inkludiert.
Den von dir definierten Arbeitsbereich müsstest du so ansprechen:
WA-INCLUDE-FELD1

Beitrag von m.schwertle (ForumUser / 94 / 0 / 0 ) »
Hast recht, beim debuggen ist

Code: Alles auswählen.

WA-DISTANCE
leer, wohingegen

Code: Alles auswählen.

WA-INCLUDE-DISTANCE
gesetzt ist. Wie kriege ich das denn jetzt in diesen Zeilen

Code: Alles auswählen.

    WRITE / wa-count.
    LOOP AT group_list INTO name.
      ASSIGN COMPONENT name OF STRUCTURE wa TO <fs>.
      WRITE <fs>.
    ENDLOOP.
korrigiert?

-----

Edit: Lösung gefunden, trivial!

Code: Alles auswählen.

    WRITE / wa-count.
    LOOP AT group_list INTO name.
************************************************************
      ASSIGN COMPONENT name OF STRUCTURE wa-include TO <fs>.
************************************************************
      WRITE <fs>.
    ENDLOOP.
Danke auf jeden Fall für den Hinweis!

Seite 1 von 1

Über diesen Beitrag


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

Aktuelle Forenbeiträge

SAPGui 8.00 32 Bit vs 64 Bit
vor 7 Stunden von DeathAndPain 1 / 195
IBAN und BUT0BK
vor 7 Stunden von DeathAndPain gelöst 5 / 6272
Gewährleistungsende im Equipment
vor einer Woche von Yourairld gelöst 8 / 28414
IF mit AND und OR
vor 3 Wochen von GastX 6 / 16681

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.