BAPI_ACC_DOCUMENT_POST用法

2023-10-26

文章目录

1 Overall

The blog will demostrate how to use BAPI_ACC_DOCUMENT_POST. We use
enhancement for it

2 Code

function zxtif_top_hkpz .
*"----------------------------------------------------------------------
*"*"Local interface:
*"  EXPORTING
*"     VALUE(STATUS) TYPE  STRING
*"     VALUE(MESSAGE) TYPE  STRING
*"     VALUE(BUSINESS_VALUE) TYPE  STRING
*"  CHANGING
*"     VALUE(MESSAGEID) TYPE  STRING
*"     VALUE(INTERFACEID) TYPE  STRING
*"     VALUE(JSONDATA) TYPE  STRING
*"----------------------------------------------------------------------
  data:lo_exception type ref to cx_root,
       ztrexjson    type ref to cl_trex_json_serializer,
       ztrexjsonret type ref to zcl_trex_json_deserializer,
       http_client  type ref to if_http_client.
*------------------->增加前导零
  define ref_lead_zero.
    call function 'CONVERSION_EXIT_ALPHA_INPUT'
      exporting
        input  = &1
      importing
        output = &1.
  end-of-definition.
*------------------->除去前导零
  define ref_exit_zero.
    call function 'CONVERSION_EXIT_ALPHA_OUTPUT'
      exporting
        input  = &1
      importing
        output = &1.
  end-of-definition.

  data:begin of  gw_data,
    zlcbh   like ztfi015-zlcbh,
    znumb   like ztfi015-znumb,
    zlshjd  like ztfi015-zlshjd,
    kunnr   like ztfi015-kunnr,
    vkbur   like ztfi015-vkbur,
    zhkje   like ztfi015-zhkje,
    zfkf    like ztfi015-zfkf,
    zfkrq   like ztfi015-zfkrq,
    hkont   like ztfi015-hkont,
    zhkyt   like ztfi015-zhkyt,
    status   type  char1,      "状态:S/E
    zmsg(200),                "返回消息
    end of gw_data.
  data: gt_data like table of gw_data with header line.
  data:begin of  gw_data_id,    "   " 独资办
    zlcbh   like ztfi015-zlcbh,
    znumb   like ztfi015-znumb,
    zlshjd  like ztfi015-zlshjd,
    kunnr   like ztfi015-kunnr,
    vkbur   like ztfi015-vkbur,
    zhkje   like ztfi015-zhkje,
    hkont   like ztfi015-hkont,
    zfkf    like ztfi015-zfkf,
    zfkrq   like ztfi015-zfkrq,
    zhkyt   like ztfi015-zhkyt,
    status   type  char1,      "状态:S/E
    zmsg(200),                "返回消息
    end of gw_data_id.
  data: gt_data_id like table of gw_data_id with header line.

  data:gt_ztfi015 like table of ztfi015 with header line,
       gw_ztfi015 like line of gt_ztfi015.

  data:lt_ztfi015 like table of ztfi015 ,
     lw_ztfi015 like line of gt_ztfi015.

*  DATA:item_num TYPE i.
*  DATA :znum  TYPE i  VALUE '450'.

  data: l_line type posnr_acc.
  data: l_line1 type posnr_acc.

  data:gv_uname type uname,
       l_sperr  like knb1-sperr.
  gv_uname = zcl_aip=>get_uname( ).

  try.

      if jsondata is not initial.
        replace all occurrences of regex '"(\w+)"(\s*:\s*)'
                   in jsondata  with '$1$2'.
        create object ztrexjsonret.
        ztrexjsonret->deserialize(
              exporting json = jsondata
              importing abap = gt_data[] ).
      endif.

      loop at gt_data into gw_data.


        ref_lead_zero:gw_data-kunnr.
        clear:l_sperr.
        select single sperr into l_sperr
          from knb1
          where kunnr = gw_data-kunnr
          and bukrs = '6800'.
        if sy-subrc <> 0 .
          gw_data-status = 'E'.
          concatenate gw_data-kunnr '经销商/6800不存在!' into gw_data-zmsg.
        else.
          if l_sperr = 'X'.
            gw_data-status = 'E'.
            concatenate gw_data-kunnr '经销商冻结!' into gw_data-zmsg.
          endif.
        endif.

        modify gt_data from gw_data.
      endloop.

      read table gt_data into gw_data with key status = 'E'.
      if sy-subrc = 0.
        status = 'E'.
        message = gw_data-zmsg."'存在错误消息!'.
        exit.
      endif.
*****************************************************
      data:   lt_docheader like table of bapiache09   with header line,
              lt_accountgl   like table of bapiacgl09 with header line,
              lt_acccven     like table of bapiacar09 with header line,
              lt_amount      like table of bapiaccr09 with header line,
              lt_return        like table of bapiret2 with header line,
              lv_obj_key like bapiache09-obj_key.
