error bapi BAPI_ACC_DOCUMENT_POST 848 FF

FI会计凭证导入-TAX参数报错 Tax insertion for 'xxxx'> impossible due to tax base 0

参考网址:error bapi BAPI_ACC_DOCUMENT_POST 848 FF | SAP Community

参考步骤

实际代码

FORM frm_create_exp  TABLES   it_exp_item TYPE zttif_hly_exp_log

                     CHANGING lt_return    TYPE zbapiret2_t

                              iv_no_commit TYPE flag.


  DATA:ls_documentheader    TYPE bapiache09,

       lt_accountreceivable TYPE TABLE OF bapiacar09,

       lt_accountpayable    TYPE TABLE OF bapiacap09,

       lt_accountgl         TYPE TABLE OF bapiacgl09,

       lt_currencyamount    TYPE TABLE OF bapiaccr09,

       lt_accounttax        TYPE TABLE OF bapiactx09,

       lt_criteria          TYPE TABLE OF bapiackec9.

  DATA:ls_extension2        TYPE zsfiexten2,

       ls_extension_accit   TYPE accit,

       ls_extension_acccr   TYPE acccr,

       lt_extension         TYPE STANDARD TABLE OF bapiparex,

       ls_extension         TYPE bapiparex.

*  DATA:lt_return            TYPE TABLE OF bapiret2.

  DATA:lt_mwdat             TYPE TABLE OF rtax1u15.

  DATA:ls_color             TYPE slis_specialcol_alv.

  DATA:lv_itemno            TYPE posnr_acc.

  DATA lv_objkey            TYPE bapiache09-obj_key.

  DATA:lv_msg               TYPE bapi_msg.

  DATA:lv_hkont             TYPE hkont.

  DATA:lv_buzei             TYPE POSNR_ACC.

  DATA:LINES                TYPE POSNR_ACC.

  DATA:lv_suminfo           TYPE anln1.

  DATA: gr_uuid_error TYPE REF TO cx_uuid_error,

        gv_error      TYPE string.


  DATA:BEGIN OF gt_criteria_value OCCURS 0,

         zuuid  TYPE uuid,

         zfield TYPE char50,

         zvalue TYPE char50,

       END OF gt_criteria_value.

  .

  REFRESH gt_criteria_value.

  LOOP AT it_exp_item INTO DATA(ls_data).

    TRY.

        ls_data-zuuid = cl_system_uuid=>create_uuid_c22_static( ).

      CATCH cx_uuid_error INTO gr_uuid_error.

        gv_error = gr_uuid_error->get_text( ).

    ENDTRY.

