加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

会计凭证过账demo

(2018-12-09 17:55:29)
标签:

会计凭证

增强

票据

bapi_acc_document_po

sap

杂谈

分类: BAPI
结构定义:ZS_POST_HEADER

BUKRS

BUKRS

CHAR

4

0

公司代

NUMPG

J_1ANOPG

NUMC

3

0

发票的页数

BLART

BLART

CHAR

2

0

凭证类

BLDAT

BLDAT

DATS

8

0

凭证中的凭证日

BUDAT

BUDAT

DATS

8

0

凭证中的过帐日

BKTXT

BKTXT

CHAR

25

0

凭证抬头文

XBLNR

XBLNR

CHAR

16

0

参考凭证编号

WAERS

WAERS

CUKY

5

0

货币码

KURSF

KURSF

DEC

9

5



结构定义:ZS_post_item

SHKZG

SHKZG

CHAR

1

0

借方/贷方标识

KOART

KOART

CHAR

1

0

科目类型

BSCHL

BSCHL

CHAR

2

0

记帐代码

HKONT

HKONT

CHAR

10

0

总分类帐帐目

KUNNR

KUNNR

CHAR

10

0

客户编号

LIFNR

LIFNR

CHAR

10

0

供应商或债权人的帐号

UMSKZ

UMSKZ

CHAR

1

0

特殊总帐标识

KOSTL

KOSTL

CHAR

10

0

成本中心

PRCTR

PRCTR

CHAR

10

0

利润中心

DMBTR

DMBTR

CURR

13

2

按本位币计的金额

ZUONR

DZUONR

CHAR

18

0

分配编号

SGTXT

SGTXT

CHAR

50

0

项目文本

RSTGR

RSTGR

CHAR

3

0

现金流量事务代码

ZFBDT

ZFBDT

DATS

8

0

到期日

WDATE

WDATE

DATS

8

0

汇票签发日

WBANK

WBANK

CHAR

60

0

票据号

WLZBP

WLZBP

CHAR

60

0

出票行

XNEGP

XNEGP

CHAR

1

0

标识: 反记帐

KKBER

KKBER

CHAR

4

0

信贷控制范围

ZLSCH

SCHZW_BSEG

CHAR

1

0

付款方式


增强结构定义 zs_post_exten

POSNR

POSNR_ACC

NUMC

10

0

会计凭证行项目编号

BSCHL

BSCHL

CHAR

2

0

记帐代码

SHKZG

SHKZG

CHAR

1

0

借方/贷方标识

NUMPG

J_1ANOPG

NUMC

3

0

发票的页数

RSTGR

RSTGR

CHAR

3

0

现金流量事务代码

WDATE

WDATE

DATS

8

0

汇票签发日

WBANK

WBANK

CHAR

60

0

票据号

WLZBP

WLZBP

CHAR

60

0

出票行

XNEGP

XNEGP

CHAR

1

0

标识: 反记帐

KKBER

KKBER

CHAR

4

0

信贷控制范围

ZLSCH

SCHZW_BSEG

CHAR

1

0

付款方式

WNAME

WNAME

 

 

 

汇票受票人的名字

WBZOG

WBZOG

 

 

 

汇票出票人


增强1:

BADI  ACC_DOCUMENT里赋值
会计凭证过账demo

会计凭证过账demo

这里建议加上增强结构名称的校验,防止影响别人

而且直接这么move 可能会出现空值覆盖原来的值的情况,建议判断非空再复制

或者参考一个工具代码
会计凭证过账demo
FUNCTION zfm_move_value.
*"----------------------------------------------------------------------
*"*"Local interface:
*"  IMPORTING
*"     VALUE(IS_INPUT)
*"     VALUE(IV_STRUCTURE)
*"     VALUE(CV_STRUCTURE)
*"  CHANGING
*"     VALUE(CS_INPUT) OPTIONAL
*"----------------------------------------------------------------------


  FIELD-SYMBOLS:
         TYPE any                                "从工作区结构
       TYPE any                                "到工作区结构