*  data:   l_msg type string.
      data: lt_docheader1 like table of bapiache09   with header line,
              lt_accountgl1   like table of bapiacgl09 with header line,
              lt_acccven2     like table of bapiacap09 with header line, " 供应
              lt_acccven1    like table of bapiacar09 with header line,   "客户
              lt_amount1      like table of bapiaccr09 with header line .

      data:    gt_extension2     like table of   bapiparex with header line.

      data: wa_zexten like zexten1.
      data:   l_bukrs type bukrs,
              l_belnr type belnr_d,
              l_gjahr type gjahr,
              lv_belnr type zfkre-belnr.
      data: l_acc1 type posnr_acc,
            l_acc2 type posnr_acc.


      " 处理数据将直营办和独资办区分.

*      gt_data_id[]  = gt_data[] .
      loop at gt_data into gw_data.
        if  gw_data-vkbur = '3007' or gw_data-vkbur  = '3009'
        or gw_data-vkbur  = '3011' or  gw_data-vkbur  = '3012'.

          move-corresponding gw_data  to  gw_data_id.
          append gw_data_id  to  gt_data_id .

        endif.

        clear:gw_data ,gw_data_id .
      endloop.

      delete gt_data  where  vkbur = '3007'or vkbur  = '3009'
      or  vkbur  = '3011' or   vkbur  = '3012' .

      clear:lt_docheader[].
*   直营办数据处理

*      data: lv_flag(1).
      if gt_data[]  is not initial.





        clear:lt_acccven,lt_accountgl,lt_amount,l_line.
        sort gt_data  by zlcbh.
        loop at gt_data into gw_data.

*          item_num = item_num + 1.

          select * into corresponding fields of lw_ztfi015 from ztfi015
         where zlcbh = gw_data-zlcbh
            and znumb = gw_data-znumb .
          endselect.

          if lw_ztfi015 is initial or  lw_ztfi015-belnr is not initial.
            if lt_docheader[] is  initial.
              lt_docheader-username = gv_uname.  "用户
              lt_docheader-header_txt = '商家回款'.         "
              lt_docheader-comp_code = '6800'. "公司代码
              lt_docheader-doc_date = sy-datum."凭证日期
              lt_docheader-pstng_date = sy-datum."过账日期
              lt_docheader-doc_type = 'ZB'.
              lt_docheader-ref_doc_no =  gw_data-zlcbh.
              append lt_docheader.
            endif.


            l_line = l_line + 1 .

            "APPEND ACCOUNTGL:
            "行项目一
            lt_accountgl-itemno_acc =  l_line.
            lt_accountgl-gl_account =  gw_data-hkont.
            " CONCATENATE 'Q' WA_SEL-BUKRS INTO gt_accountgl-PROFIT_CTR.
            concatenate gw_data-zfkrq+4(2) '月' gw_data-zfkrq+6(2) '日'  gw_data-zhkyt  gw_data-zlcbh into  lt_accountgl-item_text .
*          lt_accountgl-item_text  = ''."gw_alv-sgtxt. "文本
            append lt_accountgl.
            clear:lt_accountgl.
            lt_amount-itemno_acc  = l_line."  '0000000001'.
            lt_amount-currency =    'RMB'.
            lt_amount-amt_doccur  = gw_data-zhkje. "处罚金额
            append lt_amount.
            clear:lt_amount.
            if  gw_data-hkont+0(4)   = '1002'.
              wa_zexten-posnr = l_line. "凭证行项目
              wa_zexten-rstgr = '101'. "原因代码
*              wa_zexten-bschl = '40'.
              gt_extension2-structure  = 'ZEXTEN1'.
              gt_extension2-valuepart1 = wa_zexten.
*              lv_flag = 'X'.

              append gt_extension2.
              clear: gt_extension2.
            endif.



            .
*          APPEND gt_accountgl.
            "行项目二
            l_line = l_line + 1 .
            "APPEND ACCOUNTPAYABLE:(针对客户)'
            lt_acccven-itemno_acc  =  l_line.
            lt_acccven-customer = gw_data-kunnr.
            lt_acccven-comp_code =  '6800'.
            lt_acccven-c_ctr_area =  '6800'.
*          lt_acccven-item_text  = ''."gw_alv-sgtxt."处罚原因
            concatenate  gw_data-zfkrq+4(2) '' gw_data-zfkrq+6(2) ''   gw_data-zhkyt gw_data-zlcbh into  lt_acccven-item_text .

            append lt_acccven.
            clear:lt_acccven.
            lt_amount-itemno_acc  = l_line."  '0000000002'.
            lt_amount-currency =    'RMB'.
            lt_amount-amt_doccur  = gw_data-zhkje * -1 .
            append lt_amount.
            clear:lt_amount.
*
*            IF  lv_flag = 'X'.
*                wa_zexten-posnr = l_line. "凭证行项目
*                wa_zexten-bschl = '11'.
*                gt_extension2-structure  = 'ZEXTEN'.
*                gt_extension2-valuepart1 = wa_zexten.
*                APPEND gt_extension2.
*                CLEAR: gt_extension2.
*              ENDIF.

