说明:创建,修改内部合同,表头有自定义增强字段。

 

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 

 

posted on 2010-04-23 15:37  zhumk  阅读(3547)  评论(0编辑  收藏  举报