*No.30~34根据录入数据派生出所有特征值

    "销售订单号

    IF ls_data-vbeln IS NOT INITIAL.

      gt_criteria_value-zfield = 'KAUFN'.

      gt_criteria_value-zvalue = ls_data-vbeln.

      gt_criteria_value-zvalue = ls_data-zuuid.

      APPEND  gt_criteria_value.

    ENDIF.

    "销售订单行项目号

    IF ls_data-vbeln IS NOT INITIAL.

      gt_criteria_value-zfield = 'KDPOS'.

      gt_criteria_value-zvalue = ls_data-posnr.

      gt_criteria_value-zvalue = ls_data-zuuid.

      APPEND  gt_criteria_value.

    ENDIF.

    "客户号

    IF ls_data-vbeln IS NOT INITIAL.

      gt_criteria_value-zfield = 'KNDNR'.

      gt_criteria_value-zvalue = ls_data-kunnr.

      gt_criteria_value-zvalue = ls_data-zuuid.

      APPEND  gt_criteria_value.

    ENDIF.

    "产品号

    IF ls_data-vbeln IS NOT INITIAL.

      gt_criteria_value-zfield = 'ARTNR'.

      gt_criteria_value-zvalue = ls_data-artnr.

      gt_criteria_value-zvalue = ls_data-zuuid.

      APPEND  gt_criteria_value.

    ENDIF.

    "分销渠道

    IF ls_data-vbeln IS NOT INITIAL.

      gt_criteria_value-zfield = 'VTWEG'.

      gt_criteria_value-zvalue = ls_data-vtweg.

      gt_criteria_value-zvalue = ls_data-zuuid.

      APPEND  gt_criteria_value.

    ENDIF.

    MODIFY it_exp_item FROM ls_data.

  ENDLOOP.


  SELECT * INTO TABLE @DATA(lt_tbsl)

     FROM tbsl.


  SELECT * FROM t074

    WHERE ktopl EQ @gv_ktopl

    INTO TABLE @DATA(lt_t074).


  lines = lines( it_exp_item ).


  CLEAR lv_buzei.

  LOOP AT it_exp_item  ASSIGNING FIELD-SYMBOL(<line>).

    IF <line>-buzei IS NOT INITIAL.

      lv_buzei = <line>-buzei.

    ELSE.

      lv_buzei = lv_buzei + 1.

      <line>-buzei = lv_buzei.

    ENDIF.

    READ TABLE lt_tbsl INTO DATA(ls_tbsl)

                       WITH KEY bschl = <line>-bschl.

    IF ls_tbsl-koart = 'S' OR "总账科目

       ls_tbsl-koart = 'A' OR

       ls_tbsl-koart = 'M'.

      IF ls_tbsl-koart = 'S' OR ls_tbsl-koart = 'M'.

        IF <line>-hkont IS INITIAL.

          <line>-hkont = <line>-suminfo.

        ENDIF.

        lv_suminfo = ''.

      ELSE.

        lv_suminfo = <line>-suminfo.

      ENDIF.

      lt_accountgl = VALUE #( BASE lt_accountgl (

                        itemno_acc = lv_buzei

                        item_text  = <line>-sgtxt                  "项目文本

                        acct_type  = ls_tbsl-koart

                        gl_account = |{ <line>-hkont ALPHA = IN }| "总账科目

                        asset_no   = lv_suminfo  "客户/供应商/总账科目/固定资产编号

                        sub_number = '0000'

                        costcenter = |{ <line>-kostl ALPHA = IN }| "成本中心

                        alloc_nmbr = <line>-zuonr    "分配

                        ref_key_1  = <line>-xref1    "参考代码1

                        ref_key_2  = <line>-xref2    "参考代码2

                        profit_ctr = <line>-prctr    "利润中心

                        housebankid = <line>-hbkid   "开户行

                        tax_code   = <line>-mwskz    "税码