*          IF item_num >= znum .
            at end of zlcbh .

              call function 'BAPI_ACC_DOCUMENT_POST'
                exporting
                  documentheader    = lt_docheader
                importing
                  obj_key           = lv_obj_key
                tables
                  accountgl         = lt_accountgl
                  accountreceivable = lt_acccven
                  currencyamount    = lt_amount
                  return            = lt_return
                  extension2        = gt_extension2
                exceptions
                  others            = 1.
              read table lt_return  with key type = 'E'   .
              if sy-subrc = 0.
                call function 'BAPI_TRANSACTION_ROLLBACK'.
*      concatenate l_msg '处罚通报号:'gw_alv-sennr '出错:'lt_return-message '/'into l_msg.
                status = 'E'.
                loop at lt_return.


                  concatenate message '出错:'lt_return-message '/'into message.


                endloop .



*              CONCATENATE message '出错:'lt_return-message '/'INTO message.
              else.
                call function 'BAPI_TRANSACTION_COMMIT'
                  exporting
                    wait = 'X'.
                l_belnr = lv_obj_key+0(10).
                l_bukrs = lv_obj_key+10(4).
                l_gjahr = lv_obj_key+14(4).
                do 20 times.
                  select single * from bkpf where bukrs = l_bukrs
                                              and belnr = l_belnr
                                              and gjahr = l_gjahr.
                  if sy-subrc <> 0.
                    wait up to '0.5' seconds.
                  else.
                    lv_belnr = lv_obj_key+0(10).
                    exit.
                  endif.
                enddo.
                if lv_belnr is initial.
*        concatenate l_msg '处罚通报号:'gw_alv-sennr '出错:数据库更新失败/'into l_msg.
                  status = 'E'.
                  concatenate message '数据库更新失败' into message.
                else.
                  status = 'S'.
                  concatenate message '会计凭证产生成功,凭证编号:' lv_belnr into message.
                endif.
              endif.

              " 日志
              loop at gt_data into gw_data where zlcbh = lt_docheader-ref_doc_no  .
                clear:gw_ztfi015.
                gw_ztfi015-zlcbh = gw_data-zlcbh.
                gw_ztfi015-znumb = gw_data-znumb.
                gw_ztfi015-kunnr = gw_data-kunnr.
                gw_ztfi015-vkbur = gw_data-vkbur.
                gw_ztfi015-zhkje = gw_data-zhkje.
                gw_ztfi015-hkont = gw_data-hkont.
                gw_ztfi015-zfkrq = gw_data-zfkrq .
                gw_ztfi015-zlshjd = gw_data-zlshjd.
                gw_ztfi015-belnr = lv_belnr.
                gw_ztfi015-bukrs = lt_docheader-comp_code.
                gw_ztfi015-zcdte = sy-datum.
                gw_ztfi015-zcime = sy-uzeit.
                gw_ztfi015-status  = status.
                gw_ztfi015-message = message.
                append gw_ztfi015 to gt_ztfi015 .
              endloop.
              modify ztfi015 from table gt_ztfi015[].
              if sy-subrc = 0.
                commit work.
              else.
                rollback work.
              endif.

              clear:lt_accountgl[],lt_amount[],lt_acccven[],lt_docheader[],gt_ztfi015[],l_line,lv_belnr,message,gt_extension2[].
            endat.
          endif.
          clear: lw_ztfi015.
        endloop.

      endif.


      if  gt_data_id[]  is not initial.   " 独资办凭证数据处理


        clear:lt_acccven,lt_accountgl,lt_amount ,l_line.
        sort gt_data_id  by zlcbh.
        loop at gt_data_id into gw_data_id.

*          item_num = item_num + 1.

          if gw_data_id-zlshjd = '独资办审核' .

            select * into corresponding fields of lw_ztfi015 from ztfi015
         where zlcbh = gw_data_id-zlcbh
            and znumb = gw_data_id-znumb .
            endselect.

            if lw_ztfi015 is initial or  lw_ztfi015-belnr is not initial.

              if lt_docheader[] is initial.

                lt_docheader-username = gv_uname.  "用户
                lt_docheader-header_txt = '商家回款'.         "
                lt_docheader-comp_code = gw_data_id-vkbur. "公司代码
                lt_docheader-doc_date = sy-datum."凭证日期
                lt_docheader-pstng_date = sy-datum."过账日期
                lt_docheader-doc_type = 'ZB'.
                lt_docheader-ref_doc_no = gw_data_id-zlcbh.
                append lt_docheader.

              endif.

              l_line  = l_line + 1.

              "行项目一
              lt_accountgl-itemno_acc =  l_line.
              lt_accountgl-gl_account =  gw_data_id-hkont.
              " CONCATENATE 'Q' WA_SEL-BUKRS INTO gt_accountgl-PROFIT_CTR.
              concatenate gw_data_id-zfkrq+4(2) '' gw_data_id-zfkrq+6(2) ''  gw_data_id-zhkyt gw_data_id-zlcbh into  lt_accountgl-item_text .
