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.