创建框架协议(价值合同)
事务代码:ME31K
显示合同:ME33K
查看行项目
-
- BP实现
*&---------------------------------------------------------------------*
*& Report YTEST004
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ytest004.
*--------------------------------------------------------------------*
* 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.
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 0 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.
DATA: gt_ht TYPE STANDARD TABLE OF zsmm04,
gs_ht TYPE zsmm04.
DATA: index TYPE ebelp.
DATA: l_werks TYPE werks_d.
DATA: l_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.