*            lt_accountgl-item_text  = ''."gw_alv-sgtxt. "文本
              append lt_accountgl.
              clear:lt_accountgl.
              lt_amount-itemno_acc  = l_line."  '0000000001'.
              lt_amount-currency =    'RMB'.
              lt_amount-amt_doccur  = gw_data_id-zhkje. "处罚金额
              append lt_amount.
              clear:lt_amount.

              if  gw_data_id-hkont+0(4)   = '1002'.

                wa_zexten-posnr = l_line. "凭证行项目
                wa_zexten-rstgr = '101'. "原因代码
*                wa_zexten-bschl = '40'.
                gt_extension2-structure  = 'ZEXTEN1'.
                gt_extension2-valuepart1 = wa_zexten.
                append gt_extension2.
                clear: gt_extension2.
*                lv_flag = 'X'.
              endif.



*          APPEND gt_accountgl.
              "行项目二
              l_line  = l_line + 1.

              "APPEND ACCOUNTPAYABLE:(针对客户)'
              lt_acccven-itemno_acc  =  l_line.
              lt_acccven-customer = gw_data_id-kunnr.
              lt_acccven-comp_code =  gw_data_id-vkbur.
              lt_acccven-c_ctr_area =  gw_data_id-vkbur.
              concatenate gw_data_id-zfkrq+4(2) '月' gw_data_id-zfkrq+6(2) '日' gw_data_id-zhkyt gw_data_id-zlcbh into  lt_acccven-item_text .
*            lt_acccven-item_text  = ''."gw_alv-sgtxt."处罚原因

              append lt_acccven.
              clear:lt_acccven.
              lt_amount-itemno_acc  = l_line."  '0000000002'.
              lt_amount-currency =    'RMB'.
              lt_amount-amt_doccur  = gw_data_id-zhkje * -1 .
              append lt_amount.
              clear:lt_amount.

*              IF  lv_flag = 'X'.
*                wa_zexten-posnr = l_line. "凭证行项目
*                wa_zexten-bschl = '11'.
*                gt_extension2-structure  = 'ZEXTEN'.
*                gt_extension2-valuepart1 = wa_zexten.
*                APPEND gt_extension2.
*                CLEAR: gt_extension2.
*              ENDIF.

*            IF item_num >= znum .

              at end of zlcbh .

                call function 'BAPI_ACC_DOCUMENT_POST'
                  exporting
                    documentheader    = lt_docheader
                  importing
                    obj_key           = lv_obj_key
                  tables
                    accountgl         = lt_accountgl
                    accountreceivable = lt_acccven
                    currencyamount    = lt_amount
                    return            = lt_return
                    extension2        = gt_extension2
                  exceptions
                    others            = 1.
                read table lt_return with key type = 'E'.
                if sy-subrc = 0.
                  call function 'BAPI_TRANSACTION_ROLLBACK'.
*      concatenate l_msg '处罚通报号:'gw_alv-sennr '出错:'lt_return-message '/'into l_msg.
                  status = 'E'.
                  loop at lt_return.

                    concatenate message '出错:'lt_return-message '/'into message.

                  endloop .
*                CONCATENATE message '出错:'lt_return-message '/'INTO message.
                else.
                  call function 'BAPI_TRANSACTION_COMMIT'
                    exporting
                      wait = 'X'.
                  l_belnr = lv_obj_key+0(10).
                  l_bukrs = lv_obj_key+10(4).
                  l_gjahr = lv_obj_key+14(4).
                  do 20 times.
                    select single * from bkpf where bukrs = l_bukrs
                                                and belnr = l_belnr
                                                and gjahr = l_gjahr.
                    if sy-subrc <> 0.
                      wait up to '0.5' seconds.
                    else.
                      lv_belnr = lv_obj_key+0(10).
                      exit.
                    endif.
                  enddo.
                  if lv_belnr is initial.
