BAPI_ACC_DOCUMENT_POST用法

文章目录

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.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值