背景:因财务部门核算需要,创建采购预制发票时,需要将金额分摊到具体的采购订单上,所以生成预制发票时,要根据采购订单的不同拆分成多个应付账款行,SAP标准的功能不支持此业务,因此需要开发增强实现
1.SE37:AC_VENDOR_DIALOG_COMP_IMPORT中创建隐士增强点
![]()
FUNCTION zfmfi_miro_split.
*"----------------------------------------------------------------------
*"*"本地接口:
*" TABLES
*" T_SPLTTAB STRUCTURE ACSPLT OPTIONAL
*"----------------------------------------------------------------------
DATA:lt_ydrseg TYPE TABLE OF mmcr_drseg.
DATA:lv_ydrseg TYPE char30 VALUE '(SAPLMR1M)YDRSEG[]'.
DATA:lv_rbkpv TYPE char20 VALUE '(SAPLMR1M)RBKPV'.
DATA:ls_rbkpv TYPE rbkp_v.
DATA:lv_lfdnr(3) TYPE n,
lv_rmwwr TYPE rbkp-rmwwr,
lv_wrbtr TYPE rseg-wrbtr.
DATA:BEGIN OF ls_ebeln,
ebeln TYPE ekpo-ebeln,
wrbtr TYPE rseg-wrbtr,
END OF ls_ebeln,
lt_ebeln LIKE TABLE OF ls_ebeln.
DATA:lv_tabix TYPE sy-tabix.
CHECK sy-mandt = '320' OR sy-mandt = '620' OR sy-mandt = '820'.
*调用点 函数 AC_VENDOR_DIALOG_COMP_IMPORT 开头
*调用点 函数 AC_VENDOR_DIALOG_COMP_IMPORT 开头
*调用点 函数 AC_VENDOR_DIALOG_COMP_IMPORT 开头
* CHECK t_splttab[] IS INITIAL.
* IF t_splttab[] IS INITIAL.
CLEAR t_splttab[].
ASSIGN (lv_ydrseg) TO FIELD-SYMBOL(<fs_t_ydrseg>).
CHECK sy-subrc EQ 0.
ASSIGN (lv_rbkpv) TO FIELD-SYMBOL(<fs_rbkpv>).
CHECK sy-subrc EQ 0.
CHECK <fs_t_ydrseg> IS NOT INITIAL.
MOVE-CORRESPONDING <fs_rbkpv> TO ls_rbkpv.
IF ls_rbkpv-rmwwr IS INITIAL.
RETURN.
ELSE.
lv_rmwwr = ls_rbkpv-rmwwr.
ENDIF.
* "获取税码信息
SELECT a003~mwskz,
konp~kbetr
FROM a003
INNER JOIN konp ON konp~knumh = a003~knumh
AND konp~kschl = 'MWVS'
WHERE a003~kappl = 'TX'
AND a003~kschl = 'MWVS'
AND a003~aland = 'CN'
AND a003~mwskz LIKE 'J%'
INTO TABLE @DATA(lt_a003).
CLEAR lv_lfdnr.
lt_ydrseg[] = CORRESPONDING #( <fs_t_ydrseg> ).
READ TABLE lt_a003 INTO DATA(ls_a003) WITH KEY mwskz = lt_ydrseg[ 1 ]-mwskz.
SORT lt_ydrseg BY ebeln ASCENDING.
LOOP AT lt_ydrseg INTO DATA(ls_ydrseg) GROUP BY ls_ydrseg-ebeln INTO DATA(lt_gp).
CLEAR lv_wrbtr.
LOOP AT GROUP lt_gp INTO DATA(ls_gp).
lv_wrbtr = lv_wrbtr + ls_gp-wrbtr.
ENDLOOP.
lv_wrbtr = lv_wrbtr * ( 1 + ls_a003-kbetr / 1000 ).
lv_lfdnr = lv_lfdnr + 1.
APPEND INITIAL LINE TO t_splttab ASSIGNING FIELD-SYMBOL(<fs_splttab>).
<fs_splttab>-lfdnr = lv_lfdnr.
<fs_splttab>-wtpnt = lv_lfdnr.
<fs_splttab>-wrbtr = lv_wrbtr.
lv_rmwwr = lv_rmwwr - lv_wrbtr.
***************ADD BY ZJ 20240320 MIRO-会计凭证拆分 采购订单没有带出问题 S
APPEND INITIAL LINE TO lt_ebeln ASSIGNING FIELD-SYMBOL(<fs_ebeln>).
<fs_ebeln>-ebeln = ls_gp-ebeln.
<fs_ebeln>-wrbtr = lv_wrbtr.
***************ADD BY ZJ 20240320 MIRO-会计凭证拆分 采购订单没有带出问题 E
ENDLOOP.
IF lv_rmwwr IS NOT INITIAL.
<fs_splttab>-wrbtr = <fs_splttab>-wrbtr + lv_rmwwr.
<fs_ebeln>-wrbtr = <fs_ebeln>-wrbtr + lv_rmwwr.
* lv_lfdnr = lv_lfdnr + 1.
*
* APPEND INITIAL LINE TO t_splttab ASSIGNING <fs_splttab>.
* <fs_splttab>-lfdnr = lv_lfdnr.
* <fs_splttab>-wtpnt = lv_lfdnr.
* <fs_splttab>-wrbtr = lv_rmwwr.
ENDIF.
* ELSE.
* ASSIGN (lv_ydrseg) TO <fs_t_ydrseg>.
* CHECK sy-subrc EQ 0.
* ASSIGN (lv_rbkpv) TO <fs_rbkpv>.
* CHECK sy-subrc EQ 0.
*
* CHECK <fs_t_ydrseg> IS NOT INITIAL.
*
* MOVE-CORRESPONDING <fs_rbkpv> TO ls_rbkpv.
* IF ls_rbkpv-rmwwr IS INITIAL.
* RETURN.
* ELSE.
* lv_rmwwr = ls_rbkpv-rmwwr.
* ENDIF.
*
* CLEAR lv_lfdnr.
* lt_ydrseg[] = CORRESPONDING #( <fs_t_ydrseg> ).
*
*
* LOOP AT lt_ydrseg INTO ls_ydrseg GROUP BY ls_ydrseg-ebeln INTO lt_gp.
* CLEAR lv_wrbtr.
* LOOP AT GROUP lt_gp INTO ls_gp.
*
* ENDLOOP.
****************ADD BY ZJ 20240320 MIRO-会计凭证拆分 采购订单没有带出问题 S
* APPEND INITIAL LINE TO lt_ebeln ASSIGNING <fs_ebeln>.
* <fs_ebeln>-ebeln = ls_gp-ebeln.
****************ADD BY ZJ 20240320 MIRO-会计凭证拆分 采购订单没有带出问题 E
* ENDLOOP.
*
* LOOP AT lt_ebeln ASSIGNING <fs_ebeln>.
* READ TABLE t_splttab INDEX sy-tabix.
* IF sy-subrc EQ 0.
* <fs_ebeln>-wrbtr = t_splttab-wrbtr.
* ENDIF.
* ENDLOOP.
* ENDIF.
EXPORT lt_ebeln TO MEMORY ID 'ZFMFI_MIRO_SPLIT'."SE37--->ZSAMPLE_PROCESS_00001120_CN --->LINE:157
ENDFUNCTION.