ABAP_需要税额的情况下 BAPI_ACC_DOCUMENT_POST

17 篇文章 0 订阅

话不多说 上技师
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.
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值