话不多说 上技师
DATA: lv_message TYPE bapi_msg.
DATA: lv_fkarv TYPE fkarv.
DATA: lv_lfart TYPE fkarv.
*&—BAPI参数
DATA: ls_documentheader TYPE bapiache09,
lt_accountgl TYPE STANDARD TABLE OF bapiacgl09, " 总账
lt_currencyamount TYPE STANDARD TABLE OF bapiaccr09, " 金额
lt_extension2 TYPE STANDARD TABLE OF bapiparex, " 自定义字段增强
lt_acccustar TYPE STANDARD TABLE OF bapiacar09, "客户应收行项目表
lt_accounttax TYPE STANDARD TABLE OF bapiactx09, "税务项目
ls_acccustar TYPE bapiacar09,
lt_return TYPE STANDARD TABLE OF bapiret2, " 返回参数
lt_criteria TYPE STANDARD TABLE OF bapiackec9. " 获利能力分析字段增强
DATA: ls_doch_o TYPE bapiache09,
lv_awkey TYPE bkpf-awkey,
p_xblnr TYPE bkpf-xblnr.
DATA: ls_accountgl TYPE bapiacgl09, " 总账
ls_currencyamount TYPE bapiaccr09, " 金额
ls_criteria TYPE bapiackec9, " 获利能力分析字段增强
ls_extension2 TYPE bapiparex, " 自定义字段增强
ls_accounttax TYPE bapiactx09, "税务
ls_return TYPE bapiret2. " 返回参数
DATA: lt_bkpf TYPE STANDARD TABLE OF bkpf,
ls_bkpf TYPE bkpf,
lt_bseg TYPE STANDARD TABLE OF bseg,
lv_prctr TYPE bseg-prctr,
lv_aufnr TYPE coas-aufnr,
lv_type TYPE char1.
&—其它字段定义
DATA lv_num TYPE i VALUE 0. " 凭证行项目编号
DATA lv_char TYPE char1. " 凭证行项目编号
DATA:lv_str TYPE string.
DATA:ls_bseg TYPE bseg.
REFRESH: gt_errors[],gt_billingdatain[],gt_conditiondatain[].
LOOP AT gt_output INTO gs_output WHERE sel = ‘X’ AND status = icon_yellow_light…
MOVE gt_output TO gt_output_fb01 .
CLEAR gs_output.
ENDLOOP.
SELECT * INTO TABLE @DATA(lt_tbsl) FROM tbsl.
LOOP AT gt_output ASSIGNING FIELD-SYMBOL(<fs_output_fb01>) WHERE sel = ‘X’ AND status = icon_yellow_light…
CLEAR:lt_acccustar,ls_acccustar,lt_currencyamount,ls_currencyamount,ls_documentheader,ls_accountgl,ls_extension2,lv_awkey,<fs_output_fb01>-message.
ls_documentheader-comp_code = <fs_output_fb01>-bukrs. " 公司代码
ls_documentheader-doc_date = <fs_output_fb01>-audat. " 凭证日期
ls_documentheader-pstng_date = s_budat-low. " 过账日期
ls_documentheader-doc_type = 'RV'. " 凭证类型
ls_documentheader-fisc_year = s_budat-low+0(4). " 财年
ls_documentheader-fis_period = s_budat-low+4(2). " 会计期间
ls_documentheader-username = sy-uname. " 创建人
"第一行 客户
CLEAR ls_acccustar.
lv_num = 1.
ls_acccustar-itemno_acc = lv_num. "行项目编号
ls_acccustar-alloc_nmbr = <fs_output_fb01>-combinenum. "分配号
ls_acccustar-customer = <fs_output_fb01>-kunnr_n. "客户
ls_acccustar-pmnttrms = <fs_output_fb01>-zterm .
APPEND ls_acccustar TO lt_acccustar.
CLEAR ls_acccustar.
ls_extension2-structure = 'BSCHL'."记账码
lv_char = lv_num.
ls_extension2-valuepart1 = lv_char.
IF <fs_output_fb01>-ywlx = '1' .
ls_extension2-valuepart2 = '01'.
ELSEIF <fs_output_fb01>-ywlx = '1' .
ls_extension2-valuepart2 = '09'.
ELSEIF <fs_output_fb01>-ywlx = '2' .
ls_extension2-valuepart2 = '11'.
ELSEIF <fs_output_fb01>-ywlx = '2' .
ls_extension2-valuepart2 = '19'.
ENDIF.
APPEND ls_extension2 TO lt_extension2.
READ TABLE lt_tbsl INTO DATA(ls_tbsl) WITH KEY bschl = ls_extension2-valuepart2.
CLEAR ls_extension2.
ls_currencyamount-amt_doccur = <fs_output_fb01>-so_amt . "金额
ls_currencyamount-amt_doccur = abs( ls_currencyamount-amt_doccur ).
IF ls_tbsl-shkzg = 'H'.
ls_currencyamount-amt_doccur = ls_currencyamount-amt_doccur * -1.
ENDIF.
ls_currencyamount-itemno_acc = lv_num.
ls_currencyamount-currency = <fs_output_fb01>-waerk. "货币
APPEND ls_currencyamount TO lt_currencyamount.
CLEAR: ls_currencyamount,ls_tbsl.
"第二行 销项税科目
lv_num = lv_num + 1.
ls_extension2-structure = 'BSCHL'.
lv_char = lv_num.
ls_extension2-valuepart1 = lv_char.
IF <fs_output_fb01>-ywlx = '1' .
ls_extension2-valuepart2 = '50'.
ELSEIF <fs_output_fb01>-ywlx = '2' .
ls_extension2-valuepart2 = '40'.
ENDIF.
APPEND ls_extension2 TO lt_extension2.
READ TABLE lt_tbsl INTO ls_tbsl WITH KEY bschl = ls_extension2-valuepart2.
CLEAR ls_extension2.
ls_currencyamount-amt_doccur = <fs_output_fb01>-so_tax. "金额
ls_currencyamount-amt_doccur = abs( ls_currencyamount-amt_doccur ).
IF ls_tbsl-shkzg = 'H'.
ls_currencyamount-amt_doccur = ls_currencyamount-amt_doccur * -1.
ENDIF.
ls_currencyamount-itemno_acc = lv_num.
ls_currencyamount-currency = <fs_output_fb01>-waerk. "货币
ls_currencyamount-tax_amt = ls_currencyamount-amt_doccur. "金额
ls_currencyamount-amt_base = abs( <fs_output_fb01>-so_amt_notax ) .
APPEND ls_currencyamount TO lt_currencyamount.
CLEAR: ls_currencyamount,ls_tbsl.
APPEND VALUE #( itemno_acc = lv_num
tax_code = <fs_output_fb01>-mwsk1
gl_account = <fs_output_fb01>-km_artax
) TO lt_accounttax.
"第三行 收入科目
lv_num = lv_num + 1.
ls_accountgl-itemno_acc = lv_num.
ls_accountgl-gl_account = <fs_output_fb01>-km_re. "会计科目
ls_accountgl-profit_ctr = <fs_output_fb01>-prctr. "利润中心
ls_accountgl-alloc_nmbr = <fs_output_fb01>-combinenum. "分配号
ls_accountgl-tax_code = <fs_output_fb01>-mwsk1. "税码
ls_accountgl-bus_area = <fs_output_fb01>-fashgrd.
APPEND ls_accountgl TO lt_accountgl.
CLEAR ls_accountgl.
lv_char = lv_num.
ls_extension2-valuepart1 = lv_char.
ls_extension2-structure = 'BSCHL'.
IF <fs_output_fb01>-ywlx = '1' .
ls_extension2-valuepart2 = '50'.
ELSEIF <fs_output_fb01>-ywlx = '2' .
ls_extension2-valuepart2 = '40'.
ENDIF.
APPEND ls_extension2 TO lt_extension2.
READ TABLE lt_tbsl INTO ls_tbsl WITH KEY bschl = ls_extension2-valuepart2.
CLEAR ls_extension2.
ls_currencyamount-amt_doccur = <fs_output_fb01>-so_amt_notax.
ls_currencyamount-amt_doccur = abs( ls_currencyamount-amt_doccur ) .
IF ls_tbsl-shkzg = 'H'.
ls_currencyamount-amt_doccur = ls_currencyamount-amt_doccur * -1.
ENDIF.
ls_currencyamount-itemno_acc = lv_num.
ls_currencyamount-currency = <fs_output_fb01>-waerk. "货币
ls_currencyamount-amt_base = ls_currencyamount-amt_doccur.
APPEND ls_currencyamount TO lt_currencyamount.
CLEAR:ls_currencyamount,ls_tbsl.
"第四行 成本科目 主营业务成本
lv_num = lv_num + 1.
ls_accountgl-itemno_acc = lv_num.
ls_accountgl-gl_account = <fs_output_fb01>-km_co. "会计科目
ls_accountgl-profit_ctr = <fs_output_fb01>-prctr. "利润中心
ls_accountgl-bus_area = <fs_output_fb01>-fashgrd. "业务范围
ls_accountgl-alloc_nmbr = <fs_output_fb01>-combinenum. "分配
APPEND ls_accountgl TO lt_accountgl.
CLEAR ls_accountgl.
lv_char = lv_num.
ls_extension2-valuepart1 = lv_char.
ls_extension2-structure = 'BSCHL'.
IF <fs_output_fb01>-ywlx = '1'.
ls_extension2-valuepart2 = '40'.
ELSEIF <fs_output_fb01>-ywlx = '2'.
ls_extension2-valuepart2 = '50'.
ENDIF.
APPEND ls_extension2 TO lt_extension2.
READ TABLE lt_tbsl INTO ls_tbsl WITH KEY bschl = ls_extension2-valuepart2.
CLEAR ls_extension2.
ls_currencyamount-amt_doccur = <fs_output_fb01>-po_amt_notax .
ls_currencyamount-amt_doccur = abs( ls_currencyamount-amt_doccur ) .
IF ls_tbsl-shkzg = 'H'.
ls_currencyamount-amt_doccur = ls_currencyamount-amt_doccur * -1.
ENDIF.
ls_currencyamount-itemno_acc = lv_num.
ls_currencyamount-currency = <fs_output_fb01>-waerk.
APPEND ls_currencyamount TO lt_currencyamount.
CLEAR:ls_currencyamount,ls_tbsl.
"第五行 发出商品科目
lv_num = lv_num + 1.
ls_accountgl-itemno_acc = lv_num.
ls_accountgl-gl_account = <fs_output_fb01>-km_fc. "会计科目
ls_accountgl-profit_ctr = <fs_output_fb01>-prctr. "利润中心
ls_accountgl-alloc_nmbr = <fs_output_fb01>-combinenum. "分配
APPEND ls_accountgl TO lt_accountgl.
CLEAR ls_accountgl.
lv_char = lv_num.
ls_extension2-valuepart1 = lv_char.
ls_extension2-structure = 'BSCHL'.
IF <fs_output_fb01>-ywlx = '1'.
ls_extension2-valuepart2 = '50'.
ELSEIF <fs_output_fb01>-ywlx = '2'..
ls_extension2-valuepart2 = '40'.
ENDIF.
APPEND ls_extension2 TO lt_extension2.
READ TABLE lt_tbsl INTO ls_tbsl WITH KEY bschl = ls_extension2-valuepart2.
CLEAR ls_extension2.
ls_currencyamount-amt_doccur = <fs_output_fb01>-po_amt_notax. "金额
ls_currencyamount-amt_doccur = abs( ls_currencyamount-amt_doccur ) .
IF ls_tbsl-shkzg = 'H'.
ls_currencyamount-amt_doccur = ls_currencyamount-amt_doccur * -1.
ENDIF.
ls_currencyamount-itemno_acc = lv_num.
ls_currencyamount-currency = <fs_output_fb01>-waerk. "货币
APPEND ls_currencyamount TO lt_currencyamount.
CLEAR:ls_currencyamount,ls_tbsl.
SORT lt_extension2.
REFRESH lt_return .
CLEAR lt_return.
sy-tcode = 'Z334' .
CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
EXPORTING
documentheader = ls_documentheader
IMPORTING
obj_type = ls_doch_o-obj_type
obj_key = ls_doch_o-obj_key
obj_sys = ls_doch_o-obj_sys
TABLES
accountgl = lt_accountgl "总账
accountreceivable = lt_acccustar
accounttax = lt_accounttax
currencyamount = lt_currencyamount "金额
criteria = lt_criteria
extension2 = lt_extension2 "扩展
return = lt_return.
READ TABLE lt_return INTO ls_return WITH KEY id = 'RW' number = '605'.
IF sy-subrc = 0.
<fs_output_fb01>-status = icon_green_light.
MESSAGE lv_str TYPE 'S'.
<fs_output_fb01>-message = <fs_output_fb01>-message && ls_return-message.
<fs_output_fb01>-belnr = ls_doch_o-obj_key.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ELSE.
<fs_output_fb01>-status = icon_red_light.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
CLEAR lv_str.
LOOP AT lt_return INTO ls_return .
IF ls_return-type = 'E' OR ls_return-type = 'A'.
CONCATENATE lv_str ls_return-message ';' INTO <fs_output_fb01>-message.
CLEAR ls_return .
ENDIF.
ENDLOOP.
ENDIF.
" ENDIF.
REFRESH: lt_accountgl,lt_acccustar,lt_currencyamount,lt_criteria,lt_extension2,lt_return,lt_accounttax.
ENDLOOP.