Alternative zur Abfrage von sy-tabix

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

Alternative zur Abfrage von sy-tabix

Beitrag von STDIN (ForumUser / 39 / 16 / 0 ) »
Hallo zusammen,

ich ändere bzw. füge Einträge über das ALV Grid (benutze die Klasse: cl_gui_alv_grid) in meine Datenbanktabelle hinzu. Dies habe ich mit Hilfe zweier Buttons und einem nachfolgendem Popup realisiert und funktioniert auch. Allerdings fülle ich die interne Tabelle zunächst mit Hilfe eines Loops, indem ich andauernd sy-tabix abfrage und je nachdem in welchem Durchlauf es sich befindet, werden somit die Einträge in meine interne Struktur gespeichert. Ich zeig hier einmal meinen Codeabschnitt, welcher neue Einträge in die Tabelle schreibt (bei der Bearbeitungsfunktion ist dieser annähernd gleich):

CALL FUNCTION 'POPUP_GET_VALUES'
EXPORTING
popup_title = 'Append Data'
TABLES
fields = it_fields
EXCEPTIONS
error_in_fields = 1
OTHERS = 2.

IF sy-subrc = 0.
LOOP AT it_fields INTO is_fields.
IF sy-tabix EQ 1.
gs_out-nummer = is_fields-value.
ELSEIF sy-tabix EQ 2.
gs_out-titel = is_fields-value.
ELSEIF sy-tabix EQ 3.
gs_out-task = is_fields-value.
ELSEIF sy-tabix EQ 4.
gs_out-b_date = is_fields-value.
ELSEIF sy-tabix EQ 5.
gs_out-b_time = is_fields-value.
ELSEIF sy-tabix EQ 6.
gs_out-e_time = is_fields-value.
ELSEIF sy-tabix EQ 7.
gs_out-pause = is_fields-value.
ELSEIF sy-tabix EQ 8.
gs_out-r_time = is_fields-value.
ELSEIF sy-tabix EQ 9.
gs_out-km = is_fields-value.
ELSEIF sy-tabix EQ 10.
IF is_fields-value IS INITIAL.
gs_out-spesen = 'N'.
ELSE.
gs_out-spesen = is_fields-value.
ENDIF.
ELSEIF sy-tabix EQ 11.
gs_out-bearbeiter = is_fields-value.
ELSEIF sy-tabix EQ 12.
gs_out-cr_date = is_fields-value.
ELSEIF sy-tabix EQ 13.
gs_out-cr_time = is_fields-value.
ELSEIF sy-tabix EQ 14.
gs_out-ch_date = is_fields-value.
ELSEIF sy-tabix EQ 15.
gs_out-ch_time = is_fields-value.
ENDIF.
ENDLOOP.

APPEND gs_out TO gt_out.

CALL METHOD lr_alv->refresh_table_display.

* Insert in dtbt
MOVE-CORRESPONDING gs_out TO ls_activities.
INSERT zactvt FROM ls_activities.

Meine Frage is nun, welche kürzeren Alternativen es denn gibt, um dies zu realisieren. Bzw. sollte es mit assign component funktionieren. Damit gibt es allerdings nur meinen Tabellennamen, das letzte belegte Feld und den dazugehörigen Wert aus. Allerdings weiß ich momentan nicht wie ich dies realisieren kann, sodass die Werte ausgegeben werden. Die Werte stehen ja eigentlich in der Tabelle und nicht in der Struktur.

Mein Ansatz war:

assign component <fields> of structure is_fields to <out>.

Aber hier fehlt bestimmt noch etwas...

Ich hoffe mir kann jemand helfen. :)

LG

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


Re: Alternative zur Abfrage von sy-tabix

Beitrag von DeathAndPain (Top Expert / 2025 / 273 / 426 ) »
Dein Ansatz ist prinzipiell schon richtig, allerdings ist Dein IF-Konstrukt aufgeblähter als nötig.

Die 😎-Variante wäre ein Ansatz mit REDUCE von der Form gs_out = REDUCE #( .... Allerdings ist das syntaktisch eher knifflig und was für Profis und Angeber.

Was Du auf jeden Fall schon mal machen könntest, wäre ein CASE-Block anstelle Deines IF. Damit wäre schon viel gewonnen:

Code: Alles auswählen.

LOOP AT it_fields INTO is_fields.
  case sy-tabix.
    when 1.
      gs_out-nummer = is_fields-value.
    when 2.
      gs_out-titel = is_fields-value.
...
Was Du auch machen könntest, wäre die Deklaration einer Hilfsstruktur, deren Spalten genau die gleichen Namen haben wie die von gs_out, aber in der Reihenfolge stehen wie die entsprechenden Tabellenzeilen von it_fields. Dann könntest Du nämlich einfach folgendes machen:

Code: Alles auswählen.

LOOP AT it_fields INTO is_fields.
  assign component sy-tabix of structure ls_hilfsstruktur to field-symbol(<spalte_der_hilfsstruktur>).
  <spalte_der_hilfsstruktur> = is_fields-value.
ENDLOOP.

MOVE-CORRESPONDING hilfsstruktur TO gs_out.
Fertig ist der Lack.

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

Wenn wir einer Partei die Regierungsbeteiligung verweigern, die von einer Mehrheit gewählt worden ist, weil wir diese Partei für schlecht halten, da wir einer anderen Partei angehören, wie ist dann unsere eigene demokratische Gesinnung zu bewerten?

Re: Alternative zur Abfrage von sy-tabix

Beitrag von deejey (Specialist / 429 / 133 / 46 ) »
DeathAndPain hat geschrieben:
13.03.2020 09:26
Die 😎-Variante wäre ein Ansatz mit REDUCE von der Form gs_out = REDUCE #( .... Allerdings ist das syntaktisch eher knifflig und was für Profis und Angeber.
🤪 😝

Seite 1 von 1

Vergleichbare Themen

2
Antw.
3635
Views
Alternative zu COLLECT
von anjaortlieb » 05.10.2007 09:16 • Verfasst in ABAP® für Anfänger
1
Antw.
1797
Views
Alternative zu ARCHIVEOBJECT_DISPLAY ?
von eurotour1 » 11.02.2013 09:29 • Verfasst in ABAP® Core
23
Antw.
12877
Views
Alternative For All Entries
von L0w-RiDer » 11.02.2019 15:33 • Verfasst in ABAP® für Anfänger
2
Antw.
2560
Views
Alternative zum INNER JOIN
von treyfifty » 05.02.2016 10:30 • Verfasst in ABAP® für Anfänger
2
Antw.
3381
Views
HR_TIME_RESULTS_IN_INTERVAL Alternative
von SaskuAc » 20.09.2018 11:33 • Verfasst in Human Resources

Über diesen Beitrag


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

Aktuelle Forenbeiträge

IF mit AND und OR
vor 7 Stunden von DeathAndPain 10 / 27368
BAPI zur ABSO?
vor 3 Wochen von DeathAndPain 2 / 6281
Materialstammerweiterung: Neuer Reiter
vor 4 Wochen von DeathAndPain gelöst 4 / 7556

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.