‎2009 Apr 20 8:59 AM
Hi Experts,
I am doing a report on material history and as per my requirement I need to display all the corresponding Po ( ebeln ) against the particular matnr.
But I am facing a problem in displaying matnr which do not have a single Po raised against it. I am pasting a pinch of my code please have look and advice me...
I want to display a matnr which have no ebeln ...but I am able to display all matnr which have its corresponding ebeln.
SELECT MARA~MATNR MARA~MTART MARD~WERKS MARD~LABST MARD~INSME MARD~SPEME FROM MARA INNER JOIN MARD ON MARA~MATNR EQ MARD~MATNR
INTO CORRESPONDING FIELDS OF TABLE IT_MARA
WHERE MARA~MATNR IN MATNR AND MARD~WERKS IN WERKS.
LOOP AT IT_MARA.
MOVE IT_MARA-MATNR TO IT_TAB-MATNR.
MOVE IT_MARA-WERKS TO IT_TAB-WERKS.
MOVE IT_MARA-LABST TO IT_TAB-LABST.
MOVE IT_MARA-INSME TO IT_TAB-INSME.
MOVE IT_MARA-SPEME TO IT_TAB-SPEME.
COLLECT IT_TAB.
ENDLOOP.
IF NOT IT_TAB IS INITIAL.
SELECT * FROM EKPO INTO CORRESPONDING FIELDS OF TABLE IT_EKPO
FOR ALL ENTRIES IN IT_TAB WHERE MATNR EQ IT_TAB-MATNR
AND WERKS EQ IT_TAB-WERKS AND PSTYP EQ '0' AND BSTYP EQ 'F'
AND ELIKZ EQ ' ' AND LOEKZ NE 'L'.
ENDIF.
LOOP AT IT_TAB.
MOVE-CORRESPONDING IT_TAB TO IT_FIRST.
LOOP AT IT_EKPO WHERE MATNR EQ IT_TAB-MATNR
AND WERKS EQ IT_TAB-WERKS.
MOVE IT_EKPO-EBELN TO IT_FIRST-EBELN.
MOVE IT_EKPO-EBELP TO IT_FIRST-EBELP.
APPEND IT_FIRST.
CLEAR: IT_FIRST-LABST,IT_FIRST-INSME,IT_FIRST-SPEME.
ENDLOOP.
ENDLOOP.Please advice
Karthik
‎2009 Apr 20 9:03 AM
Changes are below.
>
>
> LOOP AT IT_TAB. > MOVE-CORRESPONDING IT_TAB TO IT_FIRST. > LOOP AT IT_EKPO WHERE MATNR EQ IT_TAB-MATNR > AND WERKS EQ IT_TAB-WERKS. > MOVE IT_EKPO-EBELN TO IT_FIRST-EBELN. > MOVE IT_EKPO-EBELP TO IT_FIRST-EBELP. > APPEND IT_FIRST. > CLEAR: IT_FIRST-LABST,IT_FIRST-INSME,IT_FIRST-SPEME. > ENDLOOP. > ***IF SY-SUBRC NE 0. > This is where materials do not have a PO assigned > ***ENDIF > ENDLOOP.>
> Please advice
> Karthik
‎2009 Apr 20 9:03 AM
Changes are below.
>
>
> LOOP AT IT_TAB. > MOVE-CORRESPONDING IT_TAB TO IT_FIRST. > LOOP AT IT_EKPO WHERE MATNR EQ IT_TAB-MATNR > AND WERKS EQ IT_TAB-WERKS. > MOVE IT_EKPO-EBELN TO IT_FIRST-EBELN. > MOVE IT_EKPO-EBELP TO IT_FIRST-EBELP. > APPEND IT_FIRST. > CLEAR: IT_FIRST-LABST,IT_FIRST-INSME,IT_FIRST-SPEME. > ENDLOOP. > ***IF SY-SUBRC NE 0. > This is where materials do not have a PO assigned > ***ENDIF > ENDLOOP.>
> Please advice
> Karthik
‎2009 Apr 20 9:04 AM
Hi try this:
LOOP AT IT_TAB.
LOOP AT IT_EKPO WHERE MATNR EQ IT_TAB-MATNR
AND WERKS EQ IT_TAB-WERKS.
if sy-subrc eq 0.
continue.
else.
MOVE-CORRESPONDING IT_TAB TO IT_FIRST.
MOVE IT_EKPO-EBELN TO IT_FIRST-EBELN.
MOVE IT_EKPO-EBELP TO IT_FIRST-EBELP.
APPEND IT_FIRST.
endif.
CLEAR: IT_FIRST-LABST,IT_FIRST-INSME,IT_FIRST-SPEME.
ENDLOOP.
ENDLOOP.
‎2009 Apr 20 9:06 AM
Hi Karthick,
According to your statement, it will fetch the PO only for the Materials in the internal table IT_TAB.
IF NOT IT_TAB IS INITIAL.
SELECT * FROM EKPO INTO CORRESPONDING FIELDS OF TABLE IT_EKPO
FOR ALL ENTRIES IN IT_TAB WHERE MATNR EQ IT_TAB-MATNR
AND WERKS EQ IT_TAB-WERKS AND PSTYP EQ '0' AND BSTYP EQ 'F'
AND ELIKZ EQ ' ' AND LOEKZ NE 'L'.
ENDIF.
Remove, the code which is in BOLD....and check it.....
Thanks & Regards,
Vamsi