Hallo,
mein Programm soll einen Nachweis der verschiedenen Lieferanten für Streckenaufträge erstellen. Ausgegeben werden soll die Sales Organization (, die immer gleich ist, da nur ein Land hierfür wichtig ist), das Land des Lieferanten und das Land des Kunden. Zusätzlich sollen jeweils Summenfelder gebildet werden, dass für jede Kombinationsmöglichkeit (Sales Org, Lief-Land, Ship-to Land) die Anzahl der gefunden Einträge ausgegeben wird.
Hab mit dem Quellcode bereits begonnen, funktioniert aber ncoh nicht richtig. Außerdem weiß ich nicht wo und wie die Summenbildungen eingefügt werden müssen.
data: begin of intab occurs 100,
vkorg like vbak-vkorg, "sales organization
vbeln like vbap-vbeln, "SD document number
pstyv like vbap-pstyv, "sales document item category
posnr like vbap-posnr, "sales document item
ettyp like vbep-ettyp, "schedule line category
banfn like vbep-banfn, "purchase requisition number
bnfpo like vbep-bnfpo, "item nr of purchase requisition
lifnr like eban-flief, "account nr of vendor or creditor
landl like lfa1-land1, "land of vendor
landv like vbpa-land1, "ship-to land
end of intab.
Hi,
ehrlich gesagt stehen mir bei dem Programmentwurf die Haare zu Berge. Das Programm wird Stunden laufen. Es werden alle Daten gelesen, obwohl man nur sehr wenige braucht. Select * sollte man nur in Sonderfällen verwenden.
Also als erstes alle Daten, und zwargenau die, die man braucht, in interne Tabellen legen und dann einen Loop über die vbap machen und dabei die restlichen Daten aus den internen Tabelle dazulesen. Die vbak z.b. braucht überhaupt nicht gelesen werden.
Wichtige Dinge fehlen, z.B. die Abprüfung der Absagegründe in der vbap sowie die anderen Positionstypen wie TASN, TAB, TABN. Das kannst Du so machen:
select vbeln posnr matnr arktx pstyv abgru erdat from vbap
into table ivbap
where erdat in erdat
and abgru = ' '
and pstyv in ('TAS ','TASN','TAB','TABN').
sort ivbap by vbeln posnr.
select vbeln posnr edatu bmeng banfn bnfpo from vbep
into table ivbep
for all entries in ivbap
where vbeln = ivbap-vbeln
and posnr = ivbap-posnr.
sort ivbak by vbeln.
.
.
.
loop at muevbap.
read table ivbak with key
vbeln = ivbap-vbeln binary search.
read table ivbep with key
vbeln = ivbap-vbeln
posnr = ivbap-posnr binary search.
.
.
.
Ist jetzt nur ein Beispiel wie man es machen könnte. Probier es einfach mal aus.
Für die Summen würde ich einfach Felder anlegen und darauf addieren.
Hi,
vielen Dank für die Antwort!Kann schon sein, dass mein Programm etwas umständlich ist, hab noch nicht so wirklich viel Programmierfahrung.
Durch die Eingrenzung der Selektionsmaske, dürfte die Abfrage auf die Tabellen, selbst bei select * doch gar nicht so lange dauern, oder?
Allerdings brauche ich einige Felder, die Du aufgelistet hast, gar nicht.
Mein Chef möchte "lediglich" eine Auflistung aller "TAS"-Aufträge (pstyv = "TAS")haben, nur derer, dessen Sales Organization England ist und die schedule line category = "ZS" und die partner function = "WE" ist. Rauskommen soll folgende Liste:
Hi,
Die Belegnummer kann in der Selektion eingeschränkt werden. Das wiederum ist zwar schön, aber gar nicht sinnvoll, denn wie soll was verglichen werden? Sinnvoll wäre z.B. von Datum bis Datum.
Die von mir gelisteten Programmteile waren nur Beispiele, denn ich habe ein änliches Programm vor einiger Zeit geschrieben. Die Felder sind natürlich die, die ich damals brauchte.
Ich kann nur empfehlen, nach dieser Methode zu arbeiten, denn das Programm wäre mindestens 10mal so schnell.
Ich würde den Chef auch mal fragen, ob die anderen Streckenpositionstypen nicht verwendet werden.
Hans