‎2009 Sep 17 7:20 AM
Hello Experts,
I am working on PM Module. In this report I have order number where the fields KZEAR OR XLOEK from RESB Table if are X than my BAPI should be called.
For example I have order no in AUFK table = 50000805.
When I check this order no in RESB Table I have 4 components(MATNR) in this 2 components say RSPOS 1 and 2 has X in KZEAR and the rest 2 has space than my bapi should not be called.
Can anyone tell me logic for this.
My coding is:
START-OF-SELECTION.
SELECT
AUFNR
AUART
OBJNR
WERKS
AUTYP
INTO CORRESPONDING FIELDS OF TABLE ITAB
FROM AUFK WHERE AUFNR IN S_AUFNR
AND WERKS IN S_IWERK
AND AUART IN S_AUART
AND AUTYP = '30'.
LOOP AT ITAB.
SELECT SINGLE STAT FROM JEST
INTO CORRESPONDING FIELDS OF ITAB1
WHERE ( OBJNR = ITAB-OBJNR
AND STAT NE 'I0002'
AND INACT = 'X').
ITAB1-AUFNR = ITAB-AUFNR.
IF SY-SUBRC EQ 0.
SELECT SINGLE STAT FROM JEST
INTO CORRESPONDING FIELDS OF ITAB1
WHERE ( OBJNR = ITAB-OBJNR
AND STAT = 'I0002'
AND INACT = SPACE ).
IF SY-SUBRC EQ 0.
SELECT AUFNR RSNUM INTO CORRESPONDING FIELDS OF ITAB1
FROM AFKO WHERE AUFNR = ITAB1-AUFNR.
SELECT RSPOS MATNR KZEAR XLOEK "added by spel, 090915
INTO CORRESPONDING FIELDS OF ITAB1
FROM RESB WHERE RSNUM = ITAB1-RSNUM.
IF ITAB1-KZEAR = 'X' OR ITAB1-XLOEK = 'X'. "this is the condition
* ITAB-STAT = 'I0045'.
APPEND ITAB1.
ENDIF.
endselect.
endselect.
ENDIF.
* ENDSELECT.
ENDIF.
* ENDSELECT.
ENDLOOP.
IF ITAB1 IS INITIAL.
MESSAGE 'wrong order no!' type 'I'.
endif.
READ TABLE ITAB1 INDEX 1.
LOOP AT ITAB1.
REFRESH: T_METH.
CLEAR: T_METH.
CLEAR :WA_METH.
CLEAR :WA_METH.
WA_METH-REFNUMBER = SY-TABIX.
WA_METH-OBJECTTYPE = 'HEADER'.
WA_METH-METHOD = 'TECHNICALCOMPLETE'.
*wa_meth-objectkey(12) = ITAB-AUFNR.
WA_METH-OBJECTKEY(12) = ITAB1-AUFNR.
APPEND WA_METH TO T_METH.
CLEAR WA_METH.
WA_METH-REFNUMBER = SY-TABIX.
WA_METH-METHOD = 'SAVE'.
*wa_meth-objectkey(12) = ITAB-AUFNR.
WA_METH-OBJECTKEY(12) = ITAB1-AUFNR.
*wa_meth-objectkey(12) = ITAB-OBJNR.
APPEND WA_METH TO T_METH.
*ENDLOOP.
CALL FUNCTION 'BAPI_ALM_ORDER_MAINTAIN'
TABLES
IT_METHODS = T_METH
RETURN = T_RET.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
LOOP AT T_RET.
* ON CHANGE OF T_RET-MESSAGE.
WRITE:/ T_RET-MESSAGE.
* ENDON.
* EXIT.
ENDLOOP.
ENDLOOP.
Thanks and Regrds,
Nikhil.
‎2009 Sep 17 7:21 AM
‎2009 Sep 17 7:28 AM
Hi Vikranth I am trying,
START-OF-SELECTION.
SELECT
AUFNR
AUART
OBJNR
WERKS
AUTYP
INTO CORRESPONDING FIELDS OF TABLE ITAB
FROM AUFK WHERE AUFNR IN S_AUFNR
AND WERKS IN S_IWERK
AND AUART IN S_AUART
AND AUTYP = '30'.
LOOP AT ITAB.
SELECT SINGLE STAT FROM JEST
INTO CORRESPONDING FIELDS OF ITAB1
WHERE ( OBJNR = ITAB-OBJNR
AND STAT NE 'I0002'
AND INACT = 'X').
ITAB1-AUFNR = ITAB-AUFNR.
IF SY-SUBRC EQ 0.
SELECT SINGLE STAT FROM JEST
INTO CORRESPONDING FIELDS OF ITAB1
WHERE ( OBJNR = ITAB-OBJNR
AND STAT = 'I0002'
AND INACT = SPACE ).
IF SY-SUBRC EQ 0.
SELECT AUFNR RSNUM INTO CORRESPONDING FIELDS OF ITAB1
FROM AFKO WHERE AUFNR = ITAB1-AUFNR.
SELECT RSPOS MATNR KZEAR XLOEK
INTO CORRESPONDING FIELDS OF ITAB1
FROM RESB WHERE RSNUM = ITAB1-RSNUM.
‎2009 Sep 17 7:28 AM
IF ITAB1-KZEAR = 'X' OR ITAB1-XLOEK = 'X'.
* ITAB-STAT = 'I0045'.
APPEND ITAB1.
ENDIF.
endselect.
endselect.
ENDIF.
* ENDSELECT.
ENDIF.
* ENDSELECT.
ENDLOOP.
IF ITAB1 IS INITIAL.
MESSAGE 'wrong order no!' type 'I'.
endif.
READ TABLE ITAB1 INDEX 1.
LOOP AT ITAB1.
REFRESH: T_METH.
CLEAR: T_METH.
CLEAR :WA_METH.
CLEAR :WA_METH.
WA_METH-REFNUMBER = SY-TABIX.
WA_METH-OBJECTTYPE = 'HEADER'.
WA_METH-METHOD = 'TECHNICALCOMPLETE'.
*wa_meth-objectkey(12) = ITAB-AUFNR.
WA_METH-OBJECTKEY(12) = ITAB1-AUFNR.
APPEND WA_METH TO T_METH.
CLEAR WA_METH.
WA_METH-REFNUMBER = SY-TABIX.
WA_METH-METHOD = 'SAVE'.
*wa_meth-objectkey(12) = ITAB-AUFNR.
WA_METH-OBJECTKEY(12) = ITAB1-AUFNR.
*wa_meth-objectkey(12) = ITAB-OBJNR.
APPEND WA_METH TO T_METH.
*ENDLOOP.
CALL FUNCTION 'BAPI_ALM_ORDER_MAINTAIN'
TABLES
IT_METHODS = T_METH
RETURN = T_RET.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
LOOP AT T_RET.
WRITE:/ T_RET-MESSAGE.
ENDLOOP.Hello Experts, I am working on PM Module. In this report I have order number where the fields KZEAR OR XLOEK from RESB Table if are X than my BAPI should be called. For example I have order no in AUFK table = 50000805. When I check this order no in RESB Table I have 4 components(MATNR) in this 2 components say RSPOS 1 and 2 has X in KZEAR and the rest 2 has space than my bapi should not be called. Can anyone tell me logic for this.
Edited by: Nikhil Kanegaonkar on Sep 17, 2009 11:59 AM
‎2009 Sep 17 7:52 AM
Hi,
Call the BAPI inside the loop with required where condition.
LOOP AT ITAB1 where KZEAR = 'X' OR XLOEK = 'X'..
REFRESH: T_METH.
CLEAR: T_METH.
CLEAR :WA_METH.
CLEAR :WA_METH.
WA_METH-REFNUMBER = SY-TABIX.
WA_METH-OBJECTTYPE = 'HEADER'.
WA_METH-METHOD = 'TECHNICALCOMPLETE'.
*wa_meth-objectkey(12) = ITAB-AUFNR.
WA_METH-OBJECTKEY(12) = ITAB1-AUFNR.
APPEND WA_METH TO T_METH.
CLEAR WA_METH.
WA_METH-REFNUMBER = SY-TABIX.
WA_METH-METHOD = 'SAVE'.
*wa_meth-objectkey(12) = ITAB-AUFNR.
WA_METH-OBJECTKEY(12) = ITAB1-AUFNR.
*wa_meth-objectkey(12) = ITAB-OBJNR.
APPEND WA_METH TO T_METH.
CALL FUNCTION 'BAPI_ALM_ORDER_MAINTAIN'
TABLES
IT_METHODS = T_METH
RETURN = T_RET.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
endloop.