dynamisch per Feldsymbol Tabelle lesen und in andere schreib

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

dynamisch per Feldsymbol Tabelle lesen und in andere schreib

Beitrag von TomBar (ForumUser / 8 / 0 / 0 ) »
Hallo,

ich möchte dynamisch aus einer Tabelle lesen und in eine andere Tabelle schreiben, die eine ähnliche Struktur hat. Es muss vor dem Schreiben in die neue noch für jede Zeile ein Feldinhalt ausgetauscht werden.

Ach ja, ich habe hier ein SAP 4.6c

Der Teil mit dem Auslesen und Tauschen vom Inhalt funktioniert soweit ganz gut.

Code: Alles auswählen.

FUNCTION ZMIG_COPY_TABLE.
*"----------------------------------------------------------------------
*"*"Lokale Schnittstelle:
*"  IMPORTING
*"     REFERENCE(I_TABNAME_FROM) TYPE  TABNAME
*"     REFERENCE(I_TABNAME_TO) TYPE  TABNAME
*"  TABLES
*"      I_SELCON STRUCTURE  ZS_SELCON
*"      I_KOMP_TRANS STRUCTURE  ZKOMP_TRANS OPTIONAL
*"  EXCEPTIONS
*"      NOT_FOUND
*"      OTHERS
*"----------------------------------------------------------------------
*
* zeilenweiser Aufbau Tabelle I_SELCON z.B.:
* bukrs = 3011
* AND
* bstyp = 'F'
*
* I_KOMP_TRANS
* dient zur Uebersetzung von alt/neu, z.B. bei LIFNR
* der angegebene Funktionsbaustein wird genutzt,
* um den neuen Wert der übergebenen Komponente zu ermitteln
* Angabe z.B.:
* LIFNR

  DATA: dref       TYPE REF TO data,
        dref_to    TYPE REF TO data,
        i_alv_cat  TYPE TABLE OF lvc_s_fcat,
        ls_alv_cat LIKE LINE OF i_alv_cat,
        i_alv_cat_to  TYPE TABLE OF lvc_s_fcat,
        ls_alv_cat_to LIKE LINE OF i_alv_cat.


  DATA: BEGIN OF itab OCCURS 0.
*        INCLUDE STRUCTURE dntab.
          INCLUDE structure DFIES.
  DATA: END OF itab.

  DATA: BEGIN OF itab_to OCCURS 0.
*        INCLUDE STRUCTURE dntab.
          INCLUDE structure DFIES.
  DATA: END OF itab_to.

  FIELD-SYMBOLS: <table_from> TYPE ANY TABLE.
  FIELD-SYMBOLS: <table_to>   TYPE ANY TABLE.
  FIELD-SYMBOLS: <wa_to>      TYPE ANY.
  FIELD-SYMBOLS: <l_komp>     TYPE ANY.

  Data: l_alt type ELIFN.
  Data: l_neu type ELIFN.

  CALL FUNCTION 'DDIF_NAMETAB_GET'
       EXPORTING
            TABNAME   = i_tabname_from
       TABLES
            DFIES_TAB = itab
       EXCEPTIONS
            NOT_FOUND = 1
            OTHERS    = 2.
  IF SY-SUBRC = 1.
    raise not_found.
  elseif sy-subrc = 2.
    raise others.
  ENDIF.


  LOOP AT itab .
    ls_alv_cat-fieldname = itab-fieldname.
    ls_alv_cat-ref_table = i_tabname_from.
    ls_alv_cat-ref_field = itab-fieldname.
    APPEND ls_alv_cat TO i_alv_cat.
  ENDLOOP.

* build internal table
  CALL METHOD cl_alv_table_create=>create_dynamic_table
      EXPORTING
        it_fieldcatalog = i_alv_cat
      IMPORTING
        ep_table = dref.

  ASSIGN dref->* TO <table_from>.


  CALL FUNCTION 'DDIF_NAMETAB_GET'
       EXPORTING
            TABNAME   = i_tabname_to
       TABLES
            DFIES_TAB = itab_to
       EXCEPTIONS
            NOT_FOUND = 1
            OTHERS    = 2.
  IF SY-SUBRC = 1.
    raise not_found.
  elseif sy-subrc = 2.
    raise others.
  ENDIF.

  LOOP AT itab_to.
    ls_alv_cat_to-fieldname = itab_to-fieldname.
    ls_alv_cat_to-ref_table = i_tabname_to.
    ls_alv_cat_to-ref_field = itab_to-fieldname.
    APPEND ls_alv_cat_to TO i_alv_cat_to.
  ENDLOOP.

  break-point.
