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