创建框架协议(价值合同)

事务代码:ME31K

 

 

 

 

 

 

 

显示合同:ME33K

 

 

查看行项目

 

    1. BP实现

 

*&---------------------------------------------------------------------*
*& Report YTEST004
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ytest004.




*--------------------------------------------------------------------*
*     Define BAPI parameters
*--------------------------------------------------------------------*
DATAl_flag TYPE c.
DATA:l_ebeln         TYPE bapimeoutheader-number,           "#EC NEEDED
     ls_ekko         TYPE ekko,

     extensionin     LIKE bapiparex
                    
OCCURS 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.




ls_header-number     '3190400007'.  "合同号
ls_header-vendor     'L1900001'.  "供应商
ls_header-doc_type   'WK'.  "协议类型
*ls_header-agreement  = '3190400007' . " 协议编号
ls_header-comp_code  '1000'.  "公司代码
ls_header-doc_date   sy-datum.  "协议日期
ls_header-vper_start sy-datum"协议起始日期
ls_header-vper_end   sy-datum + 10.  "协议截至日期
ls_header-purch_org  '8000'.  "采购组织
ls_header-pur_group  'E01'.  "采购组
ls_header-acum_value 100000"目标值
ls_header-currency   'USD'.  "货币
ls_header-langu      sy-langu.

ls_headerx-number     'X'.  "合同号
ls_headerx-vendor     'X'.  "供应商
ls_headerx-doc_type   'X'.  "协议类型
*ls_headerx-agreement  = 'X' ." 协议编号
ls_headerx-comp_code  'X'.  "公司代码
ls_headerx-doc_date   'X'.  "协议日期
ls_headerx-vper_start 'X'"协议起始日期
ls_headerx-vper_end   'X'.  "协议截至日期
ls_headerx-purch_org  'X'.  "采购组织
ls_headerx-pur_group  'X'.  "采购组
ls_headerx-acum_value 'X'.  "目标值
ls_headerx-currency   'X'.  "货币
ls_headerx-langu      'X'.

*--------------------------------------------------------------------*
*   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    '00010'.     "行号
ls_item-material   'M5100001'.       物料
*  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.    " ISO代码中的定单单位

ls_item-net_price  100.     净价
*  ls_item-price_unit = 'L'.      " 价格单位
ls_item-orderpr_un 'L'.       订单价格单位(采购)
ls_item-tax_code 'J0'.        税码
ls_item-orderpr_un_iso 'L'.   "订单价格单位(采购)
*  ls_item-acctasscat = 'U'.               "科目分配类别
*  ls_item-item_cat   = 0.                 "项目类别
APPEND ls_item TO lt_item.

ls_itemx-item_no     '00010'.  "行号
ls_itemx-item_nox    'X'.  "行号
ls_itemx-material     'X'.       物料
*  ls_itemx-short_text  = 'X'.  "端文本
*  ls_itemx-matl_group  = 'X'.  "物料组
*  ls_itemx-plant       = 'X'.  "工厂
*  ls_itemx-target_qty  = 'X'.  "目标数量
*  ls_itemx-po_unit     = 'X'.
*  ls_itemx-po_unit_iso = 'X'.

ls_itemx-net_price   'X'.  "净价
*  ls_itemx-price_unit  = 'X'.  "价格单位
ls_itemx-orderpr_un  'X'.
ls_itemx-tax_code 'X'.      税码
ls_itemx-orderpr_un_iso 'X'.
*  ls_itemx-acctasscat = 'X'.            "科目分配类别
*  ls_itemx-item_cat   = 'X'.              "项目类别

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'
    EXPORTING
      wait 'X'.
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.

 

 

FUNCTION zfmm04.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     VALUE(LT_HT) TYPE  ZTTMM04
*"  EXPORTING
*"     VALUE(LS_SIGN) TYPE  ZESIGN
*"     VALUE(LS_MESSAGE) TYPE  ZEMESSAGE
*"     VALUE(O_EBELN) TYPE  EBELN
*"----------------------------------------------------------------------
  DATA:l_ebeln         TYPE bapimeoutheader-number,         "#EC NEEDED
       gs_ekko         TYPE ekko,

       extensionin     LIKE bapiparex
                      
OCCURS WITH HEADER LINE,
       gt_extensionout TYPE bapiparex_t,
       gt_return       TYPE bapiret2_t,
       gs_return       TYPE bapiret2,

       gs_header       TYPE bapimeoutheader,
       gs_headerx      TYPE bapimeoutheaderx,

       gs_item         TYPE bapimeoutitem,
       gt_item         TYPE bapimeout_t_item,

       gs_itemx        TYPE bapimeoutitemx,
       gt_itemx        TYPE bapimeout_t_itemx.


  DATAgt_ht TYPE STANDARD TABLE OF zsmm04,
        gs_ht TYPE zsmm04.
  DATAindex    TYPE ebelp.
  DATAl_werks  TYPE werks_d.
  DATAl_bukrs TYPE bukrs.
  gt_ht lt_ht.



  READ TABLE gt_ht INTO gs_ht INDEX 1.
  IF sy-subrc 0.
    l_werks gs_ht-werks.
  ENDIF.

  SELECT
    SINGLE
    bukrs
    
