Interne Tabelle ab einer bestimmten Spalte anfangen zu befüllen möglich?

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

Interne Tabelle ab einer bestimmten Spalte anfangen zu befüllen möglich?

Beitrag von tekko (ForumUser / 60 / 30 / 1 ) »
Hallo Leute,

ich habe eine interne Tabelle mit String Daten :

Code: Alles auswählen.

DATA(lt_data) = VALUE string_table( ). 
Den Inhalt möchte ich nach einer Prozedur (Split) aufteilen und in eine andere interne Tabelle übergeben.

Aber das befüllen soll nicht bei der ersten Spalte beginnen, sondern bei einer beliebigen Spalte.

Ich habe so etwas versucht:

Code: Alles auswählen.

ASSIGN COMPONENT sy-index + 11 OF  STRUCTURE ls_table TO FIELD-SYMBOL(<fs_comp>).
            IF sy-index > ( lines( lt_columns )  ).
              EXIT.
            ENDIF.
Es soll im Prinzip an der 12. Stelle anfangen zu übernehmen. Funktioniert leider so nicht.

Wie kann ich das machen ?

Viele Grüße
Tekko

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


Re: Interne Tabelle ab einer bestimmten Spalte anfangen zu befüllen möglich?

Beitrag von DeathAndPain (Top Expert / 1961 / 261 / 415 ) »
Ich denke schon, dass das funktioniert. Leider hast Du nur so kleine Fragmente Deines Codes wiedergegeben, dass sich daraus kein Programmfehler ableiten lässt. Aber Dein grundsätzlicher Ansatz mit dem ASSIGN COMPONENT ist gut und richtig. Jedenfalls wenn Du tatsächlich von Tabellenspalten sprichst und nicht von Stellen. Beide Begriffe gehen in Deinem Text durcheinander.

Vielleicht magst Du mal Deinen ganzen Code posten, der nicht wunschgemäß funktioniert, insbesondere mit allen Felddeklarationen?

Re: Interne Tabelle ab einer bestimmten Spalte anfangen zu befüllen möglich?

Beitrag von tekko (ForumUser / 60 / 30 / 1 ) »

Code: Alles auswählen.

* Überschriften vorhanden
PARAMETERS: p_head AS CHECKBOX DEFAULT ''.
* Separator / Trennzeichen
PARAMETERS: p_sep TYPE char1 DEFAULT ','.

SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (50) TEXT-001.

SELECTION-SCREEN END OF LINE.

PERFORM import_csv_to_table.




*&---------------------------------------------------------------------*
*&      Form  IMPORT_CSV_TO_DATAENGINE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM import_csv_to_table.
  TRY.
      TABLES: ztc_table.
      DATA: lt_files  TYPE filetable,
            lv_rc     TYPE i,
            lv_action TYPE i.

      cl_gui_frontend_services=>file_open_dialog( EXPORTING
                                                    file_filter    = |csv (*.csv)\|*.csv\|{ cl_gui_frontend_services=>filetype_all }|
                                                    multiselection = abap_true
                                                  CHANGING
                                                    file_table     = lt_files
                                                    rc             = lv_rc
                                                    user_action    = lv_action ).

      IF lv_action = cl_gui_frontend_services=>action_ok AND
         lines( lt_files ) = 1.

        DATA(lt_data) = VALUE string_table( ).
        cl_gui_frontend_services=>gui_upload( EXPORTING
                                                filename = CONV #( lt_files[ 1 ]-filename )
                                                filetype = 'DAT'
                                              CHANGING
                                                data_tab = lt_data ).


        DATA(lv_startzeile) = COND i( WHEN p_head = abap_true THEN 2 ELSE 1 ).
        LOOP AT lt_data ASSIGNING FIELD-SYMBOL(<zeile>).
          DATA(ls_table) = VALUE ztc_table( ).