*                          cs_trans_t = <line>-umsks

                         ) ).


    ELSEIF ls_tbsl-koart = 'D'."客户应收


      READ TABLE lt_t074 INTO DATA(ls_t074)

                         WITH KEY koart = ls_tbsl-koart

                                  umskz = <line>-umskz.

      IF sy-subrc EQ 0.


        lt_accountreceivable = VALUE #( BASE lt_accountreceivable (

                          itemno_acc = lv_buzei

                          item_text  = <line>-sgtxt

                          customer   = |{ <line>-suminfo ALPHA = IN }|

                          gl_account = |{ ls_t074-skont ALPHA = IN }|

                          sp_gl_ind  = <line>-umskz

                          alloc_nmbr = <line>-zuonr

                          ref_key_1  = <line>-xref1

                          ref_key_2  = <line>-xref2

                          profit_ctr = <line>-prctr

                          bank_id    = <line>-hbkid

                          tax_code   = <line>-mwskz

                           ) ).


      ELSE.


        lt_accountreceivable = VALUE #( BASE lt_accountreceivable (

                          itemno_acc = lv_buzei

                          item_text  = <line>-sgtxt

                          customer   = |{ <line>-suminfo ALPHA = IN }|

                          gl_account = |{ <line>-hkont ALPHA = IN }|

                          sp_gl_ind  = <line>-umskz

                          alloc_nmbr = <line>-zuonr

                          ref_key_1  = <line>-xref1

                          ref_key_2  = <line>-xref2

                          profit_ctr = <line>-prctr

                          bank_id    = <line>-hbkid

                          tax_code   = <line>-mwskz

                           ) ).


      ENDIF.


    ELSEIF ls_tbsl-koart = 'K'."供应商应付


      READ TABLE lt_t074 INTO ls_t074

                         WITH KEY koart = ls_tbsl-koart

                                  umskz = <line>-umskz.

      IF sy-subrc EQ 0.


        lt_accountpayable = VALUE #( BASE lt_accountpayable (

                          itemno_acc = lv_buzei

                          item_text  = <line>-sgtxt

                          vendor_no  = |{ <line>-suminfo ALPHA = IN }|

                          gl_account = |{ ls_t074-skont ALPHA = IN }|

                          sp_gl_ind  = <line>-umskz

                          alloc_nmbr = <line>-zuonr

                          ref_key_1  = <line>-xref1

                          ref_key_2  = <line>-xref2

                          profit_ctr = <line>-prctr

                          bank_id    = <line>-hbkid

                          pmnttrms   = <line>-zterm  "收付条件

                          tax_code   = <line>-mwskz

                           ) ).


      ELSE.


        lt_accountpayable = VALUE #( BASE lt_accountpayable (

                          itemno_acc = lv_buzei

                          item_text  = <line>-sgtxt

                          vendor_no  = |{ <line>-suminfo ALPHA = IN }|

                          gl_account = |{ <line>-hkont ALPHA = IN }|

                          sp_gl_ind  = <line>-umskz

                          alloc_nmbr = <line>-zuonr

                          ref_key_1  = <line>-xref1

                          ref_key_2  = <line>-xref2

                          profit_ctr = <line>-prctr

                          bank_id    = <line>-hbkid

                          pmnttrms   = <line>-zterm

                          tax_code   = <line>-mwskz

                           ) ).


      ENDIF.


    ENDIF.

    "criteria

    LOOP AT gt_criteria_value   WHERE zuuid =  <line>-zuuid.


      lt_criteria = VALUE #( BASE lt_criteria ( itemno_acc = lv_buzei

                                            fieldname  = gt_criteria_value-zfield

                                            character  = gt_criteria_value-zvalue ) ).


    ENDLOOP.


    "CURRENCYAMOUNT

    lt_currencyamount = VALUE #( BASE lt_currencyamount (

                          itemno_acc = lv_buzei

                          currency   = <line>-waers

                          amt_doccur = COND string(

                                            WHEN ls_tbsl-shkzg = 'H'

                                              THEN -1 * <line>-wrbtr "凭证货币金额

                                              ELSE <line>-wrbtr )

                          curr_type  = '00'

                          exch_rate  = <line>-kursf

                          ) ).


    IF <line>-waers NE gv_waers.

      IF <line>-dmbtr IS INITIAL.

        <line>-dmbtr = <line>-wrbtr * <line>-kursf.

      ENDIF.

      lt_currencyamount = VALUE #( BASE lt_currencyamount (

                            itemno_acc = lv_buzei

                            currency   = gv_waers

                            amt_doccur = COND string(

                                              WHEN ls_tbsl-shkzg = 'H'

                                                THEN -1 * <line>-dmbtr  "按本位币计的金额

                                                ELSE <line>-dmbtr   )

                            curr_type  = '10'

                            exch_rate  = <line>-kursf

                            ) ).

    ENDIF.


    IF NOT <line>-mwskz IS INITIAL.


      CALL FUNCTION 'CALCULATE_TAX_FROM_GROSSAMOUNT'

        EXPORTING

          i_bukrs = <line>-bukrs

          i_mwskz = <line>-mwskz

          i_waers = <line>-waers

          i_wrbtr = <line>-wrbtr

        TABLES

          t_mwdat = lt_mwdat.


      LOOP AT lt_mwdat INTO DATA(ls_mwdat).

        lines = lines + 1.

        "CURRENCYAMOUNT

        lt_currencyamount = VALUE #( BASE lt_currencyamount (

                              itemno_acc = lines

                              currency   = gv_waers"<line>-waers

