2013 Jan 09 4:36 AM
if not it_ekko[] is initial.
SELECT EBELN EBELP BEWTP MENGE BUDAT belnr FROM ekbe
INTO CORRESPONDING FIELDS OF TABLE IT_final for all entries in it_ekko WHERE BEWTP in ('E','Q') and ebeln = it_ekko-ebeln.
endif.
i have display only BEWTP = E should display the output.
if any records are available with BEWTP = Q should delete the internal table and not to display in output ?
Please Help me in Coding.
Moderator message: very basic, not enough research before posting -> un-marked as question.
Message was edited by: Thomas Zloch
if not it_ekko[] is initial.
SELECT EBELN EBELP BEWTP MENGE BUDAT belnr FROM ekbe
INTO CORRESPONDING FIELDS OF TABLE IT_final for all entries in it_ekko WHERE BEWTP in ('E','Q') and ebeln = it_ekko-ebeln.
endif.
i have display only BEWTP = E should display the output.
if any records are available with BEWTP = Q should delete the internal table and not to display in output ?
Please Help me in Coding.
Moderator message: very basic, not enough research before posting -> un-marked as question.
Message was edited by: Thomas Zloch
2013 Jan 09 5:56 AM
WHERE BEWTP in('E','Q') and ebeln = it_ekko-ebeln.
Change above code as per below code...
WHERE BEWTP eq 'E' and ebeln = it_ekko-ebeln.
2013 Jan 09 6:00 AM
I need to delete internal table records which are BEWTP = 'Q'
then i have to display on records which are BEWTP = 'E'.
2013 Jan 09 6:12 AM
2013 Jan 09 6:07 AM
2013 Jan 09 6:18 AM
Check the following code.
Please help me.
REPORT ZIR_TEST1.
*TYPES:BEGIN OF TY_LFA1,
* name1 TYPE LFA1-name1,
* END OF TY_LFA1.
TYPES:BEGIN OF TY_EKKO,
lifnr TYPE EKKO-lifnr,
ebeln type ekko-ebeln,
name1 type lfa1-name1,
END OF TY_EKKO.
TYPES: BEGIN OF TY_EKBE,
EBELN TYPE EKBE-EBELN,
EBELP TYPE EKBE-EBELP,
BEWTP TYPE EKBE-BEWTP,
MENGE TYPE EKBE-MENGE,
BUDAT TYPE EKBE-BUDAT,
END OF TY_EKBE.
TYPES:BEGIN OF TY_FINAL,
name1 TYPE LFA1-name1,
lifnr TYPE EKKO-lifnr,
EBELN TYPE EKBE-EBELN,
EBELP TYPE EKBE-EBELP,
belnr type ekbe-belnr,
BEWTP TYPE ekbe-BEWTP,
MENGE TYPE EKBE-MENGE,
BUDAT TYPE EKBE-BUDAT,
END OF TY_FINAL.
DATA:
IT_EKBE TYPE TABLE OF TY_EKBE, "#EC NEEDED
* IT_LFA1 TYPE TABLE OF TY_LFA1, "#EC NEEDED
IT_EKKO TYPE TABLE OF TY_EKKO,
wa_ekko type ty_ekko, "#EC NEEDED
IT_final TYPE TABLE OF TY_final,
WA_final TYPE TY_final.
*data : G_QUANTITY_TYPE(3).
*SELECT name1 FROM LFA1 INTO TABLE IT_LFA1.
*SELECT lifnr ebeln FROM EKKO INTO TABLE IT_EKKO.
*CONSTANTS : PO_NO type ekko-ebeln value '4500000388'.
parameters: PO_NO type ekko-ebeln.
select * from ekko into corresponding fields of table it_ekko where ebeln = po_no.
loop at it_ekko into wa_ekko.
select single name1 from lfa1 into wa_ekko-name1 where lifnr = wa_ekko-lifnr.
modify it_ekko from wa_ekko.
clear wa_ekko.
endloop.
if not it_ekko[] is initial.
SELECT EBELN EBELP BEWTP MENGE BUDAT belnr FROM ekbe INTO CORRESPONDING FIELDS OF TABLE IT_final for all entries in it_ekko WHERE BEWTP in ('E','Q') and ebeln = it_ekko-ebeln.
endif.
if sy-subrc eq 0.
sort it_final by ebeln.
endif.
delete it_final where BEWTP = 'Q'.
CLEAR IT_FINAL.
*LOOP AT it_final-bewtp INTO wa_final.
* IF it_final-bewtp Eq 'Q'.
* DELETE it_final INDEX sy-tabix.
* clear it_final.
* ENDIF.
*ENDLOOP.
CLEAR IT_FINAL.
loop at it_ekko into wa_ekko.
write : / wa_ekko-lifnr,
wa_ekko-name1.
endloop.
LOOP AT IT_final INTO WA_final.
WRITE: / WA_final-EBELN,
WA_final-EBELP,
WA_final-BEWTP,
* 41 WA_final-MENGE UNIT G_QUANTITY_TYPE,
WA_final-BUDAT,
wa_final-belnr.
ENDLOOP.
2013 Jan 09 6:29 AM
2013 Jan 09 6:37 AM
lifnr name ebeln ebelp bewtp budat belnr.
bewtp should be 'E' If PO have 'Q's that should be delete records
should have only on onput PO's which are having 'E'.
2013 Jan 09 6:57 AM
Now Check dis Code ......................
TYPES:BEGIN OF TY_EKKO,
LIFNR TYPE EKKO-LIFNR,
EBELN TYPE EKKO-EBELN,
NAME1 TYPE LFA1-NAME1,
END OF TY_EKKO.
TYPES: BEGIN OF TY_EKBE,
EBELN TYPE EKBE-EBELN,
EBELP TYPE EKBE-EBELP,
BEWTP TYPE EKBE-BEWTP,
MENGE TYPE EKBE-MENGE,
BUDAT TYPE EKBE-BUDAT,
END OF TY_EKBE.
TYPES:BEGIN OF TY_FINAL,
NAME1 TYPE LFA1-NAME1,
LIFNR TYPE EKKO-LIFNR,
EBELN TYPE EKBE-EBELN,
EBELP TYPE EKBE-EBELP,
BELNR TYPE EKBE-BELNR,
BEWTP TYPE EKBE-BEWTP,
MENGE TYPE EKBE-MENGE,
BUDAT TYPE EKBE-BUDAT,
END OF TY_FINAL.
DATA:
IT_EKBE TYPE TABLE OF TY_EKBE, "#EC NEEDED
* IT_LFA1 TYPE TABLE OF TY_LFA1, "#EC NEEDED
IT_EKKO TYPE TABLE OF TY_EKKO,
WA_EKKO TYPE TY_EKKO, "#EC NEEDED
IT_FINAL TYPE TABLE OF TY_FINAL,
WA_FINAL TYPE TY_FINAL.
PARAMETERS: PO_NO TYPE EKKO-EBELN.
SELECT * FROM EKKO INTO CORRESPONDING FIELDS OF TABLE IT_EKKO WHERE EBELN = PO_NO.
LOOP AT IT_EKKO INTO WA_EKKO.
SELECT SINGLE NAME1 FROM LFA1 INTO WA_EKKO-NAME1 WHERE LIFNR = WA_EKKO-LIFNR.
MODIFY IT_EKKO FROM WA_EKKO.
CLEAR WA_EKKO.
ENDLOOP.
IF NOT IT_EKKO[] IS INITIAL.
SELECT EBELN EBELP BEWTP MENGE BUDAT BELNR
FROM EKBE INTO CORRESPONDING FIELDS OF TABLE IT_FINAL
FOR ALL ENTRIES IN IT_EKKO WHERE BEWTP IN ('E','Q') AND EBELN = IT_EKKO-EBELN.
ENDIF.
IF SY-SUBRC EQ 0.
SORT IT_FINAL BY EBELN.
ENDIF.
DELETE IT_FINAL WHERE BEWTP = 'Q'.
CLEAR WA_FINAL.
LOOP AT IT_EKKO INTO WA_EKKO.
WRITE : / WA_EKKO-LIFNR,
WA_EKKO-NAME1.
ENDLOOP.
LOOP AT IT_FINAL INTO WA_FINAL.
WRITE: / WA_FINAL-EBELN,
WA_FINAL-EBELP,
WA_FINAL-BEWTP,
* 41 WA_final-MENGE UNIT G_QUANTITY_TYPE,
WA_FINAL-BUDAT,
WA_FINAL-BELNR.
ENDLOOP.
2013 Jan 09 7:08 AM
earlier also i had the same output.
The PO 4500000599 actually has bewtp = 'Q' but now on the o/p am getting following this.
210005 ASE GROUP
4500000599 00010 E 08.01.2013 5000000076
4500000599 00010 E 08.01.2013 5000000077
how can i have E on ouput for PO 4500000599.?
2013 Jan 09 7:20 AM
can you try with any PO which has bewtp = 'Q'..
u will get bewtp ='E' on onput records.
2013 Jan 09 7:37 AM
Yeah , my friend it working fine ....
if i Remove dis
DELETE IT_FINAL WHERE BEWTP = 'Q'
line from above Code i got below output........ mean all E and Q both display..
if i add DELETE IT_FINAL WHERE BEWTP = 'Q'. line in code i got below out put...
where "Q" Record is delete from ur Final output ...
2013 Jan 09 8:01 AM
Records for PO 4500000599 Observer here BEWTP = Q
This is the output which I got. See here BEWTP = E. ?
2013 Jan 09 8:21 AM
Check below Screen Shot ....
Using above code m getting below output as per ur requirement (i.e. No "Q" Record in Final Result)
Regard's
Smruti
2013 Jan 09 8:33 AM
With the following Code, i got the output as sent you earlier.
please check it once friend.
Report ZIR_TEST1.
TYPES:BEGIN OF TY_EKKO,
LIFNR TYPE EKKO-LIFNR,
EBELN TYPE EKKO-EBELN,
NAME1 TYPE LFA1-NAME1,
END OF TY_EKKO.
TYPES: BEGIN OF TY_EKBE,
EBELN TYPE EKBE-EBELN,
EBELP TYPE EKBE-EBELP,
BEWTP TYPE EKBE-BEWTP,
MENGE TYPE EKBE-MENGE,
BUDAT TYPE EKBE-BUDAT,
END OF TY_EKBE.
TYPES:BEGIN OF TY_FINAL,
NAME1 TYPE LFA1-NAME1,
LIFNR TYPE EKKO-LIFNR,
EBELN TYPE EKBE-EBELN,
EBELP TYPE EKBE-EBELP,
BELNR TYPE EKBE-BELNR,
BEWTP TYPE EKBE-BEWTP,
MENGE TYPE EKBE-MENGE,
BUDAT TYPE EKBE-BUDAT,
END OF TY_FINAL.
DATA: IT_EKBE TYPE TABLE OF TY_EKBE, "#EC NEEDED
* IT_LFA1 TYPE TABLE OF TY_LFA1, "#EC NEEDED
IT_EKKO TYPE TABLE OF TY_EKKO,
WA_EKKO TYPE TY_EKKO, "#EC NEEDED
IT_FINAL TYPE TABLE OF TY_FINAL,
WA_FINAL TYPE TY_FINAL.
PARAMETERS: PO_NO TYPE EKKO-EBELN.
SELECT * FROM EKKO INTO CORRESPONDING FIELDS OF TABLE IT_EKKO WHERE EBELN = PO_NO.
LOOP AT IT_EKKO INTO WA_EKKO.
SELECT SINGLE NAME1 FROM LFA1 INTO WA_EKKO-NAME1 WHERE LIFNR = WA_EKKO-LIFNR.
MODIFY IT_EKKO FROM WA_EKKO.
CLEAR WA_EKKO.
ENDLOOP.
IF NOT IT_EKKO[] IS INITIAL.
SELECT EBELN EBELP BEWTP MENGE BUDAT BELNR
FROM EKBE INTO CORRESPONDING FIELDS OF TABLE IT_FINAL
FOR ALL ENTRIES IN IT_EKKO WHERE BEWTP IN ('E','Q') AND EBELN = IT_EKKO-EBELN.
ENDIF.
IF SY-SUBRC EQ 0.
SORT IT_FINAL BY EBELN.
ENDIF.
DELETE IT_FINAL WHERE BEWTP = 'Q'.
CLEAR WA_FINAL.
LOOP AT IT_EKKO INTO WA_EKKO.
WRITE : / WA_EKKO-LIFNR,
WA_EKKO-NAME1.
ENDLOOP.
LOOP AT IT_FINAL INTO WA_FINAL.
WRITE: / WA_FINAL-EBELN,
WA_FINAL-EBELP,
WA_FINAL-BEWTP,
* 41 WA_final-MENGE UNIT G_QUANTITY_TYPE,
WA_FINAL-BUDAT,
WA_FINAL-BELNR.
ENDLOOP.
2013 Jan 09 8:44 AM
2013 Jan 09 9:00 AM
Thankyou somuch for you help.
will post again, once i get any issue..
2013 Jan 09 10:50 AM
If I correctly understand you, you want all 'E' records without 'Q' records (so GR and no GI)
Try with a subselect option like
SELECT * INTO TABLE it_ekbe FROM ekbe
WHERE bewtp = 'E'
AND NOT EXISTS
( SELECT * FROM ekbe AS invo
WHERE invo~ebeln EQ ekbe~ebeln
AND invo~ebelp EQ ekbe~ebelp
AND invo~bewtp = 'Q' ).
Regards,
Raymond
2013 Jan 09 11:05 AM
Not working well getting bugs can you resolve it please, have implemented which you gave me.
Report ZIR_TEST1.
TYPES:BEGIN OF TY_EKKO,
LIFNR TYPE EKKO-LIFNR,
EBELN TYPE EKKO-EBELN,
NAME1 TYPE LFA1-NAME1,
END OF TY_EKKO.
TYPES: BEGIN OF TY_EKBE,
EBELN TYPE EKBE-EBELN,
EBELP TYPE EKBE-EBELP,
BEWTP TYPE EKBE-BEWTP,
MENGE TYPE EKBE-MENGE,
BUDAT TYPE EKBE-BUDAT,
END OF TY_EKBE.
TYPES:BEGIN OF TY_FINAL,
NAME1 TYPE LFA1-NAME1,
LIFNR TYPE EKKO-LIFNR,
EBELN TYPE EKBE-EBELN,
EBELP TYPE EKBE-EBELP,
BELNR TYPE EKBE-BELNR,
BEWTP TYPE EKBE-BEWTP,
MENGE TYPE EKBE-MENGE,
BUDAT TYPE EKBE-BUDAT,
END OF TY_FINAL.
DATA: IT_EKBE TYPE TABLE OF TY_EKBE, "#EC NEEDED
* IT_LFA1 TYPE TABLE OF TY_LFA1, "#EC NEEDED
IT_EKKO TYPE TABLE OF TY_EKKO,
WA_EKKO TYPE TY_EKKO, "#EC NEEDED
IT_FINAL TYPE TABLE OF TY_FINAL,
WA_FINAL TYPE TY_FINAL.
PARAMETERS: PO_NO TYPE EKKO-EBELN.
SELECT * FROM EKKO INTO CORRESPONDING FIELDS OF TABLE IT_EKKO WHERE EBELN = PO_NO.
LOOP AT IT_EKKO INTO WA_EKKO.
SELECT SINGLE NAME1 FROM LFA1 INTO WA_EKKO-NAME1 WHERE LIFNR = WA_EKKO-LIFNR.
MODIFY IT_EKKO FROM WA_EKKO.
CLEAR WA_EKKO.
ENDLOOP.
IF NOT IT_EKKO[] IS INITIAL.
* SELECT EBELN EBELP BEWTP MENGE BUDAT BELNR
* FROM EKBE INTO CORRESPONDING FIELDS OF TABLE IT_FINAL
* FOR ALL ENTRIES IN IT_EKKO WHERE BEWTP IN ('E','Q') AND EBELN = IT_EKKO-EBELN.
SELECT * INTO TABLE it_ekbe FROM ekbe
WHERE bewtp = 'E'
AND NOT EXISTS
( SELECT * FROM ekbe AS invo
WHERE invo~ebeln EQ ekbe~ebeln
AND invo~ebelp EQ ekbe~ebelp
AND invo~bewtp = 'Q' )
ENDIF.
IF SY-SUBRC EQ 0.
SORT IT_FINAL BY EBELN.
ENDIF.
BREAK-POINT.
*DELETE IT_FINAL WHERE BEWTP = 'E' AND BEWTP = 'Q'.
CLEAR WA_FINAL.
LOOP AT IT_EKKO INTO WA_EKKO.
WRITE : / WA_EKKO-LIFNR,
WA_EKKO-NAME1.
ENDLOOP.
LOOP AT IT_FINAL INTO WA_FINAL.
WRITE: / WA_FINAL-EBELN,
WA_FINAL-EBELP,
WA_FINAL-BEWTP,
* 41 WA_final-MENGE UNIT G_QUANTITY_TYPE,
WA_FINAL-BUDAT,
WA_FINAL-BELNR.
ENDLOOP.
2013 Jan 09 11:06 AM
If PO have 10,20 as lineitems and BEWTP = 'E' Means which are already GR is done.
for the Same PO has 10 as lineitem and BEWTP = 'Q' Means Which are GR and IR also Done.
I need to populate the data Which are not Invoiced, means i need populate line item 20 ?
How to achieve it please help me with Coding.
2013 Jan 09 11:14 AM
Am getting Runtime Error with the following Code
Please help me to resolve.
Report ZIR_TEST1.
TYPES:BEGIN OF TY_EKKO,
LIFNR TYPE EKKO-LIFNR,
EBELN TYPE EKKO-EBELN,
NAME1 TYPE LFA1-NAME1,
END OF TY_EKKO.
TYPES: BEGIN OF TY_EKBE,
EBELN TYPE EKBE-EBELN,
EBELP TYPE EKBE-EBELP,
BEWTP TYPE EKBE-BEWTP,
MENGE TYPE EKBE-MENGE,
BUDAT TYPE EKBE-BUDAT,
END OF TY_EKBE.
TYPES:BEGIN OF TY_FINAL,
NAME1 TYPE LFA1-NAME1,
LIFNR TYPE EKKO-LIFNR,
EBELN TYPE EKBE-EBELN,
EBELP TYPE EKBE-EBELP,
BELNR TYPE EKBE-BELNR,
BEWTP TYPE EKBE-BEWTP,
MENGE TYPE EKBE-MENGE,
BUDAT TYPE EKBE-BUDAT,
END OF TY_FINAL.
DATA: IT_EKBE TYPE TABLE OF TY_EKBE, "#EC NEEDED
* IT_LFA1 TYPE TABLE OF TY_LFA1, "#EC NEEDED
IT_EKKO TYPE TABLE OF TY_EKKO,
WA_EKKO TYPE TY_EKKO, "#EC NEEDED
IT_FINAL TYPE TABLE OF TY_FINAL,
WA_FINAL TYPE TY_FINAL.
PARAMETERS: PO_NO TYPE EKKO-EBELN.
SELECT * FROM EKKO INTO CORRESPONDING FIELDS OF TABLE IT_EKKO WHERE EBELN = PO_NO.
LOOP AT IT_EKKO INTO WA_EKKO.
SELECT SINGLE NAME1 FROM LFA1 INTO WA_EKKO-NAME1 WHERE LIFNR = WA_EKKO-LIFNR.
MODIFY IT_EKKO FROM WA_EKKO.
CLEAR WA_EKKO.
ENDLOOP.
IF NOT IT_EKKO[] IS INITIAL.
SELECT EBELN EBELP BEWTP MENGE BUDAT BELNR INTO TABLE it_final FROM ekbe
WHERE bewtp = 'E'
AND NOT EXISTS
( SELECT * FROM ekbe AS invo
WHERE invo~ebeln EQ ekbe~ebeln
AND invo~ebelp EQ ekbe~ebelp
AND invo~bewtp = 'Q' ).
ENDIF.
IF SY-SUBRC EQ 0.
SORT IT_FINAL BY EBELN.
ENDIF.
BREAK-POINT.
*DELETE IT_FINAL WHERE BEWTP = 'E' AND BEWTP = 'Q'.
CLEAR WA_FINAL.
LOOP AT IT_EKKO INTO WA_EKKO.
WRITE : / WA_EKKO-LIFNR,
WA_EKKO-NAME1.
ENDLOOP.
LOOP AT IT_FINAL INTO WA_FINAL.
WRITE: / WA_FINAL-EBELN,
WA_FINAL-EBELP,
WA_FINAL-BEWTP,
* 41 WA_final-MENGE UNIT G_QUANTITY_TYPE,
WA_FINAL-BUDAT,
WA_FINAL-BELNR.
ENDLOOP.
2013 Jan 09 12:06 PM
There are just basic Abap programming problem remaining.
First reinsert your own code in the SELECT from EKBE like the FOR ALL ENTRIES clause and the target internal table...Then before writing the result, execute a merge of the two internal tables (from EKKO and EKBE) easiest way is SORT EKKO table and complete table from EKBE in a LOOP using some READ FROM TABLE BINARY SEARCH.
One question, you read EKKO with the whole key, that should give a single record, why an internal table, then replace the FOR ALL ENTRIES by a test on the purchase order number.
Regards,
Raymond
2013 Jan 09 12:12 PM
Hi Raymond,
Please Help me by providing the Code.
Looking forward for your updated Code.
2013 Jan 09 12:30 PM
for your question.
i need multiple records for testing purpose i used parameter.
please provide me updated code.
2013 Jan 09 12:47 PM
Read the Rules of Engagement. Try first to code it yourself, as spec dumping, spoon feeding and asking for mail sending are against the rule of this forum. Try to solve it yourself and only if a point of code cause problem that you are unable to solve. Here just read online documentation on SORT, LOOP AT and READ TABLE, that should allow you to code it, you could also execute a fast search at scn on keywords "merge table" to find many code samples.
Regards,
Raymond