说明:创建,修改内部合同,表头有自定义增强字段。
FORM FRM_PROCESS_SAVE_DATA .
*--------------------------------------------------------------------*
* Define BAPI parameters
*--------------------------------------------------------------------*
DATA: L_FLAG TYPE C.
DATA:L_EBELN TYPE BAPIMEOUTHEADER-NUMBER, "#EC NEEDED
LS_EKKO TYPE EKKO,
EXTENSIONIN LIKE BAPIPAREX
OCCURS 0 WITH HEADER LINE,
LT_EXTENSIONOUT TYPE BAPIPAREX_T,
LT_RETURN TYPE BAPIRET2_T,
LS_RETURN TYPE BAPIRET2,
LS_HEADER TYPE BAPIMEOUTHEADER,
LS_HEADERX TYPE BAPIMEOUTHEADERX,
LS_ITEM TYPE BAPIMEOUTITEM,
LT_ITEM TYPE BAPIMEOUT_T_ITEM,
LS_ITEMX TYPE BAPIMEOUTITEMX,
LT_ITEMX TYPE BAPIMEOUT_T_ITEMX.
*--------------------------------------------------------------------*
* Header赋值
*--------------------------------------------------------------------*
CLEAR: LS_HEADER,LS_HEADERX,L_FLAG.
REFRESH: LT_RETURN, LT_ITEM, LT_ITEMX.
READ TABLE GT_OUT INTO GWA_OUT INDEX 1.
IF GWA_OUT-EBELN IS NOT INITIAL.
G_ACTION = CNS_MODIFY.
ELSE.
G_ACTION = CNS_CREATE.
ENDIF.
LS_HEADER-NUMBER = GWA_OUT-EBELN. "合同号
LS_HEADER-VENDOR = GWA_OUT-LIFNR. "供应商
LS_HEADER-DOC_TYPE = GWA_OUT-BSART. "协议类型
LS_HEADER-COMP_CODE = GWA_OUT-BUKRS. "公司代码
LS_HEADER-DOC_DATE = GWA_OUT-BEDAT. "协议日期
LS_HEADER-VPER_START = GWA_OUT-KDATB. "协议起始日期
LS_HEADER-VPER_END = GWA_OUT-KDATE. "协议截至日期
LS_HEADER-PURCH_ORG = GWA_OUT-EKORG. "采购组织
LS_HEADER-PUR_GROUP = GWA_OUT-EKGRP. "采购组
LS_HEADER-ACUM_VALUE = GWA_OUT-KTWRT. "目标值
LS_HEADER-CURRENCY = GWA_OUT-WAERS. "货币
LS_HEADER-LANGU = SY-LANGU.
LS_HEADERX-NUMBER = CNS_YES. "合同号
LS_HEADERX-VENDOR = CNS_YES. "供应商
LS_HEADERX-DOC_TYPE = CNS_YES. "协议类型
LS_HEADERX-COMP_CODE = CNS_YES. "公司代码
LS_HEADERX-DOC_DATE = CNS_YES. "协议日期
LS_HEADERX-VPER_START = CNS_YES. "协议起始日期
LS_HEADERX-VPER_END = CNS_YES. "协议截至日期
LS_HEADERX-PURCH_ORG = CNS_YES. "采购组织
LS_HEADERX-PUR_GROUP = CNS_YES. "采购组
LS_HEADERX-ACUM_VALUE = CNS_YES. "目标值
LS_HEADERX-CURRENCY = CNS_YES. "货币
LS_HEADERX-LANGU = CNS_YES.
*--------------------------------------------------------------------*
* Header 自定义字段赋值
*--------------------------------------------------------------------*
DATA: LS_BAPI_TE_MEOUTHEADERX LIKE BAPI_TE_MEOUTHEADERX,
LS_BAPI_TE_MEOUTHEADER LIKE BAPI_TE_MEOUTHEADER.
CLEAR EXTENSIONIN.
LS_BAPI_TE_MEOUTHEADER-NUMBER = GWA_OUT-EBELN.
LS_BAPI_TE_MEOUTHEADER-ZHTNUM = GWA_OUT-ZHTNUM. "外部合同号
LS_BAPI_TE_MEOUTHEADER-ZLOTNO = GWA_OUT-ZLOTNO. "LOT包号
LS_BAPI_TE_MEOUTHEADER-ZCGBLX = GWA_OUT-ZCGBLX. "采购包类型
LS_BAPI_TE_MEOUTHEADER-ZHTBZ = GWA_OUT-ZHTBZ. "采购立项号
LS_BAPI_TE_MEOUTHEADER-ZCGNUM = GWA_OUT-ZCGNUM. "采购任务
EXTENSIONIN-STRUCTURE = 'BAPI_TE_MEOUTHEADER'.
CALL METHOD CL_ABAP_CONTAINER_UTILITIES=>FILL_CONTAINER_C
EXPORTING
IM_VALUE = LS_BAPI_TE_MEOUTHEADER
IMPORTING
EX_CONTAINER = EXTENSIONIN-VALUEPART1
EXCEPTIONS
ILLEGAL_PARAMETER_TYPE = 1
OTHERS = 2.
APPEND EXTENSIONIN.
CLEAR EXTENSIONIN.
LS_BAPI_TE_MEOUTHEADERX-NUMBER = GWA_OUT-EBELN.
LS_BAPI_TE_MEOUTHEADERX-ZHTNUM = CNS_YES. "外部合同号
LS_BAPI_TE_MEOUTHEADERX-ZLOTNO = CNS_YES. "LOT包号
LS_BAPI_TE_MEOUTHEADERX-ZCGBLX = CNS_YES. "采购包类型
LS_BAPI_TE_MEOUTHEADERX-ZHTBZ = CNS_YES. "采购立项号
LS_BAPI_TE_MEOUTHEADERX-ZCGNUM = CNS_YES. "采购任务
EXTENSIONIN-STRUCTURE = 'BAPI_TE_MEOUTHEADERX'.
CALL METHOD CL_ABAP_CONTAINER_UTILITIES=>FILL_CONTAINER_C
EXPORTING
IM_VALUE = LS_BAPI_TE_MEOUTHEADERX
IMPORTING
EX_CONTAINER = EXTENSIONIN-VALUEPART1
EXCEPTIONS
ILLEGAL_PARAMETER_TYPE = 1
OTHERS = 2.
* EXTENSIONIN-VALUEPART1 = LS_BAPI_TE_MEOUTHEADERX.
APPEND EXTENSIONIN.
*--------------------------------------------------------------------*
* Item赋值
*--------------------------------------------------------------------*
CLEAR: LS_ITEM,LS_ITEMX,LT_ITEM[],LT_ITEMX[].
LOOP AT GT_OUT INTO GWA_OUT.
CLEAR: LS_ITEM, LS_ITEMX.
LS_ITEM-ITEM_NO = GWA_OUT-EBELP. "行号
LS_ITEM-SHORT_TEXT = GWA_OUT-TXZ01. "端文本
LS_ITEM-MATL_GROUP = GWA_OUT-MATKL. "物料组
LS_ITEM-PLANT = GWA_OUT-WERKS. "工厂
LS_ITEM-TARGET_QTY = GWA_OUT-KTMNG. "目标数量
LS_ITEM-PO_UNIT = GWA_OUT-MEINS.
LS_ITEM-PO_UNIT_ISO = GWA_OUT-MEINS.
LS_ITEM-NET_PRICE = GWA_OUT-NETPR. "净价
LS_ITEM-PRICE_UNIT = GWA_OUT-PEINH. "价格单位
LS_ITEM-ORDERPR_UN = GWA_OUT-MEINS. "订单价格单位(采购)
LS_ITEM-ORDERPR_UN_ISO = GWA_OUT-MEINS. "订单价格单位(采购)
LS_ITEM-ACCTASSCAT = 'U'. "科目分配类别
LS_ITEM-ITEM_CAT = 0. "项目类别
APPEND LS_ITEM TO LT_ITEM.
LS_ITEMX-ITEM_NO = GWA_OUT-EBELP. "行号
LS_ITEMX-ITEM_NOX = CNS_YES. "行号
LS_ITEMX-SHORT_TEXT = CNS_YES. "端文本
LS_ITEMX-MATL_GROUP = CNS_YES. "物料组
LS_ITEMX-PLANT = CNS_YES. "工厂
LS_ITEMX-TARGET_QTY = CNS_YES. "目标数量
LS_ITEMX-PO_UNIT = CNS_YES.
LS_ITEMX-PO_UNIT_ISO = CNS_YES.
LS_ITEMX-NET_PRICE = CNS_YES. "净价
LS_ITEMX-PRICE_UNIT = CNS_YES. "价格单位
LS_ITEMX-ORDERPR_UN = CNS_YES.
LS_ITEMX-ORDERPR_UN_ISO = CNS_YES.
LS_ITEMX-ACCTASSCAT = CNS_YES. "科目分配类别
LS_ITEMX-ITEM_CAT = CNS_YES. "项目类别
APPEND LS_ITEMX TO LT_ITEMX.
ENDLOOP.
*--------------------------------------------------------------------*
* Create contract
*--------------------------------------------------------------------*
IF G_ACTION = CNS_CREATE.
"无合同号,新建
CALL FUNCTION 'BAPI_CONTRACT_CREATE'
EXPORTING
HEADER = LS_HEADER
HEADERX = LS_HEADERX
* TESTRUN = PA_TEST
IMPORTING
PURCHASINGDOCUMENT = L_EBELN
TABLES
RETURN = LT_RETURN
ITEM = LT_ITEM
ITEMX = LT_ITEMX
EXTENSIONIN = EXTENSIONIN.
ELSE.
" 有合同号,修改
L_EBELN = LS_HEADER-NUMBER.
CALL FUNCTION 'BAPI_CONTRACT_CHANGE'
EXPORTING
PURCHASINGDOCUMENT = L_EBELN
HEADER = LS_HEADER
HEADERX = LS_HEADERX
* TESTRUN = PA_TEST
IMPORTING
EXP_HEADER = LS_HEADER
TABLES
RETURN = LT_RETURN
ITEM = LT_ITEM
ITEMX = LT_ITEMX
EXTENSIONIN = EXTENSIONIN.
ENDIF.
L_FLAG = 'S'.
LOOP AT LT_RETURN INTO LS_RETURN WHERE TYPE = 'E' OR TYPE = 'A'.
L_FLAG = 'E'.
EXIT.
ENDLOOP.
IF L_FLAG EQ 'S'.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ENDIF.
IF L_FLAG EQ 'S'.
IF G_ACTION EQ CNS_CREATE.
MESSAGE S836 WITH L_EBELN.
ELSE.
MESSAGE S837 WITH L_EBELN.
ENDIF.
ELSE.
IF G_ACTION EQ CNS_CREATE.
MESSAGE S838 WITH L_EBELN.
ELSE.
MESSAGE S839 WITH L_EBELN.
ENDIF.
ENDIF.
IF NOT LT_RETURN IS INITIAL.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_STRUCTURE_NAME = 'BAPIRET2'
TABLES
T_OUTTAB = LT_RETURN
EXCEPTIONS
OTHERS = 0.
ENDIF.
ENDFORM. " FRM_PROCESS_SAVE_DATA