SAP Jobsuche bei DV-Treff
Chrigu
  • Chrigu
  • SAP Forum - User Thema Starter
vor 10 Jahre
Hallo zusammen

Ich fange erst mit ABAP zu programmieren an, leider habe ich gewisse Schwierigkeiten mit einer einfachen Listenausgabe. Das Programm funktioniert zwar einwandfrei, aber die Struktur kann mit sicherheit verbessert werden. Da ich leider keine Möglichkeit habe um mein Programmm korrigieren zu lassen stelle ich es nun hier ins Forum. Ich bin über jede Rückmeldung dankbar.

Vielen Dank

Report ZR_ZAPROS.

Tables: mara,

marc,

mard,

mbew,

makt,

mver.

DATA: Preis(12),

Verbrauch(6).

SELECT-OPTIONS Material FOR mara-matnr.

SELECT-OPTIONS Gejahr FOR mver-gjahr.

PARAMETERS Sprache type makt-spras OBLIGATORY.

SELECT * FROM MARA CLIENT SPECIFIED

WHERE MANDT = sy-mandt

AND MATNR in Material.

SELECT * FROM MARC CLIENT SPECIFIED

WHERE MANDT = sy-mandt

AND MATNR = mara-matnr.

ENDSELECT.

SELECT * FROM MARD CLIENT SPECIFIED

WHERE MANDT = sy-mandt

AND MATNR = mara-matnr.

ENDSELECT.

SELECT * FROM MBEW CLIENT SPECIFIED

WHERE MANDT = sy-mandt

AND MATNR = mara-matnr.

ENDSELECT.

SELECT * FROM MAKT CLIENT SPECIFIED

WHERE MANDT = sy-mandt

AND MATNR = mara-matnr

AND SPRAS = Sprache.

ENDSELECT.

SELECT * FROM MVER CLIENT SPECIFIED

WHERE MANDT = sy-mandt

AND MATNR = makt-matnr

AND GJAHR in Gejahr.

ENDSELECT.

*--------------------------------------------------------------------*

*Wenn-Funktion Standart-Gleitenderpreis*

*--------------------------------------------------------------------*

CASE MBEW-VPRSV.

WHEN 'S'.

Preis = MBEW-STPRS.

WHEN 'V'.

Preis = MBEW-VERPR.

WHEN OTHERS.

Preis = '---'.

ENDCASE.

*Verbräuche berechnen*

Verbrauch =

MVER-GSV01 + MVER-GSV02 + MVER-GSV03 + MVER-GSV04 + MVER-GSV05 +

MVER-GSV06 + MVER-GSV07 + MVER-GSV08 + MVER-GSV09 + MVER-GSV10 +

MVER-GSV11 + MVER-GSV12 + MVER-GSV13.

*Ausgabe*

WRITE: / MARA-MATNR,

25 MAKT-MAKTX,

70 MARA-MATKL,

76 MARA-PRDHA,

82 MARC-EKGRP,

86 MARC-DISPO,

90 MARC-BESKZ,

92 MARC-SOBSL,

96 MARD-LGPBE,

106 MBEW-VPRSV,

110 Preis,

125 MARC-NCOST,

142 MBEW-HRKFT,

148 MBEW-EKALR,

150 MARC-LOSGR,

156 Gejahr,

165 Verbrauch.

ENDSELECT.

ahelm
vor 10 Jahre
Hallo Chrigu,

in deinem Code gibt es da einige Probleme...

1. In ABAP gibt es die sogenannten Programmereignisse, nach denen die Ausführung ausgelöst wird. In deinem Fall sollte das Hauptprogramm entweder im Ereignis START-OF-SELECTION oder END-OF-SELECTION passieren. Diese werden nach dem Selektionsschirm ausgelöst.

2. Der Mandant muss normalerweise nicht angegeben werden, den ergänzt ABAP automatisch. Dein MARA Zugriff wäre so schneller geschrieben:

SELECT * FROM MARA
WHERE MATNR in Material.

3. Die Datenbankzugriffe auf alle Tabellen außer der MARA berücksichtigen nicht den kompletten Schlüssel. Das heißt es werden für MARC, MARD, MBEW und MVER mittels SELECT-Schleife alle Einträge durchlaufen, nach dem Ende der Schleife steht der letzte Eintrag in der WorkArea. Wenn ihr zum Beispiel Materialien in mehreren Werken habt, werden die Werte des letzten Werks in der Ausgabe ausgegeben. Bei der MVER wird ohne Rücksicht auf das Werk gelesen und die letzte Periode im selektieren Geschäftsjahr abgerechnet.

4. MBEW-VPRSV kann nur S oder V sein, was anderes geht in SAP gar nicht, braucht also auch nicht berücksichtigt zu werden.

Ich würde empfehlen, zumindest noch eine Select-Option für das Werk dazuzugeben, dann können wenigstens MARC und MBEW sauber gelesen werden. Außerdem würde ich die benötigten Daten dazu in eine interne Tabelle einlesen und über diese lesen.

Im Pseudocode wäre das etwa so (kann auch Syntaxfehler enthalten, ist ohne Syntax-Check programmiert!):

report ZR_ZAPROS.

tables:
  MARA,
  MARC ...

types: begin of TY_MARC,
  MATNR type MATNR,
  WERKS type WERKS_D,
  MATKL type ...
  EKGRP type ...
  DISPO type ...
  BESKZ type ...
  SOBSL type ...
  VPRSV type ...
  NCOST type ...
  HRKFT type ...
  EKALR type ...
  LOSGR type ...
end of TY_MARC.

data:
  IT_MARC type standard table of TY_MARC,
  WA_MARC type TY_MARC.

SELECT-OPTIONS...
  ...
  WERKS for MARC~WERKS.


END-OF-SELECTION.
  select MARA~MATNR MARC~WERKS MARA~MATKL MARC~EKGRP ...
    from MARA
    join MARC on ( MARC~MATNR = MARA~MATNR )
    join MBEW on ( MBEW~MATNR = MARA~MATNR )
    into corresponding fields of IT_MARC
    where MARA~MATNR in MATERIAL
      and MARC~WERKS in WERKS
      and MBEW~BWKEY in WERKS.
* Schleife über interne Tabelle
  loop at IT_MARC into WA_MARC.
*   Weitere Zugriffe auf MARD, MAKT, MVER, ...
    ...
*   Ausgabe
    write: / WA_MARC-MATNR,
      25 MAKT-MAKTX,
      70 WA_MARC-MATKL,
      ...
  endloop.
Benutzer, die gerade dieses Thema lesen