Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

Select statement logic

Former Member
0 Likes
619

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.

4 REPLIES 4
Read only

Former Member
0 Likes
576

Kindly edit the code formatting to make it readable

Read only

0 Likes
576

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.

Read only

0 Likes
576
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

Read only

0 Likes
576

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.