SAP Jobsuche bei DV-Treff
Timmy80
  • Timmy80
  • SAP Forum - Neuling Thema Starter
vor 13 Jahre

Hallo zusammen,

ich versuche meine bestehende  und funktionierende Abfrage aus Performance-Gründen zu optimieren.

Ziel ist es  aus der Einkaufssicht zu wissen,  wieviel Menge summiert im Verkauf gegen meinen Einkauf gelaufen ist. 
Ja es gibt viele Standard Reports die man "eingeschränkt" nutzen kann. In meinem Fall darf ich aber nur die eingestellten Aufträge und nicht die tatsächlichen Mengen die über Bestellung zurück gemeldet werden betrachten.

Aktuelles Infoset
EKKO --> EKPO und anschließend über Zusastzfelder die Summierung über eine Select Abfrage die wie folgt aussieht.

clear Zusatzfeld.

Select sum( Mengenfeld ) from VBAP into Zusatzfeld
where Einkaufsbeleg = EKPO-EBELN
and Einkaufsbelegposition = EKPO-EBELP
and Abgesagte Position not in (Abgesagte Belege nciht beachten).
Endselect.

Die Werte in der Abfrage sind richtig. Leider gibt es ein Problem. Die Abfrage geht über jeden Einkaufsbeleg und Position durch alle Vertriebsbeleg und das kostet Zeit.

Meine neue Idee ist nun folgende.
Kann man im Infoset eine temporäre Tabelle anlegen auf die man sich anschließend beziehen kann? (Ich habe kein Entwicklerschlüssel)
Select * from VBAP into (temporäre Tablle)
where VBAP-ERDAT >= sys-date - 10 (alle Belge bei dem das Erstellungsdatum größer Tagesdatum -10 ist).

Anschließend hätte ich bei der eigentlichen Query weniger Daten in meiner ALIAS Tabelle und die Abfrage wäre perfomanter.

Hat jemand eine Idee?

Ich habe im Infoset schon ein bisschen mit den freien Coding-Abschnitten ausprobiert kam bis jetzt aber auf kein positives Ergebnis. Ich habe bis jetzt nur immer Coding in Zusatztabellen und Zusatzfeldern eingearbeitet und kenne mich mit den verschiedene Codingabschnitten (START-SELECTION ) etc. nicht aus.

Gruß

Timmy

Förderer

wreichelt
vor 13 Jahre

Hallo Timmy,

eine Möglichkeit ist es die Daten aus der VBAP zum Zeitpunkt 'Initialization' für ein 'Lokales Feld'  (Reihenfolge des Codeabschnitts),

so  muss die VABP nur einmal gelsen werden und es kann eine interne Tabelle aufgebaut werden.

Gruß

Wolfgang

Timmy80
  • Timmy80
  • SAP Forum - Neuling Thema Starter
vor 13 Jahre

Hallo Wolfgang,

vielen Dank für deine Antwort aber ich stehe gerade ein bisschen auf dem Schlauch...

Habe folgendes im Codingabschnitt Initialization eingefügt.

DATA DATUM TYPE DATE.
DATA T_VBAP TYPE VBAP.

DATUM = sy-datum - 20.
Select * from VBAP into T_VBAP
WHERE ERDAT >= DATUM
AND ABGRU = ''
ENDSELECT.

Wenn ich mich anschließend über ein lokales Feld auf die Tabelle T_VBAP beziehe, erhalte ich die Meldung

"T_VBAP" ist im ABAP-Dictionary nicht als Tabelle, Projektions- oder Datenbank-View deklariert.

Gruß
Timmy

wreichelt
vor 13 Jahre

Hallo Timmy,

dann wird das so wohl nicht gehen, hast Du das direkt in der Query gemacht oder im Infoset?

 

Gruß

Wolfgang

Timmy80
  • Timmy80
  • SAP Forum - Neuling Thema Starter
vor 13 Jahre

Hi Wolfgang,

ich habe das direkt im Infoset festgelegt. Im Query wüsste ich überhaupt keine Funktion eine Inizialisierung vorab durchzuführen. Kenne dort nur lokale Felder die man mit Coding ausschmücken kann.

Gruß
Timmy

Timmy80
  • Timmy80
  • SAP Forum - Neuling Thema Starter
vor 13 Jahre

Hallo zusammen,

mit folgendem Coding werden interne Tabellen aufgebaut:

data: t_vbap like standard table of vbap.
data: datum type date.

datum = sy-datum - 20.

select * from vbap into t_vbap
where  erdat >= datum
and abgru = SPACE.
endselect.

Leider ist diese Art von internen Tabellenaufbau im Infoset nicht zulässig.

Hat vielleicht noch jemand anders eine Idee?

Viele Grüße
Timmy

Marco.K
vor 8 Jahre
Hallo,

ist ja schon etwas her - aber ich beschäftige mich auch gerade mit dem Thema "Query und interne Tabellen"

Ist dies möglich und kann ich Zusatzfelder aus der internen Tabelle füllen?

Danke und beste Grüße

Marco

daytona80
vor 8 Jahre
Hallo,

ja das geht. ich habe schon interne Tabellen im Infoset im Coding zum Zusatzfeld gefüllt und dann Werte aus diesen Tabellen ins Zusatzfeld rückgeschrieben:

DATA: LT_xxx Type of xxxx,

Select single * from xxx into ls_xxxx

Where...


Vielen Dank und viele Grüße
Marco.K
vor 8 Jahre
Hallo,

danke für die Antwort.

dann würde doch auch funktionieren, dass ich ein leeres Zusatzfeld erstelle und über das freie Coding fülle?

Wenn ich dies versuche, erhalte ich die Meldung:

Feld xx unbekannt. Es ist weder in einer der angegebenen Tabellen erhalten noch durch eine DATA Anweisung definiert.

Deklariere ich das Feld via DATA... erhalte ich die Meldung, dass es bereits deklariert ist - ich vermute weil es ja ein Zusatzfeld ist.

Wie kann ich vorgehen, dass die Zusatzfelder über das freie Coding zugänglich sind?

Danke und beste Grüße

Marco

daytona80
vor 8 Jahre
Hallo Marco,

ich komm grad nicht so ganz mit :-)

Also die Zusatzfelder sind immer sehr gut geeignet (dafür gemacht), um mit Hilfe von Coding Daten "irgendwo" herzuholen und dann in diesen Zusatzfeld auszugeben. Ein Zusatzfeld muss aber meines Wissens nach immer ein Wert übergeben werden, sonst macht es ja keinen Sinn ein zusätzliches Feld zu haben. Ich vermute das ist dann die Fehlermeldung in dienen Fall.

Das Zusatzfeld muss auch einen Datentyp haben (C, N etc) oder du beziehst es auf ein vorhandenes (like Referenz). Das hast du aber gemacht oder?

Wie sieht dein Coding aus? Von wo und was für Daten holst du per Coding in das Zusatzfeld und verarbeitest du diese ggf. weiter? Wie gesagt am Ende deines Codings muss du die Wertübergabe an das Zusatzfeld machen...


Vielen Dank und viele Grüße