select all entries in itab

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

select all entries in itab

Beitrag von spot (ForumUser / 54 / 0 / 0 ) »
Hi,

Ich hab folgendes Problem:

Ich hab eine interne tabelle und greife über einen schlüssel auf eine transparente tabelle zu. nachher sollen alle sätze mit dem gleichen schlüssel per collect zusammengefasst werden.

loop at itab into wa_itab.

select eaintam into corresponding fields of wa_itab from ehswat_entam for all entries in itab where docno = itab-docno.


collect wa_itab into itab_collect.

endselect.

endloop.

itab hat einen non-unique default key. Eigentlich müßte der key aber nur ein feld und zwar entnanr sein. habs bis jetzt aber nicht anders hinbekommen. Mein Problem ist das itab_collect nicht die richtigen werte hat. dort müßten ganz andere ergebnisse stehen. ich habs mit sum und ein bißchen anders gebaut schon hinbekommen. Aber mein Ausbilder will unbedingt das ich diesen collect befehl benutze. Kann mir einer einen Tip geben wäre echt dankbar :)

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


Beitrag von Codemaster ( / / 0 / 3 ) »
hi Spot,
ich hab mir mal dein coding angeschaut und werd irgendwie net ganz schlau draus...

wie wäre es denn mit folgendem:

Code: Alles auswählen.

SELECT * FROM ehswat_entam INTO TABLE wa_itab_taballe
         FOR ALL ENTRIES IN itab
             WHERE docno = itab-docno.

loop at wa_itab_taballe into wa_itab.
collect wa_itab into itab_collect.
endloop.
die itab_collect sollte die docno (vermute ich jetzt mal) als unique key haben.

quasi

Code: Alles auswählen.

Data: itab_collect TYPE TABLE OF ehswat_entam 
                                WITH UNIQUE KEY DOCNO.
gruß codemaster

Re: select all entries in itab

Beitrag von Frank Dittrich (Expert / 674 / 0 / 15 ) »
spot hat geschrieben:Mein Problem ist das itab_collect nicht die richtigen werte hat. dort müßten ganz andere ergebnisse stehen.
Wenn die Werte, die Du bekommen hast, ein ganzzahliges Vielfaches der erwarteten Werte waren, könne das daran gelegan haben, dass Du für jeden Eintrag in der itab einmal das SELECT ... FOR ALL ENTRIES IN itab ... ausgeführt hast.

Außerdem könnte noch das Beseitigen von Duplikaten bei SELECT ... FOR ALL ENTRIES IN itab ... zur Verfälschung der Ergebnisse führen.

Es hängt am all entries in

Beitrag von spot (ForumUser / 54 / 0 / 0 ) »
Hi,

@Codemaster: Hab dein coding mal ausprobiert. funzt nich. ich krieg einen laufzeitfehler. Und der meint das Feld wäre zu klein. Was aber nicht stimmen kann. Ich hab aber gestern noch ein bißchen debuggt. Und der fehler passiert beim Select. er findet für jeden eintrag genau 510 kg. Wenn ich in der Select Schleife mir ankucke was in itab geschrieben wird, für eantam, dann kommen immer die selben werte. Zuerst eine 20 dann eine 5,2 und dann stehen 510 drin und die bleiben. dazwischen ist auch mal eine null eingetragen. Keine ahnung ob das hilfreich war.

Re: Es hängt am all entries in

Beitrag von Frank Dittrich (Expert / 674 / 0 / 15 ) »
spot hat geschrieben:Hi,

@Codemaster: Hab dein coding mal ausprobiert. funzt nich. ich krieg einen laufzeitfehler. Und der meint das Feld wäre zu klein. Was aber nicht stimmen kann.
Ich bin mir sehr sicher, dass das System mit dem Laufzeitfehler recht hat.
Vielleicht solltest Du mal posten, wie wa_itab und itab_collect definiert sind.
Bestimmt tritt der Fehler beim COLLECT auf.
Hast Du mal geprüft, wie groß der Betrag in der wa ist, und wie groß der Betrag in der entsprechenden itab-Zeile schon ist?

