본문 바로가기

SAP/MM

ABAP_ PO Condition Type Rate 대량 수정

반응형

PO 구매오더를 대량으로 수정해야할 경우 흔히들  LSMW,  MEMASSPO 를 통해 할 수 있다.

 

흔히들 수량 변경과 같은 일반적인 데이터를 변경하는 것은 위의 두 가지를 통해서 할 수 있다.

 

그러나 Condtion Type을 변경하는 것은 생각보다 쉽지 않았다. 

MEMASSPO에서는 해당하는 필드가 없었고, LSMW 에서 레코딩을 해서 하기에도 아무래도 오류가 발생할 일이 있을 것 같다.

 

하여 엑셀 업로드 방식으로 CBO로 간단히 개발했다.(BAPI활용)

 

그중 가장 필요한 BAPI부분에 대하여 남긴다.

 

BAPI_PO_CHANGE 펑션을 불러 사용할 때,

CONDITION 관련 테이블은 COND가 아닌 POCOND와 POCONDX를 사용해야 한다.

(X로 끝나는 테이블은 업데이트와 관련된 것)

 

    CALL FUNCTION 'BAPI_PO_CHANGE'
      EXPORTING
        PURCHASEORDER                LV_EBELN
      TABLES
        RETURN                       LT_RETURN
        POCOND                       LS_COND
        POCONDX                      LS_CONDX.

 

 

아래는 위 펑션을 포함한 LOOP문 전체

 

  LOOP AT GT_DATA INTO GS_LINE WHERE CHECK 'X'
                                 AND ICON  NE ICON_LED_GREEN.

    CLEAR   LT_RETURN , LS_COND LS_CONDX LV_EBELN LT_MSG.
    REFRESH LT_RETURN , LS_COND LS_CONDX LT_MSG .

    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        INPUT         GS_LINE-EBELN
      IMPORTING
        OUTPUT        LV_EBELN.

    LS_COND-ITM_NUMBER  GS_LINE-EBELP.
    LS_CONDX-ITM_NUMBER GS_LINE-EBELP.

    LS_COND-COND_TYPE   GS_LINE-KSCHL.
    LS_CONDX-COND_TYPE  GS_LINE-KSCHL.

    LS_COND-COND_VALUE   GS_LINE-KBETR.
    LS_CONDX-COND_VALUE  'X'.

    LS_COND-CHANGE_ID   'U'.
    LS_CONDX-CHANGE_ID  'X'.

    APPEND LS_COND.
    APPEND LS_CONDX.

    CALL FUNCTION 'BAPI_PO_CHANGE'
      EXPORTING
        PURCHASEORDER                LV_EBELN
      TABLES
        RETURN                       LT_RETURN
        POCOND                       LS_COND
        POCONDX                      LS_CONDX.

    READ TABLE LT_RETURN WITH KEY TYPE 'E'.
    IF SY-SUBRC EQ 0.
      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
      GS_LINE-ICON ICON_LED_RED.

    ELSE.
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
          WAIT 'X'.
      GS_LINE-ICON ICON_LED_GREEN.
    ENDIF.
    LOOP AT  LT_RETURN.
      CLEAR LS_MSG.
      LS_MSG-MSGTY LT_RETURN-TYPE.
      LS_MSG-MSGID LT_RETURN-ID.
      LS_MSG-MSGNO LT_RETURN-NUMBER.
      LS_MSG-MSGV1 LT_RETURN-MESSAGE_V1.
      LS_MSG-MSGV2 LT_RETURN-MESSAGE_V2.
      LS_MSG-MSGV3 LT_RETURN-MESSAGE_V3.
      LS_MSG-MSGV4 LT_RETURN-MESSAGE_V4.
      APPEND LS_MSG TO LT_MSG.
    ENDLOOP.
    GS_LINE-T_MSG LT_MSG.

    MODIFY GT_DATA FROM GS_LINE.
  ENDLOOP.

반응형