INTO l_bukrs
    
FROM t001k JOIN t001w ON t001k~bwkey t001w~bwkey
      
WHERE t001w~werks l_werks.


  SORT gt_ht BY lifnr evrtn evart ekorg ekgrp kdatb .

  index 10.
  LOOP AT gt_ht INTO gs_ht.

    抬头数据
    gs_header-number     gs_ht-evrtn.  "合同号
    gs_header-vendor     gs_ht-lifnr.  "供应商
    gs_header-doc_type   gs_ht-evart.  "协议类型
    gs_header-comp_code  l_bukrs.      "公司代码
    gs_header-doc_date   gs_ht-kdatb.  "协议日期
    gs_header-vper_start gs_ht-kdatb.  "协议起始日期
    gs_header-vper_end   gs_ht-kdate.  "协议截至日期
    gs_header-purch_org  gs_ht-ekorg.  "采购组织
    gs_header-pur_group  gs_ht-ekgrp.  "采购组
    gs_header-acum_value gs_ht-ktwrt.  "目标值
    gs_header-currency   gs_ht-waers.  "货币
    gs_header-langu      sy-langu.

    gs_headerx-number     'X'.  "合同号
    gs_headerx-vendor     'X'.  "供应商
    gs_headerx-doc_type   'X'.  "协议类型
    gs_headerx-comp_code  'X'.  "公司代码
    gs_headerx-doc_date   'X'.  "协议日期
    gs_headerx-vper_start 'X'"协议起始日期
    gs_headerx-vper_end   'X'.  "协议截至日期
    gs_headerx-purch_org  'X'.  "采购组织
    gs_headerx-pur_group  'X'.  "采购组
    gs_headerx-acum_value 'X'.  "目标值
    gs_headerx-currency   'X'.  "货币
    gs_headerx-langu      'X'.

    行项目数据
    gs_item-item_no    index.                 "行号
    gs_item-material   gs_ht-matnr.           "物料
    gs_item-net_price  gs_ht-netpr.           净价
*    gs_item-TARGET_QTY = 10.                   " 目标数量
    gs_item-plant      gs_ht-werks.           工厂
*    gs_item-price_unit = 1.                    " 价格单位
    gs_item-orderpr_un gs_ht-bprme.           订单价格单位(采购)
    gs_item-tax_code gs_ht-mwskz.             税码
*    gs_item-orderpr_un_iso = 'L'.              "采购订单价格单位的 ISO 代码
    gs_item-acctasscat gs_ht-epstp.           "科目分配类别
    gs_item-item_cat   gs_ht-knttp.           "项目类别
    APPEND gs_item TO gt_item.

    gs_itemx-item_no        index.          "行号
    gs_itemx-item_nox       'X'.              "行号
    gs_itemx-material       'X'.              物料
    gs_itemx-net_price   'X'.                 "净价
*    gs_itemx-TARGET_QTY  = 'X'.                "目标数量
    gs_itemx-plant      gs_ht-werks.          工厂
*    gs_itemx-price_unit  = 'X'.                "价格单位
    gs_itemx-orderpr_un  'X'.                 "订单价格单位(采购)
    gs_itemx-tax_code 'X'.                    "税码
*    gs_itemx-orderpr_un_iso = 'X'.             "采购订单价格单位的 ISO 代码
    gs_itemx-acctasscat 'X'.                  "科目分配类别
    gs_itemx-item_cat   'X'.                  "项目类别
    APPEND gs_itemx TO gt_itemx.


    index index 10.
    AT END OF kdatb.
      CALL FUNCTION 'BAPI_CONTRACT_CREATE'
        EXPORTING
          header             gs_header
          headerx            
gs_headerx
*         TESTRUN            = PA_TEST
        IMPORTING
          purchasingdocument l_ebeln
        
TABLES
          return             gt_return
          item               
gt_item
          itemx              
gt_itemx
          extensionin        
extensionin.
      index 10.
    ENDAT.
    LOOP AT gt_return INTO gs_return WHERE type 'E' OR type 'A'.
      ls_sign 'E'.
    ENDLOOP.

    IF ls_sign <> 'E'.
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
          wait 'X'.
      ls_sign 'S'.
      ls_message '合同创建成功'.
      o_EBELN l_ebeln.
    ELSE.
      ls_sign 'E'.
      LOOP AT gt_return INTO gs_return WHERE type 'E' OR type 'A' .
        ls_message ls_message && gs_return-message.
      ENDLOOP.
    ENDIF.

    CLEAR gs_ht.
  ENDLOOP.

  CLEAR index.
  CLEAR ls_sign.




ENDFUNCTION.

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值