Und wenn Du die Zeilenstruktur der itab nicht verändert hast, obwohl Du zuvor nur ein Feld aus ehswat_entam selektiert hat und jetzt mit SELECT * FROM ehswat_entam INTO TABLE ... alle Felder selektierst, müsstest Du sogar einen Syntaxfehler bekommen.
Ich hab aber gestern noch ein bißchen debuggt. Und der fehler passiert beim Select. er findet für jeden eintrag genau 510 kg.
Dass das SELECT in Deiner ersten Version jedes mal das gleiche Ergebnis ermittelt, ist doch klar (außer ein anderer Prozess ändert parallel zu Deinem die Daten in ehswat_entam), weil Du zwar innerhalb LOOP ... ENDLOOP selektierst, Dein SELECT aber völlig unabhängig von der gerade per LOOP prozessierten itab-Zeile ist.
Das habe ich doch auch schon mit meinem vorhergehenden Beitrag angedeutet.
Hast Du schon mal die Doku zu SELECT ... FOR ALL ENTRIES IN itab ... gelesen?
Wenn ja, was genau ist daran unklar?
Wenn ich in der Select Schleife mir ankucke was in itab geschrieben wird, für eantam, dann kommen immer die selben werte. Zuerst eine 20 dann eine 5,2 und dann stehen 510 drin und die bleiben.
Was heißt "die bleiben"?
Keine ahnung ob das hilfreich war.
Hilfreich wäre, wenn Du mal die Definition der itab und der wa posten könntest, die Doku zu SELECT ... FOR ALL ENTRIES liest und postest, was Dir an der Doku unklar ist.

Beitrag von spot (ForumUser / 54 / 0 / 0 ) »
types: begin of test,

entnanr type c, "Entsorgungsnachweisnr
eaintam type ehswat_entam-EAINTAM, "menge,
vbeln type VBAK-vbeln,
kdmat type VBAP-KDMAT,
docno type ehswat_entam-docno,
posnr type VBAP-posnr,

end of test,
itab_nachweis type table of test WITH NON-UNIQUE
Default KEY.

types: begin of table_EHSWAT_ENTAM,

entnanr type c, "Entsorgungsnachweisnr
eaintam type ehswat_entam-EAINTAM, "menge,
vbeln type VBAK-vbeln,
kdmat type VBAP-KDMAT,
docno type ehswat_entam-docno,
posnr type VBAP-posnr,

end of table_EHSWAT_ENTAM,
itab_collect type table of table_EHSWAT_ENTAM WITH NON-UNIQUE
Default KEY.

So das sind mal die Tables.

@Codemaster: Dein Code geht mit dem Select, habs einfach in ein falsches Feld geschrieben :). Aber wenn ich nachher die Tabelle ausgebe ist sie bis auf 2 einträge leer. In dem einen steht 20 kg drin und in dem anderen 0. Es sollte naber 11 Einträge sein.

Beitrag von Frank Dittrich (Expert / 674 / 0 / 15 ) »
spot hat geschrieben:

Code: Alles auswählen.

types: begin of test,
        entnanr type c, "Entsorgungsnachweisnr
        eaintam type ehswat_entam-EAINTAM, "menge,
Damit hat entnanr (implizit) die Länge 1. Reicht das?.
(Und ich finde es besser, die Nicht-"Schlüsselfelder" ans Ende des Zeilentyps zu stellen.
Mal ganz davon abgesehen, dass es meist Unsinn ist, Mengen zu addieren ohne die Mengeneinheiten zu beachten.)
@Codemaster: Dein Code geht mit dem Select, habs einfach in ein falsches Feld geschrieben :). Aber wenn ich nachher die Tabelle ausgebe ist sie bis auf 2 einträge leer. In dem einen steht 20 kg drin und in dem anderen 0. Es sollte naber 11 Einträge sein.
Daran, dass Duplikate aus der Ergebnismenge entfernt werden und von mehrfachen Einträgen mit gleicher Menge jeweils nur einer übrig bleibt, liegt es nicht?
Wie viele Einträge müssstest Du denn aus ehswat_entam lesen, und wie viele liefert das SELECT ... FOR ALL ENTRIES zurück?

bzgl mengen einfach addieren

Beitrag von spot (ForumUser / 54 / 0 / 0 ) »
ja ich weiß, aber ich soll davon ausgehen das immer kg entsorgt werden. sonst hätte ich das beachtet. Ich habs nochmal im Debugger gecheckt. Ich musste den select in all entries in eine andere Tabelle schreiben lassen als ich in der Bedingung angebe. jetzt sind auch alle passenden einträge da! OLE. hab nur noch ein kleines problem aber das hat nix mehr mit dem select zu tun.

Vielen dank für die nette hilfe.

Seite 1 von 1

Vergleichbare Themen

1
Antw.
2225
Views
Select mit all entries !!!!!
von Apabtalker » 01.04.2010 12:55 • Verfasst in ABAP® für Anfänger
1
Antw.
1819
Views
SELECT mit FOR ALL ENTRIES
von Marduk » 30.09.2005 12:55 • Verfasst in ABAP® Core
6
Antw.
3733
Views
Select for all entries Problem
von debianfan » 06.03.2018 18:39 • Verfasst in ABAP® für Anfänger
3
Antw.
2760
Views
Select Abfrage - For all Entries
von Cargo2 » 09.12.2016 10:56 • Verfasst in ABAP® Core
4
Antw.
6905
Views
Select for all entries in itab_suchwerte
von Anfänger » 12.07.2010 23:13 • 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.