*
  DATA lt_idetails TYPE abap_compdescr_tab WITH HEADER LINE.
  DATA lr_ref_table_des TYPE REF TO cl_abap_structdescr.

  DATA ct_idetails TYPE abap_compdescr_tab WITH HEADER LINE.
  DATA cr_ref_table_des TYPE REF TO cl_abap_structdescr.


  lr_ref_table_des ?=
        cl_abap_typedescr=>describe_by_nameiv_structure ).

  CLEAR lt_idetails[].
  lt_idetails[] lr_ref_table_des->components[].

  cr_ref_table_des ?=
        cl_abap_typedescr=>describe_by_namecv_structure ).

  CLEAR ct_idetails[].
  ct_idetails[] cr_ref_table_des->components[].

  "循环判断结构每个字段
  LOOP AT lt_idetails.
    ASSIGN COMPONENT lt_idetails-name OF STRUCTURE is_input TO  .
    CHECK sy-subrc .

    READ TABLE ct_idetails WITH KEY name lt_idetails-name.
    CHECK sy-subrc 0.
    ASSIGN COMPONENT ct_idetails-name OF STRUCTURE cs_input TO .
    CHECK sy-subrc 0.

    IF  IS NOT INITIAL.
        .
    ENDIF.
  ENDLOOP.


ENDFUNCTION.

增强2 隐士增强

增强位置1: FI_DOCUMENT_CHECK

一进来,先检查是否是W类型特殊总账(用get函数获取,set操作在 调用bapi的时候 赋值)
如果是,把char_w 改为U

 

会计凭证过账demo

在函数最后,改回去
会计凭证过账demo

增强位置2:LFACIF5D 
form最后的地方
把exten 数据传过来,传给bsed数据

 这里特殊声明下:

因为这个demo只涉及特殊总账类型为W的,其他特殊总账不考虑BSED,

这个得根据所在项目业务来确定,如果除了W还有 S或者其他等类型的,再多加个判断即可。

会计凭证过账demo


FUNCTION zfm_ac_post .
*"----------------------------------------------------------------------
*"*"Local interface:
*"  IMPORTING
*"     REFERENCE(IS_HEADER) TYPE  ZS_POST_HEADER
*"  EXPORTING
*"     VALUE(EV_BELNR) TYPE  BELNR_D
*"     VALUE(EV_MSG) TYPE  STRING
*"  TABLES
*"      IT_ITEM STRUCTURE  ZS_POST_ITEM
*"      RETURN STRUCTURE  BAPIRET2
*"----------------------------------------------------------------------

    DATAgs_bkpf TYPE bapiache09,
         gt_account TYPE TABLE OF bapiacgl09,"总帐
         gs_account TYPE bapiacgl09,
         gt_customer TYPE TABLE OF bapiacar09,"客户
         gs_customer TYPE  bapiacar09,
         gt_vendor TYPE TABLE OF bapiacap09,"供应商
         gs_vendor TYPE bapiacap09,
         gt_currency TYPE TABLE OF bapiaccr09,"货币
         gs_currency TYPE bapiaccr09,
         gt_etx TYPE TABLE OF bapiparex,"扩展结构
         gs_etx TYPE  bapiparex,
         gt_etxend TYPE TABLE OF zs_post_exten,"扩展结构
         gs_etxend TYPE zs_post_exten,
         gt_return TYPE TABLE OF bapiret2  WITH HEADER LINE.

  DATAl_itemno TYPE posnr_acc."行项目编号
  DATAlv_number1 TYPE i.
  DATAlv_flag_w TYPE flag     "W 类型特殊总账


  DATA:ls_item LIKE LINE OF it_item.

*header
  CLEAR gs_bkpf.
  gs_bkpf-comp_code  is_header-bukrs.
  gs_bkpf-doc_type   is_header-blart.
  gs_bkpf-doc_date   is_header-bldat.
  gs_bkpf-pstng_date is_header-budat.
  gs_bkpf-header_txt is_header-bktxt.
  gs_bkpf-ref_doc_no is_header-xblnr.
  gs_bkpf-username   sy-uname.

*item
  REFRESH:gt_account,gt_customer,gt_vendor,gt_currency,gt_etxend,gt_etx,gt_return.
  CLEARgs_account,gs_customer,gs_vendor,gs_currency,gs_etxend,gs_etx.

  CLEAR ls_item.

  l_itemno '0000000000'          "行项目编号
  LOOP AT it_item INTO ls_item.


**    gs_bkpf-neg_postng ls_item-xnegp." header 的,但是为啥到了item

    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        input  ls_item-kunnr
      IMPORTING
        output ls_item-kunnr.
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        input  ls_item-lifnr
      IMPORTING
        output ls_item-lifnr.

