*&---------------------------------------------------------------------*
*& Report ZWTEST
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT zwtest.
************************************************************************
* 服务行 ESLL ESLH *
* 科目分配 EBKN *
* 服务行与科目分配对应关系 ESKL *
************************************************************************
DATA: header TYPE bapimereqheader,
headerx TYPE bapimereqheaderx,
item LIKE TABLE OF bapimereqitemimp WITH HEADER LINE,
itemx LIKE TABLE OF bapimereqitemx WITH HEADER LINE,
account LIKE TABLE OF bapimereqaccount WITH HEADER LINE,
accountx LIKE TABLE OF bapimereqaccountx WITH HEADER LINE,
service LIKE TABLE OF bapi_srv_service_line WITH HEADER LINE,
servicex LIKE TABLE OF bapi_srv_service_linex WITH HEADER LINE,
serviceaccount LIKE TABLE OF bapi_srv_acc_data WITH HEADER LINE,
serviceaccountx LIKE TABLE OF bapi_srv_acc_datax WITH HEADER LINE,
preq_no LIKE bapimereqheader-preq_no,
lt_return LIKE TABLE OF bapiret2 WITH HEADER LINE,
wa_return LIKE bapiret2.
header-pr_type = 'NB'."订单类型(采购)
headerx-pr_type = 'X'.
CLEAR: item.
item-preq_item = '00010'.
item-pur_group = '011'."采购组
item-short_text = '服务类PR'."短文本
item-plant = '3000'."工厂
item-matl_group = '007'."物料组
item-item_cat = 'D'."项目类别
item-acctasscat = 'K'."科目分配类别
item-pckg_no = '0000000001'."软件包编号
*item-distrib = '2'."复式记帐的分配标识 1:按数量分配;2:按百分比分配;3:按金额分配
*item-part_inv = '1'."部分发票标识 1 依次对GR数分配IR数 2 按比例对GR数分配IR数
APPEND item.
CLEAR: itemx.
itemx-preq_item = '00010'.
itemx-preq_itemx = 'X'.
itemx-pur_group = 'X'."采购组
itemx-short_text = 'X'."短文本
itemx-plant = 'X'."工厂
itemx-matl_group = 'X'."物料组
itemx-item_cat = 'X'."项目类别
itemx-acctasscat = 'X'."科目分配类别
itemx-pckg_no = 'X'."软件包编号
*itemx-distrib = 'X'."复式记帐的分配标识
*itemx-part_inv = 'X'."部分发票标识
APPEND itemx.
************************************
"科目分配行 01
CLEAR: account.
account-preq_item = '00010'.
account-serial_no = '01'.
account-gl_account = '0000417000'.
account-costcenter = '0000006320'.
APPEND account.
CLEAR: accountx.
accountx-preq_item = '00010'.
accountx-serial_no = '01'.
accountx-preq_itemx = 'X'.
accountx-serial_nox = 'X'.
accountx-gl_account = 'X'.
accountx-costcenter = 'X'.
APPEND accountx.
"科目分配行02
CLEAR: account.
account-preq_item = '00010'.
account-serial_no = '02'.
account-gl_account = '0000417000'.
account-costcenter = '0000006328'.
APPEND account.
CLEAR: accountx.
accountx-preq_item = '00010'.
accountx-serial_no = '02'.
accountx-preq_itemx = 'X'.
accountx-serial_nox = 'X'.
accountx-gl_account = 'X'.
accountx-costcenter = 'X'.
APPEND accountx.
************************************
"服务行01
CLEAR: service.
service-doc_item = '00010'."行项目编号
service-outline = '0000000001'."对应行项目的item-pckg_no = '0000000001'."软件包编号
service-srv_line = '0000000010'."行号
service-short_text = 'service test01'.
service-quantity = '10.000'."数量
service-uom = 'EA'."单位
service-gross_price = '10.00'."单价
service-currency = 'USD'."货币
service-dist_ind_acc = '2'."【关键字段】 复式记帐的分配标识 1:按数量分配;2:按百分比分配;3:按金额分配
service-part_inv_ind = '1'."【关键字段】 部分发票标识 1 依次对GR数分配IR数 2 按比例对GR数分配IR数
APPEND service.
CLEAR: servicex.
servicex-doc_item = '00010'.
servicex-outline = '0000000001'.
servicex-srv_line = '0000000010'."
servicex-short_text = 'X'.
servicex-quantity = 'X'.
servicex-uom = 'X'.
servicex-gross_price = 'X'.
servicex-currency = 'X'.
servicex-dist_ind_acc = 'X'.
servicex-part_inv_ind = 'X'.
APPEND servicex.
"服务行02
CLEAR: service.
service-doc_item = '00010'."行项目编号
service-outline = '0000000001'."对应行项目的item-pckg_no = '0000000001'."软件包编号
service-srv_line = '0000000020'."行号
service-short_text = 'service test02'.
service-quantity = '9.000'.
service-uom = 'H'.
service-gross_price = '19.00'.
service-currency = 'USD'.
service-dist_ind_acc = '2'."【关键字段】 复式记帐的分配标识 1:按数量分配;2:按百分比分配;3:按金额分配
service-part_inv_ind = '1'."【关键字段】 部分发票标识 1 依次对GR数分配IR数 2 按比例对GR数分配IR数
APPEND service.
CLEAR: servicex.
servicex-doc_item = '00010'.
servicex-outline = '0000000001'.
servicex-srv_line = '0000000020'.
servicex-short_text = 'X'.
servicex-quantity = 'X'.
servicex-uom = 'X'.
servicex-gross_price = 'X'.
servicex-currency = 'X'.
servicex-dist_ind_acc = 'X'.
servicex-part_inv_ind = 'X'.
APPEND servicex.
************************************
"服务行与科目分配对应关系 01
CLEAR: serviceaccount.
serviceaccount-doc_item = '00010'."行项目编号
serviceaccount-outline = '0000000001'."对应服务行的service-outline
serviceaccount-srv_line = '0000000010'."对应服务行的service-srv_line
serviceaccount-serial_no = '01'."对应科目分配行的account-serial_no
serviceaccount-serial_no_item = '01'."等于serviceaccount-serial_no
serviceaccount-percent = '100'."三种分摊方式(由service-dist_ind_acc控制):按百分比分摊;
*serviceaccount-quantity = '10'."按数量分摊,数量分摊自service-quantity
*serviceaccount-net_value = ''."按服务行总价值分摊
APPEND serviceaccount.
CLEAR: serviceaccountx.
serviceaccountx-doc_item = '00010'.
serviceaccountx-outline = '0000000001'.
serviceaccountx-srv_line = '0000000010'.
serviceaccountx-serial_no = '01'.
serviceaccountx-serial_no_item = 'X'.
serviceaccountx-percent = 'X'."
*serviceaccountx-quantity = 'X'."
*serviceaccountx-net_value = 'X'."
APPEND serviceaccountx.
"服务行与科目分配对应关系 02
CLEAR: serviceaccount.
serviceaccount-doc_item = '00010'.
serviceaccount-outline = '0000000001'.
serviceaccount-srv_line = '0000000020'.
serviceaccount-serial_no = '02'.
serviceaccount-serial_no_item = '02'.
serviceaccount-percent = '100'."三种分摊方式(由service-dist_ind_acc控制):按百分比分摊;
*serviceaccount-quantity = '10'."按数量分摊,数量分摊自service-quantity
*serviceaccount-net_value = ''."按服务行总价值分摊
APPEND serviceaccount.
CLEAR: serviceaccountx.
serviceaccountx-doc_item = '00010'.
serviceaccountx-outline = '0000000001'.
serviceaccountx-srv_line = '0000000020'.
serviceaccountx-serial_no = '02'.
serviceaccountx-serial_no_item = 'X'.
serviceaccountx-percent = 'X'."
*serviceaccountx-quantity = 'X'."
*serviceaccountx-net_value = 'X'."
APPEND serviceaccountx.
CALL FUNCTION 'BAPI_PR_CREATE'
EXPORTING
prheader = header
prheaderx = headerx
* TESTRUN =
IMPORTING
number = preq_no
* PRHEADEREXP =
TABLES
return = lt_return
pritem = item
pritemx = itemx
* PRITEMEXP =
* PRITEMSOURCE =
praccount = account
* PRACCOUNTPROITSEGMENT =
praccountx = accountx
* PRADDRDELIVERY =
* PRITEMTEXT =
* PRHEADERTEXT =
* EXTENSIONIN =
* EXTENSIONOUT =
* PRVERSION =
* PRVERSIONX =
* ALLVERSIONS =
* PRCOMPONENTS =
* PRCOMPONENTSX =
* SERVICEOUTLINE =
* SERVICEOUTLINEX =
servicelines = service
servicelinesx = servicex
* SERVICELIMIT =
* SERVICELIMITX =
* SERVICECONTRACTLIMITS =
* SERVICECONTRACTLIMITSX =
serviceaccount = serviceaccount
serviceaccountx = serviceaccountx
* SERVICELONGTEXTS =
* SERIALNUMBER =
* SERIALNUMBERX =
.
* 处理错误消息:通过判断消息的类型,来判断BAPI是否成功
READ TABLE lt_return INTO wa_return WITH KEY type = 'E'.
IF sy-subrc = 0.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
WRITE: / '失败 T_T'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
WRITE: / '成功创建采购申请O_o', preq_no.
ENDIF.
ULINE.
LOOP AT lt_return INTO wa_return.
WRITE: / wa_return-message, wa_return-type, wa_return-id, wa_return-number.
ENDLOOP.