*                              amt_doccur = COND string(

*                                                WHEN ls_tbsl-shkzg = 'H'

*                                                  THEN -1 * ls_mwdat-wmwst

*                                                  ELSE ls_mwdat-wmwst )

                              amt_base   = ls_mwdat-kawrt

                              curr_type  = '00'

                              exch_rate  = <line>-kursf

                              ) ).


        "ACCOUNTTAX

        lt_accounttax = VALUE #( BASE lt_accounttax (

                            itemno_acc = lines

                            tax_code   = <line>-mwskz

                            acct_key   = ls_mwdat-ktosl

                            cond_key   = ls_mwdat-kschl

                            taxjurcode = ls_mwdat-txjcd

                            taxjurcode_deep  = ls_mwdat-txjcd_deep

                            taxjurcode_level = ls_mwdat-txjlv

                           ) ).


      ENDLOOP.


    ELSE.

*      IF <line>-waers = gv_waers.

*        IF <line>-dmbtr IS INITIAL.

*          <line>-dmbtr = <line>-wrbtr.

*        ENDIF.

*        lt_currencyamount = VALUE #( BASE lt_currencyamount (

*                              itemno_acc = lv_buzei

*                              currency   = gv_waers

*                              amt_doccur = COND string(

*                                                WHEN ls_tbsl-shkzg = 'H'

*                                                  THEN -1 * <line>-dmbtr "按本位币计的金额

*                                                  ELSE <line>-dmbtr )

*                              curr_type  = '10'

*                              exch_rate  = <line>-kursf

*                              ) ).

*      ENDIF.

    ENDIF.


    SORT lt_currencyamount BY itemno_acc.


    CLEAR ls_extension2.

    ls_extension2 = VALUE #(

                      posnr      = lv_buzei

                      bschl      = <line>-bschl "记帐代码

                      rstgr      = <line>-rstgr "原因代码

*                        anbwa      = <line>-umsks

                      umskz      = <line>-umskz "特别总账标识

                      zlsch      = <line>-zlsch "付款方式

                      zlspr      = <line>-zlspr "冻结付款

                      xnegp      = <line>-xnegp "标识: 反记帐

*                        bupla      = lv_bupla

                    ).


    lt_extension = VALUE #( BASE lt_extension (

                    structure  = 'ZSFIEXTEN2'

                    valuepart2 = ls_extension2

                      ) ).

    IF NOT <line>-mwskz IS INITIAL.

     lt_extension = VALUE #( BASE lt_extension (

                     structure  = 'ACCIT'

                     valuepart1 = lv_buzei"LINES

                     valuepart2 = 'TAXIT'

                     valuepart3 = 'X'

                       ) ).

      lt_extension = VALUE #( BASE lt_extension (

                     structure  = 'ACCCR'

                     valuepart1 = lv_buzei"LINES

                     valuepart2 = 'FWBAS'

                     valuepart3 = <line>-wrbtr

                       ) ).


    ENDIF.

    CLEAR:ls_t074.


    ls_documentheader = VALUE #(

                 obj_type   = 'BKPFF'

                 obj_key    = '$'

                 bus_act    = 'RFBU'

                 doc_type   = <line>-blart "凭证类型

                 comp_code  = <line>-bukrs "公司代码

                 doc_date   = <line>-bldat "凭证日期

                 pstng_date = <line>-budat "记账日期

                 fis_period = <line>-monat "期间

                 ref_doc_no = <line>-xblnr "参考文本

                 header_txt = <line>-bktxt "凭证抬头文本

                 username   = sy-uname

                 ).

  ENDLOOP.



  IF iv_no_commit = abap_true.


    CALL FUNCTION 'BAPI_ACC_DOCUMENT_CHECK'

      EXPORTING

        documentheader    = ls_documentheader

      TABLES

        accountgl         = lt_accountgl

        accountreceivable = lt_accountreceivable

        accountpayable    = lt_accountpayable

        currencyamount    = lt_currencyamount

        criteria          = lt_criteria

        accounttax        = lt_accounttax

        return = lt_return

        extension2        = lt_extension.


  ELSE.


    CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'

      EXPORTING

        documentheader    = ls_documentheader

      IMPORTING

        obj_key           = lv_objkey

      TABLES

        accountgl         = lt_accountgl

        accountreceivable = lt_accountreceivable

        accountpayable    = lt_accountpayable

        currencyamount    = lt_currencyamount

        criteria          = lt_criteria

        accounttax        = lt_accounttax

        return = lt_return

        extension2        = lt_extension.


    READ TABLE lt_return ASSIGNING FIELD-SYMBOL(<fs_return>)

                         WITH KEY type = 'S'.

    IF sy-subrc EQ 0.

      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'

        EXPORTING

          wait = 'X'.

      <fs_return>-message_v1 = lv_objkey.

    ELSE.

      READ TABLE lt_return ASSIGNING <fs_return>

                         WITH KEY type = 'E'.

      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.

    ENDIF.


    LOOP AT it_exp_item ASSIGNING FIELD-SYMBOL(<fs_data>).

      <fs_data>-belnr   = lv_objkey.

      <fs_data>-ztype   = <fs_return>-type.

      LOOP AT  lt_return ASSIGNING <fs_return>.

        <fs_data>-message = <fs_data>-message && <fs_return>-message.

      ENDLOOP.

    ENDLOOP.


  ENDIF.


  CLEAR:ls_tbsl,

        lv_objkey,

        lv_msg,

        ls_color,

        ls_extension2,

        ls_extension,

        ls_documentheader.

  FREE:lt_accountgl,

       lt_accountreceivable,

       lt_accountpayable,

       lt_currencyamount,

       lt_accounttax,

       lt_extension,

       lt_mwdat.




