Einträge zählen interne Tabelle

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

Einträge zählen interne Tabelle

Beitrag von L0w-RiDer (Specialist / 103 / 10 / 1 ) » 8. Nov 2018 18:58

Hallo,

ich bin gerade an einem Programm dran, bei dem ich die gleichen Nummernfolgen in einer internen Tabelle zählen lassen möchte.

Also ich möchte wissen, wieviele Einträge habe ich in meiner Tabelle die die Ziffernfolge DE888677 haben z.B. und diesen Wert möchte ich dann in das entsprechende Feld rechts von der internen Tabelle schreiben. Z.B. die Ziffernfolge DE888677 kommt 50 mal vor in der internen Tabelle. Die Ziffernfolge DE777555 kommt 20 mal vor usw.

Die interne Tabelle habe ich vorher nach den Nummern sortieren lassen. Somit stehen nun gleiche Nummern in einer Folge.

Ich bin schon mal an einer Schleife dran, glaube aber dass das Ganze zu kompliziert ist und leider funktioniert es auch noch nicht ganz wie ich mir das vorstelle.

Also :

Code: Alles auswählen.


Data: gt_itab type table of ty_tab
         gs_itab type ty_tab
        gt_merk type table of ty_tab
        gs_merk type ty_tab
        gt_ausgabe type table of ty_tab
       gs_ausgabe type ty_tab
       lv_anz type i.


Loop at gt_itab into gs_itab
        if sy-tabix = 1.
        gs_merk = gs_itab.
        lv_anz = 1.
        else.
        if gs_itab-wert = gs_merk-wert 
        lv_anz = lv_anz + 1.
        else.
        gs_merk = gs_itab.
        gs_ausgabe-wert = gs_merk-wert.
        gs_ausgabe-anzahl = lv_anz.
        append gs_ausgabe to gt_ausgabe.
        endif.
        endif.

Leider funktioniert das Ganze so nicht, aber im Ansatz sollte es so richtig sein. Irgendwelche Verbesserungsvorschläge oder Ideen wie es anders gelöst werden könnte?

Vielen Dank im Voraus.

L0w-Rider


Re: Einträge zählen interne Tabelle

Beitrag von nickname8 (Specialist / 106 / 15 / 15 ) » 8. Nov 2018 19:54

Sowas?
Hab grad kein SAP-System zur Hand, aber in die Richtung sollte es gehen...

Code: Alles auswählen.

types:
 beginn of ty_count,
  wert type string,
  count type i,
end of ty_count.  

data: 
  lt_count  type hashed table of ty_count with unique key wert,
  lr_count  type reference of ty_count,
  ls_count  type ty_count.

sort gt_itab by wert.
LOOP AT gt_itab into gs_itab.
  read table  lt_count reference into lr_count with table key wert = gs_itab-wert.
  if sy-subrc ne 0.
    clear ls_count.
    ls_count-wert = gs_itab-wert.
    insert ls_count into table lt_count reference into lr_count.
  endif.
  lr_count->count = lr_count->count + 1. 
endloop.
Oder ohne hashed table und dann mit einer struktur, in der man count immer hochzählt und nur beim ändern des wertes appended.
Zuletzt geändert von nickname8 am 9. Nov 2018 12:27, insgesamt 1-mal geändert.

Re: Einträge zählen interne Tabelle

Beitrag von black_adept (Top Expert / 3232 / 54 / 563 ) » 8. Nov 2018 20:32

Doku lesen zu den Befehlen "AT NEW" und "SUM"
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Einträge zählen interne Tabelle

Beitrag von mfromg (ForumUser / 17 / 11 / 0 ) » 9. Nov 2018 05:18

Eine weitere elegante Möglichkeit bietet der Collect-Befehl.
Hier ein kleines Demo-Programm (es geht hier nicht um den Sinn, sondern um den Coollect-Befehl)

Code: Alles auswählen.

types: begin of ty_spras,
         spras type spras,
         count type i,
       end of ty_spras.
types: ty_spras_tab type standard table of ty_spras.

data: ls_ty_spras type ty_spras.
data: lt_ty_spras type ty_spras_tab.
data: ls_006t type t006t.

select * from t006t into ls_006t.
  move ls_006t-spras to ls_ty_spras-spras.
  move 1             to ls_ty_spras-count.
  collect ls_ty_spras into lt_ty_spras.
endselect.