*        concatenate l_msg '处罚通报号:'gw_alv-sennr '出错:数据库更新失败/'into l_msg.
                    status = 'E'.
                    concatenate message '数据库更新失败' into message.
                  else.
                    status = 'S'.
                    concatenate message '会计凭证产生成功,凭证编号:' lv_belnr into message.
                  endif.
                endif.

                " 日志
                loop at gt_data_id into gw_data_id where zlcbh =   lt_docheader-ref_doc_no.
                  clear:gw_ztfi015.
                  gw_ztfi015-zlcbh = gw_data_id-zlcbh.
                  gw_ztfi015-znumb = gw_data_id-znumb.
                  gw_ztfi015-kunnr = gw_data_id-kunnr.
                  gw_ztfi015-vkbur = gw_data_id-vkbur.
                  gw_ztfi015-zhkje = gw_data_id-zhkje.
                  gw_ztfi015-hkont = gw_data_id-hkont.
                  gw_ztfi015-zfkrq = gw_data_id-zfkrq .
                  gw_ztfi015-zlshjd = gw_data_id-zlshjd.
                  gw_ztfi015-belnr = lv_belnr.
                  gw_ztfi015-bukrs = lt_docheader-comp_code.
                  gw_ztfi015-zcdte = sy-datum.
                  gw_ztfi015-zcime = sy-uzeit.
                  gw_ztfi015-status  = status.
                  gw_ztfi015-message = message.
                  append gw_ztfi015 to gt_ztfi015 .
                endloop.
                modify ztfi015 from table gt_ztfi015[].
                if sy-subrc = 0.
                  commit work.
                else.
                  rollback work.
                endif.


                clear:lt_accountgl[],lt_amount[],lt_acccven[] ,gt_ztfi015[],lt_docheader[],l_line,lv_belnr,message,gt_extension2[].
              endat.
            endif.
            clear:lw_ztfi015.



          elseif gw_data_id-zlshjd = '总公司审核' .

            select * into corresponding fields of lw_ztfi015 from ztfi015
      where zlcbh = gw_data_id-zlcbh
         and znumb = gw_data_id-znumb .
            endselect.

            if lw_ztfi015 is initial or  lw_ztfi015-belnr is not initial.

              if lt_docheader[] is initial.

                lt_docheader-username = gv_uname.  "用户
                lt_docheader-header_txt = '商家回款'.         "
                lt_docheader-comp_code = '6800'. "公司代码
                lt_docheader-doc_date = sy-datum."凭证日期
                lt_docheader-pstng_date = sy-datum."过账日期
                lt_docheader-doc_type = 'ZB'.
                lt_docheader-ref_doc_no = gw_data_id-zlcbh.
                append lt_docheader.

              endif.

              l_line =   l_line + 1.
              "行项目一
              lt_accountgl-itemno_acc =  l_line.
              lt_accountgl-gl_account =  gw_data_id-hkont.
              " CONCATENATE 'Q' WA_SEL-BUKRS INTO gt_accountgl-PROFIT_CTR.
              concatenate gw_data_id-zfkrq+4(2) '月' gw_data_id-zfkrq+6(2) '日' gw_data_id-zhkyt gw_data_id-zlcbh into  lt_accountgl-item_text .
*            lt_accountgl-item_text  = ''."gw_alv-sgtxt. "文本

              append lt_accountgl.
              clear:lt_accountgl.
              lt_amount-itemno_acc  = l_line."  '0000000001'.
              lt_amount-currency =    'RMB'.
              lt_amount-amt_doccur  = gw_data_id-zhkje. "处罚金额
              append lt_amount.
              clear:lt_amount.
                if  gw_data_id-hkont+0(4)   = '1002'.
                wa_zexten-posnr = l_line. "凭证行项目
                wa_zexten-rstgr = '101'. "原因代码
                gt_extension2-structure  = 'ZEXTEN1'.
                gt_extension2-valuepart1 = wa_zexten.
                append gt_extension2.
                clear: gt_extension2.
              endif.


              .
*          APPEND gt_accountgl.
              "行项目二
              l_line =   l_line + 1.

              "APPEND ACCOUNTPAYABLE:(针对客户)'
              lt_acccven-itemno_acc  =  l_line.



              if gw_data_id-vkbur =  '3007'.

                lt_acccven-customer = '0001002856'.
              elseif gw_data_id-vkbur =  '3009'.
                lt_acccven-customer = '0001002873'.

              elseif gw_data_id-vkbur =  '3011'.
                lt_acccven-customer = '0001001699'.

              elseif gw_data_id-vkbur =  '3012'.
                lt_acccven-customer = '0001001700'.

              endif.

              lt_acccven-comp_code =  '6800'.
              lt_acccven-c_ctr_area =  '6800'.
              concatenate gw_data_id-zfkrq+4(2) '' gw_data_id-zfkrq+6(2) ''  gw_data_id-zhkyt gw_data_id-zlcbh into  lt_acccven-item_text .
*            lt_acccven-item_text  = ''."gw_alv-sgtxt."处罚原因

              append lt_acccven.
              clear:lt_acccven.
              lt_amount-itemno_acc  = l_line."  '0000000002'.
              lt_amount-currency =    'RMB'.
              lt_amount-amt_doccur  = gw_data_id-zhkje * -1 .
              append lt_amount.
              clear:lt_amount.


*            IF item_num >= znum .
              at end of zlcbh .

                call function 'BAPI_ACC_DOCUMENT_POST'
                  exporting
                    documentheader    = lt_docheader
                  importing
                    obj_key           = lv_obj_key
                  tables
                    accountgl         = lt_accountgl
                    accountreceivable = lt_acccven
                    currencyamount    = lt_amount
                    return            = lt_return
                    extension2        = gt_extension2
                  exceptions
                    others            = 1.
                read table lt_return with key type = 'E'.
                if sy-subrc = 0.
                  call function 'BAPI_TRANSACTION_ROLLBACK'.
*      concatenate l_msg '处罚通报号:'gw_alv-sennr '出错:'lt_return-message '/'into l_msg.
                  status = 'E'.
                  loop at lt_return.

                    concatenate message '出错:'lt_return-message '/'into message.

                  endloop .
