博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BAPI:BAPI_CONTRACT_CREATE(内部合同创建)
阅读量:2035 次
发布时间:2019-04-28

本文共 6109 字,大约阅读时间需要 20 分钟。

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

 

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 

 

转载地址:http://osqaf.baihongyu.com/

你可能感兴趣的文章
12.敏捷项目管理——治理敏捷项目笔记
查看>>
05.软件项目管理与敏捷方法——范围管理笔记
查看>>
00.敏捷回顾——引言笔记
查看>>
python学习手册笔记——20.迭代和解析
查看>>
python学习手册笔记——30.类的设计
查看>>
Big Analytice with Cassandra
查看>>
spring多个AOP执行先后顺序(面试问题:怎么控制多个aop的执行循序)
查看>>
leetcode 之 Single Number II
查看>>
关于AOP无法切入同类调用方法的问题
查看>>
Post with HttpClient4
查看>>
[LeetCode] 268. Missing Number ☆(丢失的数字)
查看>>
http1.0 1.1 2.0区别
查看>>
spring bean生命周期
查看>>
从线程模型的角度看Netty的高性能
查看>>
[LeetCode] 20. Valid Parentheses ☆(括号匹配问题)
查看>>
Mysql可重复读、避免幻读原理
查看>>
父类上的注解能被子类继承吗
查看>>
[LeetCode] 26. Remove Duplicates from Sorted Array ☆(从有序数组中删除重复项)
查看>>
二分变种
查看>>
[LeetCode] 80. Remove Duplicates from Sorted Array II ☆☆☆(从有序数组中删除重复项之二)...
查看>>