Re: Einträge zählen interne Tabelle

Beitrag von nickname8 (Specialist / 106 / 15 / 15 ) » 9. Nov 2018 08:44

IIIhhhh, Gruppenstufenwechsel und COLLECT. ;-)

Wenn du ein neues SAP Release hast, guck dir mal die GROUPING-Funktionalität von LOOPs an. Das ist eigentlich genau für sowas gebaut.

LG

Re: Einträge zählen interne Tabelle

Beitrag von L0w-RiDer (Specialist / 103 / 10 / 1 ) » 9. Nov 2018 10:14

"At end of" würde funktionieren, aber leider habe ich zwei Kriterien und da funktioniert es leider nicht, da das zweite Kriterium dann immer *** bekommt.

Gibt es sowas wie AT END OF auch mit zweit Kriterien??

Oder eine andere Möglichkeit.

Also ich möchte nach Ziffern DE224555 und Buchstabenfolge D22 sortieren.

Re: Einträge zählen interne Tabelle

Beitrag von deejey (Specialist / 197 / 48 / 16 ) » 9. Nov 2018 11:38

na das ist jetzt aber ziemlich gedengelt, da musst du eigene Sortfelder für alle Konstellationen bauen und nach denen sortieren

Re: Einträge zählen interne Tabelle

Beitrag von DeathAndPain (Top Expert / 1033 / 119 / 227 ) » 9. Nov 2018 12:19

Wenn Du kein Affentheater mit irgendwelchen Sonderfunktionen des LOOP-Befehls machen möchtest, dann geht durchaus auch Dein Ansatz, es "zu Fuß" aufzusummieren. Nur gefällt mir Dein Code nicht, da er viel zu umständlich ist, erkennbar auch an überflüssigen Feldern wie lv_anz. Kein Wunder, dass Du Dir damit eine (unnötige) Komplexität einhandelst, durch die der Code nicht fehlerfrei funktioniert.

Hier ist eine einfache Lösung in alter Syntax:

Code: Alles auswählen.

Data: gt_itab type table of ty_tab,
        gs_itab type ty_tab,
      gs_merk type ty_tab,
      gt_ausgabe type table of ty_tab,
      gs_ausgabe type ty_tab.


clear gs_merk. " unter der Maßgabe, dass es keine Zeile in gt_itab mit initialem wert gibt
Loop at gt_itab into gs_itab
  if gs_itab-wert <> gs_merk-wert.

    if sy-tabix > 1.
      append gs_ausgabe to gt_ausgabe.
    endif.

    clear gs_ausgabe.
    gs_ausgabe-wert = gs_itab-wert.
  endif.

  add 1 to gs_ausgabe-anzahl.

endloop.
append gs_ausgabe to gt_ausgabe.
Sollte Dein SAP-Release schon 7.40 oder höher sein, dann sag das bitte immer dazu, da es dann schönere und modernere Syntaxformen gibt. (Die alte Syntax funktioniert da aber auch.)

Re: Einträge zählen interne Tabelle

Beitrag von a-dead-trousers (Top Expert / 3206 / 81 / 794 ) » 9. Nov 2018 12:29

L0w-RiDer hat geschrieben:"At end of" würde funktionieren, aber leider habe ich zwei Kriterien und da funktioniert es leider nicht, da das zweite Kriterium dann immer *** bekommt.
Gibt es sowas wie AT END OF auch mit zweit Kriterien??
Die "alten" Gruppenstufen funktionieren "von links nach rechts". Das heißt wenn man in der Struktur fünf Felder hat und mit AT das dritte Feld anspricht, werden auch Änderungen in den zwei Feldern links davon als Gruppenstufenwechsel erkannt.
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.07
Basis: 7.40

Re: Einträge zählen interne Tabelle

Beitrag von L0w-RiDer (Specialist / 103 / 10 / 1 ) » 9. Nov 2018 13:40

okay, es passt jetzt :)
danke.

Re: Einträge zählen interne Tabelle

Beitrag von L0w-RiDer (Specialist / 103 / 10 / 1 ) » 12. Nov 2018 11:39

hmm wenn ich mit Loop gt_itab into gs_itab Group by wert.

Dann sortiert mir der Loop es automatisch, aber wie könnte ich nun die Gruppeneinträge zählen lassen?

Re: Einträge zählen interne Tabelle