*                CONCATENATE message '出错:'lt_return-message '/'INTO message.
                else.
                  call function 'BAPI_TRANSACTION_COMMIT'
                    exporting
                      wait = 'X'.
                  l_belnr = lv_obj_key+0(10).
                  l_bukrs = lv_obj_key+10(4).
                  l_gjahr = lv_obj_key+14(4).
                  do 20 times.
                    select single * from bkpf where bukrs = l_bukrs
                                                and belnr = l_belnr
                                                and gjahr = l_gjahr.
                    if sy-subrc <> 0.
                      wait up to '0.5' seconds.
                    else.
                      lv_belnr = lv_obj_key+0(10).
                      exit.
                    endif.
                  enddo.
                  if lv_belnr is initial.
*        concatenate l_msg '处罚通报号:'gw_alv-sennr '出错:数据库更新失败/'into l_msg.
                    status = 'E'.
                    concatenate message '数据库更新失败' into message.
                  else.
                    status = 'S'.
                    concatenate message '会计凭证产生成功,凭证编号:' lv_belnr into message.
                  endif.
                endif.

                " 日志
                loop at gt_data_id into gw_data_id where zlcbh =   lt_docheader-ref_doc_no..
                  clear:gw_ztfi015.
                  gw_ztfi015-zlcbh = gw_data_id-zlcbh.
                  gw_ztfi015-znumb = gw_data_id-znumb.
                  gw_ztfi015-kunnr = gw_data_id-kunnr.
                  gw_ztfi015-vkbur = gw_data_id-vkbur.
                  gw_ztfi015-zhkje = gw_data_id-zhkje.
                  gw_ztfi015-hkont = gw_data_id-hkont.
                  gw_ztfi015-zfkrq = gw_data_id-zfkrq .
                  gw_ztfi015-zlshjd = gw_data_id-zlshjd.
                  gw_ztfi015-belnr = lv_belnr.
                  gw_ztfi015-bukrs = lt_docheader-comp_code.
                  gw_ztfi015-zcdte = sy-datum.
                  gw_ztfi015-zcime = sy-uzeit.
                  gw_ztfi015-status  = status.
                  gw_ztfi015-message = message.
                  append gw_ztfi015 to gt_ztfi015 .
                endloop.
                modify ztfi015 from table gt_ztfi015[].
                if sy-subrc = 0.
                  commit work.
                else.
                  rollback work.
                endif.


                clear:lt_accountgl[],lt_amount[],lt_acccven[] ,lt_docheader[],l_line,lv_belnr,message,gt_extension2[].
              endat.
            endif.


            if lw_ztfi015 is initial or  lw_ztfi015-belnr1 is not initial.
              if lt_docheader1[] is initial.

                lt_docheader1-username = gv_uname.  "用户
                lt_docheader1-header_txt = '商家回款'.         "
                lt_docheader1-comp_code = gw_data_id-vkbur. "公司代码
                lt_docheader1-doc_date = sy-datum."凭证日期
                lt_docheader1-pstng_date = sy-datum."过账日期
                lt_docheader1-doc_type = 'ZB'.
                lt_docheader1-ref_doc_no = gw_data_id-zlcbh.
                append lt_docheader1.

              endif.

              l_line1 = l_line1 + 1.


              "行项目一

              "APPEND ACCOUNTPAYABLE:(针对供应商)'
              lt_acccven2-itemno_acc  =  l_line1.
              lt_acccven2-vendor_no =   '0008800019'.
*            lt_acccven2-comp_code =  gw_data_id-vkbur.
*            lt_acccven2-BUS_AREA =  gw_data_id-vkbur.
              concatenate gw_data_id-zfkrq+4(2) '月' gw_data_id-zfkrq+6(2) '日'  gw_data_id-zhkyt gw_data_id-zlcbh into  lt_acccven2-item_text .
*            lt_acccven2-item_text  = ''."gw_alv-sgtxt."处罚原因

              append lt_acccven2.
              clear:lt_acccven1.
              lt_amount1-itemno_acc  = l_line1."  '0000000002'.
              lt_amount1-currency =    'RMB'.
              lt_amount1-amt_doccur  = gw_data_id-zhkje  .
              append lt_amount1.
              clear:lt_amount1.
             if  gw_data_id-hkont+0(4)   = '1002'.
                wa_zexten-posnr = l_line. "凭证行项目
                wa_zexten-rstgr = '101'. "原因代码
                gt_extension2-structure  = 'ZEXTEN1'.
                gt_extension2-valuepart1 = wa_zexten.
                append gt_extension2.
                clear: gt_extension2.
              endif.



              "行项目二"APPEND ACCOUNTPAYABLE:(针对客户)'
              l_line1 = l_line1 + 1.
              lt_acccven1-itemno_acc  =  l_line1.
              lt_acccven1-customer = gw_data_id-kunnr .

              concatenate gw_data-zfkrq+4(2) '月' gw_data-zfkrq+6(2) '日'  gw_data_id-zhkyt gw_data_id-zlcbh into  lt_acccven1-item_text .