ENDFORM.


增强点是这个:BADI_ACC_DOCUMENT

实际增强代码


METHOD if_ex_acc_document~change.


  DATA: wa_extension   TYPE bapiparex,

        ext_value(960) TYPE c,

        wa_accit       TYPE accit,

        wa_acccr       TYPE acccr,

        l_ref          TYPE REF TO data.


  FIELD-SYMBOLS: <l_struc> TYPE any,

                 <l_field> TYPE any.


  SORT c_extension2 BY structure.


  LOOP AT c_extension2 INTO wa_extension.

    AT NEW structure.

      CREATE DATA l_ref TYPE (wa_extension-structure).

      ASSIGN l_ref->* TO <l_struc>.

    ENDAT.

    IF wa_extension-structure = 'ZSFIEXTEN2'.

      CONCATENATE wa_extension-valuepart1 wa_extension-valuepart2

      wa_extension-valuepart3 wa_extension-valuepart4

      INTO ext_value.

      MOVE ext_value TO <l_struc>.

      ASSIGN COMPONENT 'POSNR' OF STRUCTURE <l_struc> TO <l_field>.

      READ TABLE c_accit WITH KEY posnr = <l_field>

      INTO wa_accit.

      IF sy-subrc IS INITIAL.

        MOVE-CORRESPONDING <l_struc> TO wa_accit.

        MODIFY c_accit FROM wa_accit INDEX sy-tabix.

      ENDIF.

    ELSEIF wa_extension-structure = 'ACCCR'.

      READ TABLE c_acccr WITH KEY posnr = wa_extension-valuepart1

      INTO wa_acccr.

      IF sy-subrc IS INITIAL.

        wa_acccr-fwbas = wa_extension-valuepart3.

        MODIFY c_acccr FROM wa_acccr INDEX sy-tabix.

      ENDIF.

    ELSEIF wa_extension-structure = 'ACCIT'.

      READ TABLE c_accit WITH KEY posnr = wa_extension-valuepart1

      INTO wa_accit.

      IF sy-subrc IS INITIAL.

        wa_accit-taxit = wa_extension-valuepart3.

        MODIFY c_accit FROM wa_accit INDEX sy-tabix.

      ENDIF.

    ENDIF.

  ENDLOOP.



ENDMETHOD.

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,888评论 6 515
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,677评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 168,386评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,726评论 1 297
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,729评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,337评论 1 310
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,902评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,807评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,349评论 1 318
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,439评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,567评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,242评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,933评论 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,420评论 0 24
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,531评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,995评论 3 377
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,585评论 2 359

推荐阅读更多精彩内容