*& 类型特殊处理
    IF ls_item-umskz 'W'.
      lv_flag_w 'X'.
    ENDIF.


    l_itemno l_itemno   '0000000010'          "行项目编号依次递增0000000010


    IF ls_item-koart 'K'.
      "借方行项目

      "借方供应商行项目
      CLEAR gs_vendor.
      gs_vendor-itemno_acc l_itemno.

      IF ls_item-hkont IS INITIAL.
        SELECT SINGLE akont FROM lfb1 INTO  ls_item-hkont
          WHERE lifnr  ls_item-lifnr AND
                bukrs is_header-bukrs.

      ENDIF.

      gs_vendor-gl_account ls_item-hkont.
      gs_vendor-vendor_no  ls_item-lifnr.
      gs_vendor-sp_gl_ind  ls_item-umskz.
      gs_vendor-profit_ctr ls_item-prctr.
      gs_vendor-alloc_nmbr ls_item-zuonr.
      gs_vendor-item_text  ls_item-sgtxt.
      gs_vendor-pymt_meth  ls_item-zlsch.
      APPEND gs_vendor TO gt_vendor.

      "借方货币行项目
      CLEAR gs_currency.
      gs_currency-itemno_acc l_itemno.
      gs_currency-currency   is_header-waers.
      gs_currency-amt_doccur ls_item-dmbtr.
      IF ls_item-shkzg 'H'  .
        gs_currency-amt_doccur gs_currency-amt_doccur  -.
      ENDIF.
      gs_currency-exch_rate  is_header-kursf.
      APPEND gs_currency TO gt_currency.

      "借方扩展行项目
      "KOSTL成本中心
      "数量
      CLEAR gs_etxend.
      gs_etxend-posnr l_itemno.
      gs_etxend-bschl ls_item-bschl.
      gs_etxend-shkzg ls_item-shkzg.
      gs_etxend-xnegp ls_item-xnegp.反记账标志
      gs_etxend-rstgr ls_item-rstgr"现金流量事务代码
      gs_etxend-kkber ls_item-kkber." 信贷范围

      gs_etxend-numpg is_header-numpg.
      gs_etxend-wdate ls_item-wdate.
      gs_etxend-wbank ls_item-wbank.
      gs_etxend-wlzbp ls_item-wlzbp.
      gs_etxend-WNAME ls_item-WNAME.
      gs_etxend-WBZOG ls_item-WBZOG.
      gs_etxend-aufnr ls_item-aufnr"内部订单 
      APPEND gs_etxend TO gt_etxend.



    ELSEIF ls_item-koart 'D'.

      IF ls_item-hkont IS INITIAL.
        SELECT SINGLE akont FROM knb1 INTO  ls_item-hkont
          WHERE kunnr  ls_item-kunnr AND
                bukrs is_header-bukrs.

      ENDIF.

      CLEAR gs_customer.
      gs_customer-itemno_acc l_itemno.
      gs_customer-gl_account ls_item-hkont.
      gs_customer-customer   ls_item-kunnr.
      gs_customer-sp_gl_ind  ls_item-umskz.
      gs_customer-profit_ctr ls_item-prctr.
      gs_customer-alloc_nmbr ls_item-zuonr.
      gs_customer-item_text  ls_item-sgtxt.
      gs_customer-bline_date ls_item-zfbdt.
      gs_customer-pymt_meth  ls_item-zlsch.


      APPEND gs_customer TO gt_customer.
      "借方货币行项目
      CLEAR gs_currency.
      gs_currency-itemno_acc l_itemno.
      gs_currency-currency is_header-waers.
      gs_currency-amt_doccur ls_item-dmbtr.
      IF ls_item-shkzg 'H'  .
        gs_currency-amt_doccur gs_currency-amt_doccur  -.
      ENDIF.
      gs_currency-exch_rate is_header-kursf.


      APPEND gs_currency TO gt_currency.


      "借方扩展行项目
      "KOSTL成本中心
      "MATNR虚拟物料
      "数量
      CLEAR gs_etxend.
      gs_etxend-posnr l_itemno.
      gs_etxend-bschl ls_item-bschl.
      gs_etxend-shkzg ls_item-shkzg.
      gs_etxend-rstgr ls_item-rstgr."现金流量事务代码

      gs_etxend-numpg is_header-numpg.
      gs_etxend-wdate ls_item-wdate.
      gs_etxend-wbank ls_item-wbank.
      gs_etxend-wlzbp ls_item-wlzbp.
      gs_etxend-WNAME ls_item-WNAME.
      gs_etxend-WBZOG ls_item-WBZOG.


      gs_etxend-xnegp ls_item-xnegp.反记账标志
      gs_etxend-kkber ls_item-kkber.信贷范围
     gs_etxend-aufnr ls_item-aufnr"内部订单 
      APPEND gs_etxend TO gt_etxend.


    ELSEIF ls_item-koart 'S'.
      "一般总帐借方行项目

      CLEAR gs_account.
      gs_account-itemno_acc l_itemno.
      gs_account-gl_account ls_item-hkont.
      gs_account-customer ls_item-kunnr.
      "gs_account-SP_GL_IND ls_item-UMSKZ.
      gs_account-costcenter ls_item-kostl.
      gs_account-profit_ctr ls_item-prctr.
      gs_account-alloc_nmbr ls_item-zuonr.
      gs_account-item_text ls_item-sgtxt.
      gs_account-orderid   ls_item-aufnr."内部订单号


      APPEND gs_account TO gt_account.
      "借方货币行项目
      CLEAR gs_currency.
      gs_currency-itemno_acc l_itemno.
      gs_currency-currency is_header-waers.
      gs_currency-amt_doccur ls_item-dmbtr.
      IF ls_item-shkzg 'H'.
        gs_currency-amt_doccur gs_currency-amt_doccur -1.
      ENDIF.
      gs_currency-exch_rate is_header-kursf.
      APPEND gs_currency TO gt_currency.

      "借方扩展行项目
      "KOSTL成本中心
      "MATNR虚拟物料
      "数量
      CLEAR gs_etxend.
      gs_etxend-posnr l_itemno.
      gs_etxend-bschl ls_item-bschl.
      gs_etxend-shkzg ls_item-shkzg.
      gs_etxend-rstgr ls_item-rstgr.
      gs_etxend-numpg is_header-numpg.
      gs_etxend-xnegp ls_item-xnegp.反记账标志
      gs_etxend-kkber ls_item-kkber.信贷范围
      gs_etxend-zlsch ls_item-zlsch.付款方式

      gs_etxend-aufnr ls_item-aufnr"内部订单 
      APPEND gs_etxend TO gt_etxend.

                                                            "w33432
    ENDIF.

    CLEAR ls_item.
  ENDLOOP.


  CLEAR gt_return[].
  IF gt_vendor[] IS NOT INITIAL OR gt_customer[] IS NOT INITIAL OR gt_account[] IS NOT INITIAL AND gt_currency IS NOT INITIAL.
    "处理扩展项目
    IF gt_etxend IS NOT INITIAL.
      CLEAR gs_etxend.
      LOOP AT gt_etxend INTO gs_etxend.
        gs_etx-structure 'ZS_POST_EXTEN'.
        gs_etx-valuepart1 gs_etxend.
        APPEND gs_etx TO gt_etx.
        CLEAR gs_etxend.
      ENDLOOP.

    ENDIF.

    IF lv_flag_w 'X'.
      "针对W特殊处理
      CALL FUNCTION 'ZFM_AC_POST_W_SET'
        TABLES
          it_exten gt_etxend[].
    ENDIF.

    "创建凭证
    CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
      EXPORTING
        documentheader    gs_bkpf
      TABLES
        accountgl         gt_account
        accountreceivable gt_customer
        accountpayable    gt_vendor
        currencyamount    gt_currency
        return            gt_return
        extension2        gt_etx.

    CALL FUNCTION 'ZFM_AC_POST_W_CLEAR'
              