*            lt_acccven1-item_text  = ''."gw_alv-sgtxt."处罚原因

              append lt_acccven1.
              clear:lt_acccven1.
              lt_amount1-itemno_acc  = l_line1."  '0000000001'.
              lt_amount1-currency =    'RMB'.
              lt_amount1-amt_doccur  = gw_data_id-zhkje * -1 .
              append lt_amount1.
              clear:lt_amount1.



*            IF item_num >= znum .
              at end of zlcbh .
                clear:lv_obj_key,lt_acccven,lt_return ,message,lv_belnr.
                call function 'BAPI_ACC_DOCUMENT_POST'
                  exporting
                    documentheader    = lt_docheader1
                  importing
                    obj_key           = lv_obj_key
                  tables
*              accountgl         = lt_accountgl1
                    accountreceivable = lt_acccven1    "  供应商
                    accountpayable = lt_acccven2     " 客户
                    currencyamount    = lt_amount1
                    return            = lt_return
                    extension2        = gt_extension2
                  exceptions
                    others            = 1.
                read table lt_return with key type = 'E'.
                if sy-subrc = 0.
                  call function 'BAPI_TRANSACTION_ROLLBACK'.
*      concatenate l_msg '处罚通报号:'gw_alv-sennr '出错:'lt_return-message '/'into l_msg.
                  status = 'E'.
                  loop at lt_return.

                    concatenate message '出错:'lt_return-message '/'into message.

                  endloop .
*                CONCATENATE message '出错:'lt_return-message '/'INTO message.
                else.
                  call function 'BAPI_TRANSACTION_COMMIT'
                    exporting
                      wait = 'X'.
                  l_belnr = lv_obj_key+0(10).
                  l_bukrs = lv_obj_key+10(4).
                  l_gjahr = lv_obj_key+14(4).
                  do 20 times.
                    select single * from bkpf where bukrs = l_bukrs
                                                and belnr = l_belnr
                                                and gjahr = l_gjahr.
                    if sy-subrc <> 0.
                      wait up to '0.5' seconds.
                    else.
                      lv_belnr = lv_obj_key+0(10).
                      exit.
                    endif.
                  enddo.
                  if lv_belnr is initial.
*        concatenate l_msg '处罚通报号:'gw_alv-sennr '出错:数据库更新失败/'into l_msg.
                    status = 'E'.
                    concatenate message '数据库更新失败' into message.
                  else.
                    status = 'S'.
                    concatenate message '会计凭证产生成功,凭证编号:' lv_belnr into message.
                  endif.
                endif.


                loop at gt_ztfi015 into gw_ztfi015 where zlcbh =   lt_docheader1-ref_doc_no.



                  gw_ztfi015-belnr1 = lv_belnr.
                  gw_ztfi015-bukrs1 = lt_docheader1-comp_code.


                  modify gt_ztfi015 from gw_ztfi015  transporting  belnr1 bukrs1.

                endloop.
                modify ztfi015 from table gt_ztfi015[].
                if sy-subrc = 0.
                  commit work.
                else.
                  rollback work.
                endif.

                clear:lt_accountgl1[],lt_amount1[],lt_acccven1[],gt_ztfi015[],l_line1,lv_belnr,message,gt_extension2[].
              endat.
            endif.
          endif.

          clear:lw_ztfi015.
        endloop.

      endif.

      clear:status,message,lt_return[].


    catch cx_root into lo_exception.
      status = 'E'.
      message =  lo_exception->get_text( ).
  endtry.


endfunction.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

BAPI_ACC_DOCUMENT_POST用法 的相关文章

