MIRO创建采购预制发票时,按采购订单拆分成多行应付账款
背景:因财务部门核算需要,创建采购预制发票时,需要将金额分摊到具体的采购订单上,所以生成预制发票时,要根据采购订单的不同拆分成多个应付账款行,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.