Code: Alles auswählen.
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.
SY-MANDT brauchst du eigentlich nie beim Select angeben, dies macht SAP automatisch, es gibt nur sehr wenige Sonderfälle, in denen der Mandant explizit angegeben werden muss.christof hat geschrieben:Ich bin über jede Rückmeldung dankbar.
Code: Alles auswählen.
SELECT * FROM MARC CLIENT SPECIFIED
WHERE MANDT = sy-mandt
AND MATNR = mara-matnr.
ENDSELECT.
Code: Alles auswählen.
SELECT * FROM MARD CLIENT SPECIFIED
WHERE MANDT = sy-mandt
AND MATNR = mara-matnr.
ENDSELECT.
Code: Alles auswählen.
SELECT * FROM MBEW CLIENT SPECIFIED
WHERE MANDT = sy-mandt
AND MATNR = mara-matnr.
ENDSELECT.
Code: Alles auswählen.
SELECT * FROM MAKT CLIENT SPECIFIED
WHERE MANDT = sy-mandt
AND MATNR = mara-matnr
AND SPRAS = Sprache.
ENDSELECT.
Code: Alles auswählen.
SELECT * FROM MVER CLIENT SPECIFIED
WHERE MANDT = sy-mandt
AND MATNR = makt-matnr
AND GJAHR in Gejahr.
ENDSELECT.
Code: Alles auswählen.
CLEAR Verbrauch. "für jedes Material den Verbrauch zurück setzten
SELECT * FROM MVER CLIENT SPECIFIED
WHERE MANDT = sy-mandt
AND MATNR = makt-matnr
AND GJAHR in Gejahr.
Verbrauch = 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.
ENDSELECT.
Code: Alles auswählen.
loop at IT_MARC into WA_MARC.
loop at IT_MARC into WA_MAKT.
loop at IT_MARC into WA_MARD.
loop at IT_MARC into WA_MVER.
Code: Alles auswählen.
REPORT ZR_ZAPROS
TABLES:
mara,
marc,
mver.
TYPES:
BEGIN OF ty_list,
matnr TYPE matnr,
werks TYPE werks_d,
matkl TYPE matkl_d,
ekgrp TYPE ekgrp,
dispo TYPE dispo,
beskz TYPE beskz,
sobsl TYPE sobsl,
vprsv TYPE vprsv,
ncost TYPE marc-ncost,
hrkft TYPE hrkft,
ekalr TYPE mbew-ekalr,
losgr TYPE losgr,
maktx TYPE maktx,
prdha TYPE mara-prdha,
lgpbe TYPE lgpbe,
stprs TYPE stprs,
gjahr TYPE gjahr,
spras TYPE spras,
verbrauch TYPE mver-gsv01,
preis TYPE mbew-stprs,
END OF ty_list,
BEGIN OF ty_bwkey,
bwkey TYPE bwkey,
werks TYPE werks_d,
bukrs TYPE bukrs,
END OF ty_bwkey.
DATA:
it_mara TYPE SORTED TABLE OF mara
WITH UNIQUE KEY matnr,
" da du nur eine Sprache selektierst, sparen wir uns das Keyfeld SPRAS
it_makt TYPE SORTED TABLE OF makt
WITH UNIQUE KEY matnr,
it_marc TYPE SORTED TABLE OF marc
WITH UNIQUE KEY matnr werks,
it_mard TYPE SORTED TABLE OF mard
WITH UNIQUE KEY matnr werks lgort,
it_mver TYPE SORTED TABLE OF mver
WITH UNIQUE KEY matnr werks gjahr perkz zahlr,
it_mbew TYPE SORTED TABLE OF mbew
WITH UNIQUE KEY matnr bwkey bwtar,
it_t001w TYPE SORTED TABLE OF t001w
WITH UNIQUE KEY werks,
bwkrs_cus TYPE tcurm-bwkrs_cus,
it_bwkey TYPE SORTED TABLE OF ty_bwkey
WITH UNIQUE KEY bwkey
WITH NON-UNIQUE SORTED KEY wrk COMPONENTS werks
WITH NON-UNIQUE SORTED KEY buk COMPONENTS bukrs,
it_list TYPE STANDARD TABLE OF ty_list.
FIELD-SYMBOLS:
<mara> TYPE mara,
<marc> TYPE marc,
<mard> TYPE mard,
<makt> TYPE makt,
<mver> TYPE mver,
<mbew> TYPE mbew,
<t001w> TYPE t001w,
<bwkey> TYPE ty_bwkey,
<list> TYPE ty_list.
*--------------------------------------------------------------------*
*Selektionsbild gesalten*
*--------------------------------------------------------------------*
SELECT-OPTIONS so_matnr FOR mara-matnr.
SELECT-OPTIONS so_gjahr FOR mver-gjahr.
SELECT-OPTIONS so_werks FOR marc-werks.
PARAMETERS pa_spras TYPE makt-spras OBLIGATORY.
" Das gehört HINTER das Selektionsbild:
" (Beginn der Selektion)
START-OF-SELECTION.
" Wir machen das jetzt mal richtig korrekt....:
"
" Bewertungsebene lesen (das schenken wir uns mal)
" bwkrs_cus = 1 -> ein Werk, so scheint das ja bei euch zu sein
" bwkrs_cus = 2 -> mehrere Werke
" bwkrs_cus = 3 -> bukrs
" SELECT SINGLE bwkrs_cus
" FROM tcurm INTO bwkrs_cus.
" für 1 und 2 würde man dann z. B. so lesen:
SELECT werks bwkey
FROM t001w INTO CORRESPONDING FIELDS OF TABLE it_bwkey.
" zwar scheint bei euch bwkrs_cust = 1 zu sein, ich würde mich
" aber NIE darauf verlassen, dass werks = bwkey!!!
SELECT matnr
matkl prdha
FROM mara INTO CORRESPONDING FIELDS OF TABLE it_mara
WHERE matnr IN so_matnr.
SELECT matnr spras
maktx
FROM makt INTO CORRESPONDING FIELDS OF TABLE it_makt
WHERE matnr IN so_matnr
AND spras EQ pa_spras.
SELECT matnr werks
ekgrp dispo beskz sobsl ncost losgr
FROM marc INTO CORRESPONDING FIELDS OF TABLE it_marc
WHERE matnr IN so_matnr
AND werks IN so_werks.
SELECT matnr werks lgort
lgpbe
FROM mard INTO CORRESPONDING FIELDS OF TABLE it_mard
WHERE matnr IN so_matnr
AND werks IN so_werks.
SELECT matnr werks gjahr perkz zahlr
FROM mver INTO CORRESPONDING FIELDS OF TABLE it_mver
WHERE matnr IN so_matnr
AND werks IN so_werks.
IF it_bwkey IS NOT INITIAL.
SELECT matnr bwkey bwtar
vprsv stprs hrkft ekalr
FROM mbew INTO TABLE it_mbew
FOR ALL ENTRIES IN it_bwkey
WHERE matnr IN so_matnr
AND bwkey EQ it_bwkey-bwkey.
ENDIF.
" Das gehört HINTER die Selektion:
END-OF-SELECTION.
*--------------------------------------------------------------------*
*Schleife über interne Tabelle*
*--------------------------------------------------------------------*
LOOP AT it_mara ASSIGNING <mara>.
" SPRAS wird per parameter selektiert, es gibt also nur einen,
" dann reicht ein
READ TABLE it_makt ASSIGNING <makt>
WITH KEY matnr = <marc>-matnr
spras = pa_spras.
LOOP AT it_marc ASSIGNING <marc>
WHERE matnr EQ <mara>-matnr.
LOOP AT it_mver ASSIGNING <mver>
WHERE matnr EQ <marc>-matnr
AND werks EQ <marc>-werks.
*----------------------------------------------------------------------*
*Verbräuche berechnen*
* --------------------------------------------------------------------*
<list>-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.
READ TABLE it_bwkey ASSIGNING <bwkey>
WITH TABLE KEY wrk COMPONENTS werks = <marc>-werks.
LOOP AT it_mbew ASSIGNING <mbew>
WHERE matnr EQ <marc>-matnr
AND bwkey EQ <bwkey>-bwkey.
LOOP AT it_mard ASSIGNING <mard>
WHERE matnr EQ <mard>-matnr.
*--------------------------------------------------------------------*
*Wenn-Funktion Standart-Gleitenderpreis*
*--------------------------------------------------------------------*
CASE <mbew>-vprsv.
WHEN 'S'.
<list>-preis = <mbew>-stprs.
WHEN 'V'.
<list>-preis = <mbew>-verpr.
WHEN OTHERS.
<list>-preis = '---'.
ENDCASE.
MOVE-CORRESPONDING:
<mara> TO <list>,
<makt> TO <list>,
<marc> TO <list>,
<mard> TO <list>,
<mbew> TO <list>,
<mver> TO <list>.
ENDLOOP.
ENDLOOP.
ENDLOOP.
ENDLOOP.
ENDLOOP.
*--------------------------------------------------------------------*
*Ausgabe*
*--------------------------------------------------------------------*
WRITE: / <list>-matnr,
25 <list>-maktx,
70 <list>-matkl,
76 <list>-prdha,
82 <list>-ekgrp,
86 <list>-dispo,
90 <list>-beskz,
92 <list>-sobsl,
96 <list>-lgpbe,
106 <list>-vprsv,
110 <list>-preis,
125 <list>-ncost,
142 <list>-hrkft,
148 <list>-ekalr,
150 <list>-losgr,
156 <list>-gjahr,
165 <list>-verbrauch.
Eiweh. Dann sollte es aber so funktionieren:christof hat geschrieben:Wir haben das Release 700
Code: Alles auswählen.
REPORT ZR_ZAPROS.
TABLES:
mara,
marc,
mver.
TYPES:
BEGIN OF ty_list,
matnr TYPE matnr,
werks TYPE werks_d,
matkl TYPE matkl_d,
ekgrp TYPE ekgrp,
dispo TYPE dispo,
beskz TYPE beskz,
sobsl TYPE sobsl,
vprsv TYPE vprsv,
ncost TYPE marc-ncost,
hrkft TYPE hrkft,
ekalr TYPE mbew-ekalr,
losgr TYPE losgr,
maktx TYPE maktx,
prdha TYPE mara-prdha,
lgpbe TYPE lgpbe,
stprs TYPE stprs,
gjahr TYPE gjahr,
spras TYPE spras,
verbrauch TYPE mver-gsv01,
preis TYPE mbew-stprs,
END OF ty_list,
BEGIN OF ty_bwkey,
bwkey TYPE bwkey,
werks TYPE werks_d,
bukrs TYPE bukrs,
END OF ty_bwkey.
DATA:
it_mara TYPE SORTED TABLE OF mara
WITH UNIQUE KEY matnr,
" da du nur eine Sprache selektierst, sparen wir uns das Keyfeld SPRAS
it_makt TYPE SORTED TABLE OF makt
WITH UNIQUE KEY matnr,
it_marc TYPE SORTED TABLE OF marc
WITH UNIQUE KEY matnr werks,
it_mard TYPE SORTED TABLE OF mard
WITH UNIQUE KEY matnr werks lgort,
it_mver TYPE SORTED TABLE OF mver
WITH UNIQUE KEY matnr werks gjahr perkz zahlr,
it_mbew TYPE SORTED TABLE OF mbew
WITH UNIQUE KEY matnr bwkey bwtar,
it_t001w TYPE SORTED TABLE OF t001w
WITH UNIQUE KEY werks,
bwkrs_cus TYPE tcurm-bwkrs_cus,
it_bwkey TYPE STANDARD TABLE OF ty_bwkey, " geändert
* WITH UNIQUE KEY bwkey
* WITH NON-UNIQUE SORTED KEY wrk COMPONENTS werks
* WITH NON-UNIQUE SORTED KEY buk COMPONENTS bukrs,
it_list TYPE STANDARD TABLE OF ty_list.
FIELD-SYMBOLS:
<mara> TYPE mara,
<marc> TYPE marc,
<mard> TYPE mard,
<makt> TYPE makt,
<mver> TYPE mver,
<mbew> TYPE mbew,
<t001w> TYPE t001w,
<bwkey> TYPE ty_bwkey,
<list> TYPE ty_list.
*--------------------------------------------------------------------*
*Selektionsbild gesalten*
*--------------------------------------------------------------------*
SELECT-OPTIONS so_matnr FOR mara-matnr.
SELECT-OPTIONS so_gjahr FOR mver-gjahr.
SELECT-OPTIONS so_werks FOR marc-werks.
PARAMETERS pa_spras TYPE makt-spras OBLIGATORY.
" Das gehört HINTER das Selektionsbild:
" (Beginn der Selektion)
START-OF-SELECTION.
" Wir machen das jetzt mal richtig korrekt....:
"
" Bewertungsebene lesen (das schenken wir uns mal)
" bwkrs_cus = 1 -> ein Werk, so scheint das ja bei euch zu sein
" bwkrs_cus = 2 -> mehrere Werke
" bwkrs_cus = 3 -> bukrs
" SELECT SINGLE bwkrs_cus
" FROM tcurm INTO bwkrs_cus.
" für 1 und 2 würde man dann z. B. so lesen:
SELECT werks bwkey
FROM t001w INTO CORRESPONDING FIELDS OF TABLE it_bwkey.
" zwar scheint bei euch bwkrs_cust = 1 zu sein, ich würde mich
" aber NIE darauf verlassen, dass werks = bwkey!!!
SELECT matnr
matkl prdha
FROM mara INTO CORRESPONDING FIELDS OF TABLE it_mara
WHERE matnr IN so_matnr.
SELECT matnr spras
maktx
FROM makt INTO CORRESPONDING FIELDS OF TABLE it_makt
WHERE matnr IN so_matnr
AND spras EQ pa_spras.
SELECT matnr werks
ekgrp dispo beskz sobsl ncost losgr
FROM marc INTO CORRESPONDING FIELDS OF TABLE it_marc
WHERE matnr IN so_matnr
AND werks IN so_werks.
SELECT matnr werks lgort
lgpbe
FROM mard INTO CORRESPONDING FIELDS OF TABLE it_mard
WHERE matnr IN so_matnr
AND werks IN so_werks.
SELECT matnr werks gjahr perkz zahlr
FROM mver INTO CORRESPONDING FIELDS OF TABLE it_mver
WHERE matnr IN so_matnr
AND werks IN so_werks.
IF it_bwkey IS NOT INITIAL.
SELECT matnr bwkey bwtar
vprsv stprs hrkft ekalr
FROM mbew INTO TABLE it_mbew
FOR ALL ENTRIES IN it_bwkey
WHERE matnr IN so_matnr
AND bwkey EQ it_bwkey-bwkey.
ENDIF.
" Das gehört HINTER die Selektion:
END-OF-SELECTION.
*--------------------------------------------------------------------*
*Schleife über interne Tabelle*
*--------------------------------------------------------------------*
LOOP AT it_mara ASSIGNING <mara>.
" SPRAS wird per parameter selektiert, es gibt also nur einen,
" dann reicht ein
READ TABLE it_makt ASSIGNING <makt>
WITH KEY matnr = <marc>-matnr
spras = pa_spras.
LOOP AT it_marc ASSIGNING <marc>
WHERE matnr EQ <mara>-matnr.
LOOP AT it_mver ASSIGNING <mver>
WHERE matnr EQ <marc>-matnr
AND werks EQ <marc>-werks.
*----------------------------------------------------------------------*
*Verbräuche berechnen*
* --------------------------------------------------------------------*
<list>-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.
SORT it_bwkey BY werks. " hinzugefügt
READ TABLE it_bwkey ASSIGNING <bwkey>
WITH KEY werks = <marc>-werks BINARY SEARCH. " geändert
LOOP AT it_mbew ASSIGNING <mbew>
WHERE matnr EQ <marc>-matnr
AND bwkey EQ <bwkey>-bwkey.
LOOP AT it_mard ASSIGNING <mard>
WHERE matnr EQ <mard>-matnr.
*--------------------------------------------------------------------*
*Wenn-Funktion Standart-Gleitenderpreis*
*--------------------------------------------------------------------*
CASE <mbew>-vprsv.
WHEN 'S'.
<list>-preis = <mbew>-stprs.
WHEN 'V'.
<list>-preis = <mbew>-verpr.
WHEN OTHERS.
<list>-preis = '---'.
ENDCASE.
MOVE-CORRESPONDING:
<mara> TO <list>,
<makt> TO <list>,
<marc> TO <list>,
<mard> TO <list>,
<mbew> TO <list>,
<mver> TO <list>.
ENDLOOP.
ENDLOOP.
ENDLOOP.
ENDLOOP.
ENDLOOP.
*--------------------------------------------------------------------*
*Ausgabe*
*--------------------------------------------------------------------*
WRITE: / <list>-matnr,
25 <list>-maktx,
70 <list>-matkl,
76 <list>-prdha,
82 <list>-ekgrp,
86 <list>-dispo,
90 <list>-beskz,
92 <list>-sobsl,
96 <list>-lgpbe,
106 <list>-vprsv,
110 <list>-preis,
125 <list>-ncost,
142 <list>-hrkft,
148 <list>-ekalr,
150 <list>-losgr,
156 <list>-gjahr,
165 <list>-verbrauch.
So ist das mit ungerüsteten Programmen, die man ohne System schreibt - der rote Zusatz fehlt, sry.christof hat geschrieben: IF it_bwkey IS NOT INITIAL.
SELECT matnr bwkey bwtar
vprsv stprs hrkft ekalr
FROM mbew INTO CORRESPONDING FIELDS OF TABLE it_mbew
FOR ALL ENTRIES IN it_bwkey
WHERE matnr IN so_matnr
AND bwkey EQ it_bwkey-bwkey.
ENDIF.