随机推荐

  • 软考-软件设计师-数据库1-体系结构-模型-关系代数-规范化

    1 数据库技术基础 2 基本概念 数据库系统DBS 是一个采用了数据库技术 有组织地 动态地存储大量有关数据 方便多用户访问的计算机系统 其由下面四个部分组成 数据库 统一管理 长期存储在计算机内的 有组织的相关数据的集合 硬件 构成计算机
  • Java文件上传【通用】

    Java文件上传 主要是针对于网页来说 一般是通过input的file类型上传文件流到后台 再通过后台处理将文件移动到指定位置达到上传的目的 这里贴代码时 主要是以springboot框架为例 但是是通用的 1 表单提交上传
  • django从1.7升级到1.9后 提示:RemovedInDjango110Warning

    Django项目 把django从1 7升级到1 9后 大量报错 需要做如下修改 1 修改urls py 在django1 9里 urls的配置不再支持字符串型的路由 需要先import 然后直接引用 更加清晰 比如 urlpatterns
  • elk笔记5.2--logstash使用

    elk笔记5 2 logstash使用 1 介绍 2 使用案例 2 1 通过type隔离多个索引 2 2 通过pipeline隔离多个索引 3 注意事项 4 说明 1 介绍 logstash 资源充足的情况下 每个logstash示例采集
  • PromQL的简单使用

    PromQL的简单使用 一 背景 二 PromQL的数据类型 三 字面量 1 字符串字面量 2 浮点数字面量 四 时间序列选择器 1 即时向量选择器 1 组成部分 2 指标名称和匹配器的组合 3 匹配器 2 区间向量选择器 1 时间格式 3
  • 流媒体压力测试工具—推拉流

    目录 前言 介绍 St load 安装篇 推流篇 拉流篇 前言 流媒体压力测试是评估流媒体系统性能和稳定性的重要环节 它可以模拟大量用户同时推送和拉取流媒体数据 以验证系统在高负载情况下的表现 为了进行流媒体压力测试 我们可以使用推拉流工具
  • DN值、辐射率、反射率等

    数字量化值 Digital Number DN 像素值的通用术语是数字量化值或DN值 它通常被用来描述还没有校准到具有意义单位的像素值 如果你只是想看一个图像 和不打算解释像素值的物理意义 那么就可以以DN值的方式来保存 辐射率 Radia
  • 极智AI

    欢迎关注我的公众号 极智视界 获取我的更多笔记分享 大家好 我是极智视界 本文讲解一下 C 手写 softmax 激活函数 在多分类任务中 最后通常使用 softmax 函数作为网络输出层的激活函数 softmax 函数可以对输出值作归一化
  • 互联网络安全、信息安全、计算机网络安全、信息保障有什么区别?

    据CNBC报道 由于黑客 安全漏洞和恶意软件攻击继续成为行业媒体报道的头条新闻 网络犯罪已成为一种全球 流行病 去年对全球组织和人员造成的损失约6000亿美元 因此 打击此类活动已成为一项有利可图且有益的事业 这并不奇怪 所以 如果你正在考
  • 【力扣】1337.矩阵中战斗力最弱的k行

    给你一个大小为 m n 的矩阵 mat 矩阵由若干军人和平民组成 分别用 1 和 0 表示 请你返回矩阵中战斗力最弱的 k 行的索引 按从最弱到最强排序 如果第 i 行的军人数量少于第 j 行 或者两行军人数量相同但 i 小于 j 那么我们
  • Spring中ApplicationContext加载机制

    加载器目前有两种选择 ContextLoaderListener和ContextLoaderServlet 只是一个是基于Servlet2 3版本中新引入的Listener接口实现 而另一个基于Servlet接口实现 开发中可根据目标Web
  • 【网站汇总】一些OJ平台

    目录 前言 一 HDU孵化器 二 HDU OJ 三 PTA 四 洛谷 五 力扣 LeetCode 前言 以下是一些OJ平台 一 HDU孵化器 链接 http hdufhq cn 8888 二 HDU OJ 链接 http code hdu
  • Linux下删除正在写入的文件会发生什么?

    一 成功 删除 了一个正在写入的文件 某日 我启动了一个进程 向一个文件a txt中写入内容 但不小心在另一个窗口用命令rm f a txt把它删除了 我以为这应该会触发一个警告 比如 不能删除一个打开的正在写入的文件 之类的 结果命令干脆
  • WinServer 2012 AD 组策略 用户发布软件部署

    本例演示安装 Notepad 这款软件 因为域中发布软件只支持 msi 格式 所以要把 exe 转成 msi 格式 可以用这个软件 https www advancedinstaller com 1 转换格式 1 选择 MSI from E
  • 数学建模 - 数学规划

    来自清风的数学建模课程 主要是用于自己复习看 所以截图较多 数学规划 概述 分类 线性规划 非线性规划 整数规划 0 1规划 线性规划 对于求解最大值要让目标函数的系数 max z min z 线性规划公式 x fval linprog c
  • 第十四届蓝桥杯模拟赛(第一期)——C语言版

    1 二进制位数 问题描述 十进制整数 2 在十进制中是 1 位数 在二进制中对应 10 是 2 位数 十进制整数 22 在十进制中是 2 位数 在二进制中对应 10110 是 5 位数 请问十进制整数 2022 在二进制中是几位数 incl
  • PHP导出excel文件的几种方式

    先说说动态生成的内容当作文件来下载的方法 1 通过把Content Type设置为application octet stream 可以把动态生成的内容当作文件来下载 content type内容设置可以参看 http www ostool
  • 父类对象的属性直接赋值给子类对象(使用copyProperties中的方法copyProperties)

    BeanUtils copyProperties 是 Apache Commons BeanUtils 包中提供的一个方法 用于将一个 JavaBean 对象的属性值赋值到另一个 JavaBean 对象中 该方法可以简化 JavaBean
  • springmvc @ResponseBody参数解析核心代码分析 -8

    org springframework web servlet mvc method annotation RequestResponseBodyMethodProcessor supportsParameter 只要参数上有 Reques
  • BAPI_ACC_DOCUMENT_POST用法

    文章目录 1 Overall 2 Code 1 Overall The blog will demostrate how to use BAPI ACC DOCUMENT POST We use enhancement for it 2 C