[SD] BAPI - SD_SALESDOCUMENT_CHANGE (판매오더 변경)

뇬두·2024년 9월 5일
0

SAP

목록 보기
2/3
DATA :   ls_return  TYPE          bapiret2,                    "BAPI RETURN값 W.A
         lt_return  TYPE TABLE OF bapiret2,                    "BAPI RETURN값 ITAB
         ls_header  TYPE          bapisdhd1,                   "판매오더 헤더 데이터 W.A
         ls_headerx TYPE          bapisdhd1x,                  "판매오더 헤더 변경 플래그 W.A
         lt_item    TYPE TABLE OF bapisditm WITH HEADER LINE,  "판매오더 아이템 데이터 ITAB
         lt_itemx   TYPE TABLE OF bapisditmx WITH HEADER LINE, "판매오더 아이템 변경 플래그 ITAB
         lt_sche    TYPE TABLE OF bapischdl  WITH HEADER LINE, "판매오더 스케줄(일정 라인) 데이터 ITAB
         lt_schex   TYPE TABLE OF bapischdlx WITH HEADER LINE, "판매오더 스케줄(일정 라인) 변경 플래그 ITAB
         ls_data    LIKE          gs_data,
         lt_data    LIKE TABLE OF gs_data,

         BEGIN OF ls_sched,                                    "납품 일정 라인 데이터 조회용 ITAB
           vbeln TYPE vbep-vbeln,
           posnr TYPE vbep-posnr,
           etenr TYPE vbep-etenr,
         END OF ls_sched,

         lt_sched LIKE TABLE OF ls_sched.

  CLEAR   : ls_headerx, ls_sched.
  REFRESH : lt_return, lt_item,    lt_itemx,
            lt_sche,  lt_schex,  lt_sched,   lt_data.

  LOOP AT lt_index INTO ls_index.

    READ TABLE gt_data INTO gs_data INDEX ls_index-index.

    IF sy-subrc NE 0.
      EXIT.

    ENDIF.

*-- 납품 요청일 변경 시
    IF gs_data-edit IS NOT INITIAL.
      "헤더 변경 데이터
      ls_header-req_date_h = gs_data-vdatu. "납품 요청일

      "헤더 변경 플래그
      ls_headerx-req_date_h = 'X'. "납품 요청일

    ENDIF.

    "헤더 변경 플래그
    ls_headerx-updateflag = 'U'. "갱신지시자

*-- 거부사유 있을 경우 - 취소
    IF gs_data-abgru IS NOT INITIAL.
      "아이템 변경 데이터
      lt_item-itm_number = gs_data-posnr. "품목
      lt_item-reason_rej = gs_data-abgru. "거부사유

      APPEND lt_item.

      "아이템 변경 플래그
      lt_itemx-itm_number = lt_item-itm_number. "품목
      lt_itemx-updateflag = 'U'.                "갱신지시자
      lt_itemx-reason_rej = 'X'.                "거부사유

      APPEND lt_itemx.

*-- 변경인 경우
    ELSE.
      "스케줄 변경 데이터
      READ TABLE lt_sched INTO ls_sched WITH KEY vbeln = gs_data-vbeln
                                                 posnr = gs_data-posnr.

      IF sy-subrc = 0.
        lt_sche-itm_number = gs_data-posnr.  "품목
        lt_sche-sched_line = '0001'.         "일정 라인
        lt_sche-req_qty    = gs_data-kwmeng. "수량

        APPEND lt_sche.

        "스케줄 변경 플래그
        lt_schex-itm_number = '01'.   "품목
        lt_schex-sched_line = '0001'. "일정 라인
        lt_schex-updateflag = 'U'.    "갱신지시자
        lt_schex-req_qty    = 'X'.    "수량

        APPEND lt_schex.

      ENDIF.

    ENDIF.

    CALL FUNCTION 'SD_SALESDOCUMENT_CHANGE'
  EXPORTING
   salesdocument                = gs_data-vbeln "판매 문서
     order_header_in            = ls_header     "헤더 변경 데이터
    order_header_inx            = ls_headerx    "헤더 변경 플래그
*     SIMULATION                  = ' '
*     INT_NUMBER_ASSIGNMENT       = ' '
*     BEHAVE_WHEN_ERROR           = ' '
*     BUSINESS_OBJECT             = ' '
*     CONVERT_PARVW_AUART         = ' '
*     CALL_FROM_BAPI              = ' '
*     LOGIC_SWITCH                =
*     I_CRM_LOCK_MODE             = ' '
*     NO_STATUS_BUF_INIT          = ' '
*   IMPORTING
*     SALES_HEADER_OUT            =
*     SALES_HEADER_STATUS         =
  TABLES
    return                       = lt_return
     item_in                     = lt_item  "아이템 변경 데이터
     item_inx                    = lt_itemx "아이템 변경 플래그
     schedule_in                 = lt_sche  "스케줄 변경 데이터
     schedule_inx                = lt_schex "스케줄 변경 플래그
*     PARTNERS                    =
*     PARTNERCHANGES              =
*     PARTNERADDRESSES            =
*     SALES_CFGS_REF              =
*     SALES_CFGS_INST             =
*     SALES_CFGS_PART_OF          =
*     SALES_CFGS_VALUE            =
*     SALES_CFGS_BLOB             =
*     SALES_CFGS_VK               =
*     SALES_CFGS_REFINST          =
*     SALES_CCARD                 =
*     SALES_TEXT                  =
*     SALES_KEYS                  =
*     conditions_in               =
*     conditions_inx              =
*     SALES_CONTRACT_IN           =
*     SALES_CONTRACT_INX          =
*     EXTENSIONIN                 =
*     ITEMS_EX                    =
*     SCHEDULE_EX                 =
*     BUSINESS_EX                 =
*     INCOMPLETE_LOG              =
*     EXTENSIONEX                 =
*     CONDITIONS_EX               =
*     SALES_SCHED_CONF_IN         =
*     DEL_SCHEDULE_EX             =
*     DEL_SCHEDULE_IN             =
*     DEL_SCHEDULE_INX            =
*     CORR_CUMQTY_IN              =
*     CORR_CUMQTY_INX             =
*     CORR_CUMQTY_EX              =
*     PARTNERS_EX                 =
*     TEXTHEADERS_EX              =
*     TEXTLINES_EX                =
*     BATCH_CHARC                 =
*     CAMPAIGN_ASGN               =
*     CONDITIONS_KONV_EX          =
.

    READ TABLE lt_return INTO ls_return WITH KEY type = 'E'.

    IF sy-subrc NE 0.
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
          wait = 'X'.

   		MESSAGE S000 WITH ls_return-message.

    ELSE.
      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.

      MESSAGE E000 with ls_return-message.

    ENDIF.

    CLEAR   : ls_header, ls_headerx, ls_sched.
    REFRESH : lt_item, lt_itemx, lt_sche, lt_schex.

  ENDLOOP.

0개의 댓글