*      <zeile> = |{ sy-tabix }{ p_sep }{ <zeile> }|.
          SPLIT <zeile> AT p_sep INTO TABLE DATA(lt_columns).

          DO.
            "bei 12 wird nur 1 ausgegeben. Unten das Problem wegen out of bounce lösen

            ASSIGN COMPONENT sy-index + 11 OF  STRUCTURE ls_table TO FIELD-SYMBOL(<fs_comp>).
            IF sy-index > ( lines( lt_columns )  ).
              EXIT.
            ENDIF.

            <fs_comp> =  lt_columns[ sy-index ].



          ENDDO.

          INSERT ztc_table FROM ls_table.
         

        ENDLOOP.



      ENDIF.
    CATCH cx_root INTO DATA(e_text).
      MESSAGE e_text->get_text( ) TYPE 'I'.
  ENDTRY.
ENDFORM.

Das ist der Code.

Mein Ziel: Eine Excel-Tabelle mit den ersten Feldern der Struktur befüllen und mit einer zweiten Excel-Tabelle die restlichen Felder.

Bei diesem Code allerdings wird nur eine Zeile befüllt. Der Rest wird nicht übernommen.

Re: Interne Tabelle ab einer bestimmten Spalte anfangen zu befüllen möglich?

Beitrag von DeathAndPain (Top Expert / 1961 / 261 / 415 ) »
Ich habe Deinen Code in mein System übernommen, die Datenbanktabelle ZTC_TABLE durch eine interne Tabelle ersetzt (da es diese Datenbanktabelle bei uns natürlich nicht gibt), und das Programm funktioniert einwandfrei, jedenfalls wenn ZTC_TABLE ausreichend viele Spalten besitzt! Gibt es vielleicht ein Problem mit dem Tabellenschlüssel Deiner Datenbank, so dass er versucht, mehrfach denselben Primärschlüssel zu INSERTen? Läge ja nahe, wenn die ersten Spalten nicht gefüllt sind (durch das SY-INDEX + 11).

Frag doch mal nach Deinem INSERT den SY-SUBRC ab!

Ansonsten:
  • Der TABLES ZTC_TABLE-Befehl am Anfang ist nutzlos und kann/sollte ersatzlos raus.
  • "out of bounce" made my day! 🤣

Folgende Benutzer bedankten sich beim Autor DeathAndPain für den Beitrag:
tekko


Re: Interne Tabelle ab einer bestimmten Spalte anfangen zu befüllen möglich?

Beitrag von tekko (ForumUser / 60 / 30 / 1 ) »
Ah tatsächlich. Es liegt am Primärschlüssel. SY-SUBRC = 4.
Vielen Dank 😊

Hahaha ich komme von der Java-Welt 😂

Seite 1 von 1

Vergleichbare Themen

2
Antw.
1998
Views
spalte einer internen Tabelle befüllen
von CSZ_Berater » 21.09.2017 09:20 • Verfasst in ABAP® für Anfänger
3
Antw.
2407
Views
interne Tabelle mit Value befüllen.
von L0w-RiDer » 30.11.2018 11:28 • Verfasst in ABAP® für Anfänger
10
Antw.
5701
Views
Interne Tabelle befüllen
von Tanega » 16.02.2017 12:36 • Verfasst in ABAP® für Anfänger
2
Antw.
7099
Views
Interne Tabelle befüllen
von watle » 28.09.2015 23:14 • Verfasst in ABAP® für Anfänger
3
Antw.
2104
Views
Interne Tabelle: neuesten Wert mit bestimmten Spaltenwert
von Tunoto » 08.03.2006 15:56 • Verfasst in ABAP® für Anfänger

Ü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

SD_PRINT_TERMS_OF_PAYMENT
vor 3 Wochen von Manfred K. 1 / 3125
BUSOBJEKT zu CMIS PHIO ermitteln
vor 5 Wochen von snooga87 1 / 4935
aRFC im OO-Kontext
letzen Monat von ralf.wenzel 1 / 5972