.

  ENDIF.


  return[] gt_return[].

  READ TABLE return WITH KEY type 'E'.

  IF sy-subrc <> 0.

    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        wait 'X'.

    READ TABLE return WITH KEY type 'S'
                                id   'RW'
                                number '605'."成功的话再赋值

    IF sy-subrc 0.
      ev_belnr return-message_v2(10).
    ENDIF.

  ELSE.
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
    CLEAR ev_msg.
    LOOP AT gt_return WHERE type 'E'.
      CONCATENATE ev_msg gt_return-message INTO ev_msg SEPARATED BY '|'.
    ENDLOOP.
  ENDIF.


ENDFUNCTION.



FUNCTION ZFM_AC_POST_W_SET .
*"--------------------------------------------------------------------
*"*"本地接口:
*"  TABLES
*"      IT_EXTEN STRUCTURE  ZS_POST_EXTEN
*"--------------------------------------------------------------------

gt_exten[] IT_EXTEN[].

gv_fec_flag 'X'.


ENDFUNCTION.


FUNCTION ZFM_AC_POST_W_GET .
*"----------------------------------------------------------------------
*"*"Local interface:
*"  EXPORTING
*"     REFERENCE(EV_FEC_FLAG) TYPE  FLAG
*"  TABLES
*"      ET_EXTEN STRUCTURE  ZS_POST_EXTEN OPTIONAL
*"----------------------------------------------------------------------

  et_exten[] gt_exten[].

  ev_fec_flag gv_fec_flag .


ENDFUNCTION.


FUNCTION zfm_ac_post_w_clear .
*"----------------------------------------------------------------------
*"*"Local interface:
*"----------------------------------------------------------------------

  CLEAR gt_exten[].

  CLEAR gv_fec_flag .


ENDFUNCTION.

会计凭证过账demo

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有