Beitrag von a-dead-trousers (Top Expert / 3206 / 81 / 794 ) » 12. Nov 2018 11:41

L0w-RiDer hat geschrieben:hmm wenn ich mit Loop gt_itab into gs_itab Group by wert.

Dann sortiert mir der Loop es automatisch, aber wie könnte ich nun die Gruppeneinträge zählen lassen?
Schau dir mal den Zusatz GROUP SIZE bei LOOP AT ... GROUP BY an.
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.07
Basis: 7.40

Re: Einträge zählen interne Tabelle

Beitrag von L0w-RiDer (Specialist / 103 / 10 / 1 ) » 13. Nov 2018 13:18

LOOP AT spfli_tab INTO wa
GROUP BY ( key1 = wa-carrid key2 = wa-airpfrom
index = GROUP INDEX size = GROUP SIZE )
WITHOUT MEMBERS
INTO DATA(keysplus).

So hab ich es nun gefunden.

ich Loope über meine interne Tabelle (spfli_tab ) in eine Struktur (wa) und dann gruppiere ich. Was meinen die hier bei diesem Beispiel mit key1 oder key2?? also die Spalten/Felder nach denen gruppiert werden soll?

Re: Einträge zählen interne Tabelle

Beitrag von a-dead-trousers (Top Expert / 3206 / 81 / 794 ) » 13. Nov 2018 13:47

L0w-RiDer hat geschrieben:LOOP AT spfli_tab INTO wa
GROUP BY ( key1 = wa-carrid key2 = wa-airpfrom
index = GROUP INDEX size = GROUP SIZE )
WITHOUT MEMBERS
INTO DATA(keysplus).

So hab ich es nun gefunden.

ich Loope über meine interne Tabelle (spfli_tab ) in eine Struktur (wa) und dann gruppiere ich. Was meinen die hier bei diesem Beispiel mit key1 oder key2?? also die Spalten/Felder nach denen gruppiert werden soll?
Die Felder "key1", "key2" usw. sind die Namen der Felder in der Struktur die die Gruppenstufe identifizieren. Mit "index" hat man einen Zähler die wievielte Gruppe gerade durchlaufen wird und mit "size" die Anzahl der Elemete in der Gruppe.
Umgelegt auf deine Tabelle im Ausgangspost:

Code: Alles auswählen.

LOOP AT gt_itab ASSIGNING FIELD-SYMBOL(<ls_itab>)
  GROUP BY ( wert_gruppe = <ls_itab>-wert index = group index size = group size ) ASSIGNING FIELD-SYMBOL(<ls_itab_group>).
  
* Beispiele für die Verwendung
  WRITE <ls_itab_group>-wert_gruppe. "Der aktuelle Wert, entspricht gt_itab-wert.
  WRITE <ls_itab_group>-index. "Der aktuelle Index der Gruppe
  WRITE <ls_itab_group>-size. "Die anzahl der Einträge in der Gruppe
  
* Die "Anzahl" in das erste Tabellenfeld der ursprünglichen Tabelle schreiben
  LOOP AT GROUP <ls_itab_group> ASSIGNING FIELD-SYMBOL(<ls_itab_member>).
    <ls_itab_member>-anzahl = <ls_itab_group>-size.
    exit.
  ENDLOOP.
ENDLOOP.
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.07
Basis: 7.40

Seite 1 von 1

Aktuelle Forenbeiträge

ABAP Clean Code
vor 7 Stunden von ralf.wenzel 36 / 790
ADOBE Forms - geschachtelte Tabellen
vor 8 Stunden von a-dead-trousers 3 / 31
Merkmale in Abhängigkeit vom Beziehungswissen
vor 11 Stunden von wreichelt 6 / 167
Abrechnung Konditionskontrakte Wildcards
vor 11 Stunden von ewx 2 / 22
PDF24 - GUI crasht bei PDF Druck
vor 15 Stunden von Lukas R. 3 / 47

Unbeantwortete Forenbeiträge

[GELÖST] Feld KNVV-BOIDT
vor 4 Tagen von SAP_ENTWICKLER 1 / 46
Sortierbegriffe einer Stückliste ändern
vor 4 Tagen von mbiesenb 1 / 39
Feiertagsklasse und Lohnart Verknüpfung entfernen
vor 4 Tagen von Flashtie 1 / 39
Berechtigungen für Batch User
vor einer Woche von JohnLocklay 1 / 85