天天看點

會計憑證過賬demo_SAP劉夢_新浪部落格

結構定義:

ZS_POST_HEADER
BUKRS BUKRS CHAR 4 公司代碼
NUMPG J_1ANOPG NUMC 3 發票的頁數
BLART BLART CHAR 2 憑證類型
BLDAT BLDAT DATS 8 憑證中的憑證日期
BUDAT BUDAT DATS 8 憑證中的過帳日期
BKTXT BKTXT CHAR 25 憑證擡頭文本
XBLNR XBLNR CHAR 16 參考憑證編号
WAERS WAERS CUKY 5 貨币碼
KURSF KURSF DEC 9 5 匯率

結構定義:ZS_post_item

SHKZG SHKZG CHAR 1 借方/貸方辨別
KOART KOART CHAR 1 科目類型
BSCHL BSCHL CHAR 2 記帳代碼
HKONT HKONT CHAR 10 總分類帳帳目
KUNNR KUNNR CHAR 10 客戶編号
LIFNR LIFNR CHAR 10 供應商或債權人的帳号
UMSKZ UMSKZ CHAR 1 特殊總帳辨別
KOSTL KOSTL CHAR 10 成本中心
PRCTR PRCTR CHAR 10 利潤中心
DMBTR DMBTR CURR 13 2 按本位币計的金額
ZUONR DZUONR CHAR 18 配置設定編号
SGTXT SGTXT CHAR 50 項目文本
RSTGR RSTGR CHAR 3 現金流量事務代碼
ZFBDT ZFBDT DATS 8 到期日
WDATE WDATE DATS 8 彙票簽發日
WBANK WBANK CHAR 60 票據号
WLZBP WLZBP CHAR 60 出票行
XNEGP XNEGP CHAR 1 辨別: 反記帳
KKBER KKBER CHAR 4 信貸控制範圍
ZLSCH SCHZW_BSEG CHAR 1 付款方式

增強結構定義  zs_post_exten

POSNR POSNR_ACC NUMC 10 會計憑證行項目編号
BSCHL BSCHL CHAR 2 記帳代碼
SHKZG SHKZG CHAR 1 借方/貸方辨別
NUMPG J_1ANOPG NUMC 3 發票的頁數
RSTGR RSTGR CHAR 3 現金流量事務代碼
WDATE WDATE DATS 8 彙票簽發日
WBANK WBANK CHAR 60 票據号
WLZBP WLZBP CHAR 60 出票行
XNEGP XNEGP CHAR 1 辨別: 反記帳
KKBER KKBER CHAR 4 信貸控制範圍
ZLSCH SCHZW_BSEG CHAR 1 付款方式
WNAME WNAME 彙票受票人的名字
WBZOG WBZOG 彙票出票人

增強1:

BADI  ACC_DOCUMENT裡指派

會計憑證過賬demo_SAP劉夢_新浪部落格
會計憑證過賬demo_SAP劉夢_新浪部落格

這裡建議加上增強結構名稱的校驗,防止影響别人

而且直接這麼move 可能會出現空值覆寫原來的值的情況,建議判斷非空再複制

或者參考一個工具代碼

會計憑證過賬demo_SAP劉夢_新浪部落格

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_name (  iv_structure  ) .

   CLEAR  lt_idetails[] .

  lt_idetails[]  =  lr_ref_table_des -> components[] .

  cr_ref_table_des ?=

        cl_abap_typedescr => describe_by_name (  cv_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  =  0  .

     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_SAP劉夢_新浪部落格

在函數最後,改回去

會計憑證過賬demo_SAP劉夢_新浪部落格

增強位置2: LFACIF5D  form最後的地方 把exten 資料傳過來,傳給bsed資料

 這裡特殊聲明下:

因為這個demo隻涉及特殊總賬類型為W的,其他特殊總賬不考慮BSED,

這個得根據所在項目業務來确定,如果除了W還有 S或者其他等類型的,再多加個判斷即可。

會計憑證過賬demo_SAP劉夢_新浪部落格

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

*"----------------------------------------------------------------------

     DATA : gs_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 .

   DATA : l_itemno  TYPE posnr_acc . "行項目編号

   DATA : lv_number1  TYPE  i .

   DATA : lv_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 .

   CLEAR : gs_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