Interne Tabelle befüllen

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

Interne Tabelle befüllen

Beitrag von watle (ForumUser / 1 / 1 / 0 ) »
Hallo,
ich möchte eine Tabelle mit 2 Spalten um eine interne Tabelle mit 5 Spalten umwandeln. Könnt ihr mir helfen dies zu erledigen?

ich habe eine Tabelle <itab1> mit folgenden Werten:

name wert
item 1
haben 50
soll 30
item 1
id 01
gewinn 20
...
item n
haben 100
soll 65
item n
id 02
gewinn 35


Nun möchte ich dieser Werte in einer interne Tabelle <itab2>, so abbilden:

item haben soll id gewinn
1 50 30 01 20
... ... .. .. ..
n 100 65 02 35


Vielen Dank!

Code: Alles auswählen.

types: begin of ty_tab,
             item     type string,
             debit    type string,
             credit   type string,
             id         type string,
             win      type string,
           end of ty_tab.
data:    lt_tab   type standard table of ty_tab,
            ls_tab  type ty_tab.

loop at itab1 into ls_itab1_line from itab2.
              case ls_itab1_line-name.
                when 'item'.
                  ls_tab-item = ls_itab1_line-wert.
                when 'haben'.
                  ls_tab-debit = ls_itab1_line-wert.
                when 'soll'.
                  ls_tab-credit = ls_itab1_line-wert.
                when 'id'.
                  ls_tab-id = ls_itab1_line-wert.
                when 'gewinn'.
                  ls_tab-win = ls_itab1_line-wert.
                when others.
              endcase.

              if  ls_tab-item NE space
                and  ls_tab-debit NE space
                and  ls_tab-credit NE space
                and  ls_tab-gewinn NE space.
                  insert ls_tab into table lt_tab.
              endif.
           endloop.

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


Re: Interne Tabelle befüllen

Beitrag von Niels (ForumUser / 77 / 18 / 9 ) »
Guten Morgen,

du möchtest jeweils 5 Zeilen aus der zweiten Spalte von itab1 in eine Zeile in die itab2 transponieren.

Vielleicht Hilft dir dieser Code dabei dies umzusetzen. Ich habe ihn benutzt um es genau anders rum zu machen also aus einer Zeile eine Spalte zu machen. Denke mit ein bisschen umschreiben bekommst du dies auch anders rum hin.

Code: Alles auswählen.

FIELD-SYMBOLS: <fs_dummy>     TYPE any,
               <fs_dummy2>    TYPE any.

LOOP AT itab1.

    curr_line = sy-tabix + 1.

    ASSIGN COMPONENT curr_line OF STRUCTURE itab2 TO <fs_dummy>.

    DO.
      ASSIGN COMPONENT sy-index OF STRUCTURE itab TO <fs_dummy2>.

      IF sy-subrc NE 0.
        EXIT.
      ENDIF.

      IF curr_line = 1.
        <fs_dummy> = <fs_dummy2>.

        APPEND itab2.

      ELSE.

        READ TABLE itab2 INDEX sy-index.

        <fs_dummy> = <fs_dummy2>.

        MODIFY itab2 INDEX sy-index.

      ENDIF.
    ENDDO.
  ENDLOOP.
Viele Grüße

Niels

Folgende Benutzer bedankten sich beim Autor Niels für den Beitrag:
watle


Re: Interne Tabelle befüllen

Beitrag von DHE (ForumUser / 10 / 4 / 0 ) »
Hallo,

bisher hast du nur einen Typ für deine Quell-Tabelle definiert. Du brauchst auch einen Typ für deine Ziel-Tabelle. Außerdem ist nach dem INSERT das CLEAR der Zielstruktur wichtig, damit dein Coding funktioniert.

So müsste es aussehen:

Code: Alles auswählen.

REPORT  zdhe_abap.

TYPES: BEGIN OF ty_tab_ziel,
        item     TYPE string,
        debit    TYPE string,
        credit   TYPE string,
        id       TYPE string,
        win   TYPE string,
       END OF ty_tab_ziel,
       BEGIN OF ty_tab_quelle,
         name TYPE string,
         wert TYPE string,
       END OF ty_tab_quelle.

DATA: lt_ziel   TYPE STANDARD TABLE OF ty_tab_ziel,
      ls_ziel   TYPE ty_tab_ziel,
      lt_quelle TYPE STANDARD TABLE OF ty_tab_quelle,
      ls_quelle TYPE ty_tab_quelle.

FIELD-SYMBOLS: <fs_comp> TYPE ANY.

"Testdaten füllen mit Name Wert
ls_quelle-name = 'ITEM'.
ls_quelle-wert = 1.
APPEND ls_quelle TO lt_quelle.