* build internal table
  CALL METHOD cl_alv_table_create=>create_dynamic_table
      EXPORTING
        it_fieldcatalog = i_alv_cat_to
      IMPORTING
        ep_table = dref_to.

  ASSIGN dref_to->* TO <table_to>.


*Select Ursprungstabelle mit Selektionsbedingungen
  SELECT * FROM (i_tabname_from) up to 10 rows
    INTO CORRESPONDING FIELDS OF TABLE <table_from>
    where (i_selcon).

  break-point.
*Aufbau interne Tabelle mit eventuell geänderten Feldern

  if not I_KOMP_TRANS is initial.
    loop at <table_from> assigning <wa_to>.

      assign component I_KOMP_TRANS-KOMP
        of structure <wa_to> to <l_komp>.

      CALL FUNCTION 'Z_MIG_TRANS_LIFNR'
           EXPORTING
                I_KOMP = I_KOMP_TRANS-KOMP
                I_ALT  = <l_komp>
           IMPORTING
                E_NEU  = <l_komp>.

      append <wa_to> to <table_to>.

    endloop.
    break-point.
*Speichern der ausgelesenen Daten in Zieltabelle
*  MODIFY (i_tabname_to) FROM TABLE <table_to>.
  else.
*Speichern der ausgelesenen Daten in Zieltabelle
*  MODIFY (i_tabname_to) FROM TABLE <table_from>.
  endif.

*commit work.

  break-point.
ENDFUNCTION.
Nur wie muss ich dann unten in der Schleife, wo getauscht wird in eine neue Workarea schreiben und dann in die Tabelle. Der Code, der da aktuell drinnen steht wirft den folgenden Fehler:

Code: Alles auswählen.

append <wa_to> to <table_to>.
Auf Tabellen vom Typ "HASHED TABLE" bzw. "ANY TABLE" sind weder explizite noch implizite Indexoperationen erlaubt.
"<TABLE_TO>" ist aber vom Typ "ANY TABLE".
Wer weiss Rat?

Danke und Gruss
TomBar

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


Re: dynamisch per Feldsymbol Tabelle lesen und in andere schreib

Beitrag von TomBar (ForumUser / 8 / 0 / 0 ) »
ok, meine erste Frage lässt sich lösen, indem man <table_to> nicht als ANY TABLE sondern als STANDART TABLE deklariert.

Nur leider habe ich jetzt zwei neue Probleme:

1. Dump bei

Code: Alles auswählen.

<l_sysid> = sy-sysid.
reicht vielleicht

Code: Alles auswählen.

assign <table_to> to <wa_to>.
nicht aus? Ich versuche hier ja irgendwie die Tabelle zuzuweisen, obwohl ich ja nur ne Zeile bräuchte?
Der Dump lautet in etwa so:
"Feldsymbol ist noch nicht zugewiesen."

2. wie macht man so eine Zuweisung ala: kopiere alles aus <wa_from> in die gleich lautenden Felder von <wa_to>? Der "move-corresponding" Code, den ich da unten in meiner Schleife stehen habe funktioniert leider nicht.

Code: Alles auswählen.

  assign <table_to> to <wa_to>.

  if not I_KOMP_TRANS is initial.
    loop at <table_from> assigning <wa_from>.

      assign component I_KOMP_TRANS-KOMP
        of structure <wa_from> to <l_komp>.

      CALL FUNCTION I_KOMP_TRANS-FUBA
           EXPORTING
                I_KOMP = I_KOMP_TRANS-KOMP
                I_ALT  = <l_komp>
           IMPORTING
                E_NEU  = <l_komp>.

      break-point.
      assign component 'SYSID' of structure <wa_to> to <l_sysid>.
      <l_sysid> = sy-sysid.

*     move-corresponding <wa_from> to <wa_to>.


      append <wa_to> to <table_to>.

    endloop.
Danke für jeden Tipp.

Gruss
TomBar

Re: dynamisch per Feldsymbol Tabelle lesen und in andere schreib

