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里赋值
  

 
 
 
 

 
 
这里建议加上增强结构名称的校验,防止影响别人
 
 
 
 
而且直接这么move 可能会出现空值覆盖原来的值的情况,建议判断非空再复制
 
 
 
 
或者参考一个工具代码
 
 

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
 
 
 

  
 
 
 
在函数最后,改回去
 
 

增强位置2: LFACIF5D
 
 
form最后的地方
 
 
把exten 数据传过来,传给bsed数据
这里特殊声明下:
因为这个demo只涉及特殊总账类型为W的,其他特殊总账不考虑BSED,
这个得根据所在项目业务来确定,如果除了W还有 S或者其他等类型的,再多加个判断即可。
 

  
 
 
 
 
 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
 
       