ls_quelle-name = 'HABEN'.
ls_quelle-wert = 50.
APPEND ls_quelle TO lt_quelle.

ls_quelle-name = 'SOLL'.
ls_quelle-wert = 30.
APPEND ls_quelle TO lt_quelle.

ls_quelle-name = 'ID'.
ls_quelle-wert = 01.
APPEND ls_quelle TO lt_quelle.

ls_quelle-name = 'GEWINN'.
ls_quelle-wert = 20.
APPEND ls_quelle TO lt_quelle.

ls_quelle-name = 'ITEM'.
ls_quelle-wert = 2.
APPEND ls_quelle TO lt_quelle.

ls_quelle-name = 'HABEN'.
ls_quelle-wert = 100.
APPEND ls_quelle TO lt_quelle.

ls_quelle-name = 'SOLL'.
ls_quelle-wert = 65.
APPEND ls_quelle TO lt_quelle.

ls_quelle-name = 'ID'.
ls_quelle-wert = 02.
APPEND ls_quelle TO lt_quelle.

ls_quelle-name = 'GEWINN'.
ls_quelle-wert = 35.
APPEND ls_quelle TO lt_quelle.

"alte Version
LOOP AT lt_quelle INTO ls_quelle. "FROM ist nicht notwendig
  CASE ls_quelle-name.
    WHEN 'ITEM'.
      ls_ziel-item = ls_quelle-wert.
    WHEN 'HABEN'.
      ls_ziel-debit = ls_quelle-wert.
    WHEN 'SOLL'.
      ls_ziel-credit = ls_quelle-wert.
    WHEN 'ID'.
      ls_ziel-id = ls_quelle-wert.
    WHEN 'GEWINN'.
      ls_ziel-win = ls_quelle-wert.
    WHEN OTHERS.
  ENDCASE.

  IF  ls_ziel-item NE space
    AND  ls_ziel-debit NE space
    AND  ls_ziel-credit NE space
    AND  ls_ziel-win NE space.
    INSERT ls_ziel INTO TABLE lt_ziel.
    CLEAR ls_ziel. "wichtig, wegen dem IF in den Zeilen obendrüber
  ENDIF.
ENDLOOP.

BREAK-POINT.
Beachte aber: das funktioniert nur dann, wenn immer alle Spalte in Form von Zeilen zu jedem Datensatz vorhanden sind. Sobald einer fehlt, klappt der INSERT nicht. Außerdem ist der Code recht statisch. Also wenn du oftmals ähnliche Aufgabenstellungen hast, empfiehlt es sich mit ASSIGN COMPOENENT OF STRUCTURE zu arbeiten, wie in dem Post über meinem. Allerdings müssen dann die Werte in der NAME Spalte deiner Quelltabelle mit den Spaltenbezeichnung in der Zielstruktur übereinstimmen.

Code: Alles auswählen.

"neue Version
CLEAR: lt_ziel, ls_ziel.

LOOP AT lt_quelle INTO ls_quelle.

  "immer wenn Name = item beginnt eine neue Zeile
  IF ls_quelle-name = 'ITEM'.
    IF ls_ziel IS NOT INITIAL.
      APPEND ls_ziel TO lt_ziel.
      CLEAR ls_ziel.
    ENDIF.
  ENDIF.

  "fülle die Zielstruktur
  ASSIGN COMPONENT ls_quelle-name OF STRUCTURE ls_ziel TO <fs_comp>.
  IF sy-subrc <> 0.
    "wenn keine Spalte mit dem Namen gefunden wird, gehe zur nächsten Zeile
    CONTINUE.
  ENDIF.

  <fs_comp> = ls_quelle-wert.

ENDLOOP.

"letzte Zeile
IF ls_ziel IS NOT INITIAL.
  APPEND ls_ziel TO lt_ziel.
  CLEAR ls_ziel.
ENDIF.

BREAK-POINT.
Grüße,
Dominic

Seite 1 von 1

Vergleichbare Themen

10
Antw.
5289
Views
Interne Tabelle befüllen
von Tanega » 16.02.2017 12:36 • Verfasst in ABAP® für Anfänger
3
Antw.
2164
Views
interne Tabelle mit Value befüllen.
von L0w-RiDer » 30.11.2018 11:28 • Verfasst in ABAP® für Anfänger
4
Antw.
1349
Views
Interne Tabelle ab einer bestimmten Spalte anfangen zu befüllen möglich?
von tekko » 11.09.2020 15:00 • Verfasst in ABAP® für Anfänger
3
Antw.
2408
Views
DB Tabelle befüllen
von bohne » 06.12.2006 23:47 • Verfasst in ABAP® für Anfänger
4
Antw.
227
Views

Über diesen Beitrag


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