Beitrag von ewx (Top Expert / 4871 / 314 / 644 ) »
Hi!
Entweder machst du einen LOOP AT <TABLE_TO> ASSIGNING <WA_TO> oder du packst bei jedem Durchlauf von LOOP AT <TABLE_FROM> eine neue Zeile an die TO-Tabelle
APPEND INITIAL LINE TO <TABLE_TO> ASSIGNING <WA_TO>. Je nachdem ob du die TO-Tabelle schon hast, oder nicht. Wenn du die Tabelle schon hast, musst du natürlich mit READ ... ASSIGNING auf den richtigen Tabelleneintrag positionieren.
dann kannst du dein SYSID zuweisen und dein MOVE-CORRESPONDING funktioniert auch.

Re: dynamisch per Feldsymbol Tabelle lesen und in andere schreib

Beitrag von TomBar (ForumUser / 8 / 0 / 0 ) »
ewx hat geschrieben:Hi!
Entweder machst du einen LOOP AT <TABLE_TO> ASSIGNING <WA_TO> oder du packst bei jedem Durchlauf von LOOP AT <TABLE_FROM> eine neue Zeile an die TO-Tabelle
APPEND INITIAL LINE TO <TABLE_TO> ASSIGNING <WA_TO>. Je nachdem ob du die TO-Tabelle schon hast, oder nicht. Wenn du die Tabelle schon hast, musst du natürlich mit READ ... ASSIGNING auf den richtigen Tabelleneintrag positionieren.
dann kannst du dein SYSID zuweisen und dein MOVE-CORRESPONDING funktioniert auch.
Danke für die Hinweise. Habe es jetzt so gelöst:

Problem 1:

Code: Alles auswählen.

* Create the target work area..
DATA: new_line  TYPE REF TO data. 
CREATE DATA new_line LIKE LINE OF <table_to>. 
ASSIGN new_line->* TO <wa_to>.
Problem 2:

Code: Alles auswählen.

assign component 'SYSID' of structure <wa_to> to <l_sysid>.
      <l_sysid> = sy-sysid.
 
      LOOP AT itab .
         ASSIGN COMPONENT itab-fieldname of structure <WA_FROM> TO <FS>.
         CHECK SY-SUBRC = 0.
 
         ASSIGN COMPONENT itab-fieldname of structure <WA_TO> TO <FS1>.
         CHECK SY-SUBRC = 0.
 
* Move from source to target.
         <FS1> = <FS>.
 
      ENDLOOP.

      append <wa_to> to <table_to>.
 
    endloop.
Gruss
TomBar

Seite 1 von 1

Vergleichbare Themen

4
Antw.
4131
Views
Lesen in einer dynamisch generierten internen Tabelle
von Svenson » 05.10.2005 17:07 • Verfasst in ABAP® Core
1
Antw.
1346
Views
Feldsymbol den Typ dynamisch zuzuweisen.(4.6C)
von Hagbard » 02.09.2005 14:38 • Verfasst in ABAP® für Anfänger
1
Antw.
2340
Views
Texttabellen lesen dynamisch
von PeterPaletti » 27.04.2017 09:38 • Verfasst in ABAP® für Anfänger
2
Antw.
1682
Views
Dynamisch Tabelleneinträge lesen
von Kenny » 02.05.2013 08:51 • Verfasst in ABAP® für Anfänger
5
Antw.
3251
Views
Feldsymbol auf interne Tabelle
von snooze » 06.04.2005 09:31 • Verfasst in ABAP® Core

Über diesen Beitrag


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

Aktuelle Forenbeiträge

Hilfe zum FB MATERIAL_MAINTAIN_DARK
Gestern von black_adept gelöst 8 / 1738
HR-Entgeltnachweis
Gestern von ChrisB 4 / 2292

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

Hilfe zum FB MATERIAL_MAINTAIN_DARK
Gestern von black_adept gelöst 8 / 1738
HR-Entgeltnachweis
Gestern von ChrisB 4 / 2292

Unbeantwortete Forenbeiträge

Export von Spools in XLSX
vor 4 Tagen von abapamateur 1 / 280
Feldberechnung ME32K
vor einer Woche von ZF_SAPler 1 / 869
MS-Word als Editor
letzen Monat von tekko 1 / 4375