需求背景:

    1. MIRO过账时生成的会计凭证,科目类型KOART= “K” 的凭证行项目(科目为应付)金额进行拆分,若有多行KOART为K的行,则每行都进行拆分。并且将拆分后的配送单写入每一行的分配字段ZUONR。
    1. 批量发票校验生成的凭证中会存在多行暂估类科目,将需拆分的行项目(应付已收票)金额按照暂估科目金额的比例R(每一行暂估科目金额/所有暂估科目金额总和)拆分为多行已收票,每行已收票的金额为对应暂估行比例R*已收票行的金额,同时取暂估科目行项目的EBELN(采购订单)和PRCTR(利润中心)字段值,填入拆分出来的对应的应付分配(ZUONR)和PRCTR(利润中心)字段中。
    1. 如果拆分多行应付已收票金额的合计不等于原已收票的金额,存在尾差,将尾差加到拆分出的应付已收票最后一行金额中。

增强实现:
SMOD: FMRESERV

    LOOP AT T_ACCIT INTO LS_ACCIT  WHERE KOART = 'K'.CLEAR LS_ACCIT_YFYSP.LS_ACCIT_YFYSP = LS_ACCIT.APPEND LS_ACCIT_YFYSP TO LT_ACCIT_YFYSP.ENDLOOP.IF LT_ACCIT_YFYSP[] IS NOT INITIAL.
* 暂估类科目SELECT *INTO TABLE LT_ZTFI070FROM ZTFI070 FOR ALL ENTRIES IN T_ACCITWHERE  HKONT = T_ACCIT-HKONT.SORT LT_ZTFI070 BY HKONT.LOOP AT LT_ACCIT_YFYSP INTO LS_ACCIT_YFYSP.CLEAR LV_PSWBT_SUM.FREE LT_FENTAN[].LOOP AT T_ACCIT INTO LS_ACCIT .READ TABLE LT_ZTFI070 INTO LS_ZTFI070WITH KEY HKONT = LS_ACCIT-HKONTBINARY SEARCH.IF SY-SUBRC = 0.CLEAR LS_FENTAN.MOVE-CORRESPONDING LS_ACCIT TO LS_FENTAN.APPEND LS_FENTAN TO LT_FENTAN.LV_PSWBT_SUM = LV_PSWBT_SUM + LS_ACCIT-PSWBT.ENDIF.IF LV_POSNR_MAX < LS_ACCIT-POSNR.LV_POSNR_MAX = LS_ACCIT-POSNR.ENDIF.ENDLOOP.CLEAR LV_LINES.DESCRIBE TABLE LT_FENTAN LINES LV_LINES.IF LV_LINES >= 2. " 多行暂估科目,需要做金额拆分DELETE T_ACCIT WHERE POSNR = LS_ACCIT_YFYSP-POSNR.FREE LT_ACCCR_YFYSP[].LOOP AT T_ACCCR INTO  LS_ACCCR WHERE POSNR = LS_ACCIT_YFYSP-POSNR..CLEAR LS_ACCCR_YFYSP.MOVE-CORRESPONDING LS_ACCCR TO LS_ACCCR_YFYSP.APPEND LS_ACCCR_YFYSP TO LT_ACCCR_YFYSP.DELETE T_ACCCR.CONTINUE.ENDLOOP.CLEAR: LV_PSWBT_FTH_SUM,LV_PSWBT_WEICHA.LOOP AT LT_FENTAN INTO LS_FENTAN.LS_FENTAN-PSWBT_FTH = LS_ACCIT_YFYSP-PSWBT * ( LS_FENTAN-PSWBT / LV_PSWBT_SUM ).LV_PSWBT_FTH_SUM = LV_PSWBT_FTH_SUM + LS_FENTAN-PSWBT_FTH.MODIFY LT_FENTAN FROM LS_FENTAN.ENDLOOP.LV_PSWBT_WEICHA = LS_ACCIT_YFYSP-PSWBT - LV_PSWBT_FTH_SUM.IF LV_PSWBT_WEICHA IS NOT INITIAL.
* 把尾差加到金额最大的行上, 这个金额本身是负数,所以升序排序,就是最大的负数SORT LT_FENTAN BY PSWBT_FTH.LOOP AT LT_FENTAN INTO LS_FENTAN.LS_FENTAN-PSWBT_FTH =  LS_FENTAN-PSWBT_FTH + LV_PSWBT_WEICHA.MODIFY LT_FENTAN FROM LS_FENTAN.EXIT.ENDLOOP.ENDIF.SORT LT_FENTAN BY HKONT.LOOP AT LT_FENTAN INTO LS_FENTAN.LV_INDEX = SY-TABIX.IF LV_INDEX = '1'.CLEAR LS_ACCIT.MOVE-CORRESPONDING LS_ACCIT_YFYSP TO LS_ACCIT.LS_ACCIT-PSWBT = LS_FENTAN-PSWBT_FTH.LS_ACCIT-POSNR = LS_ACCIT_YFYSP-POSNR.LS_ACCIT-EBELN = LS_FENTAN-EBELN.LS_ACCIT-EBELP = LS_FENTAN-EBELP.LS_ACCIT-PRCTR = LS_FENTAN-PRCTR.LS_ACCIT-ZUONR = LS_FENTAN-EBELN.APPEND LS_ACCIT TO T_ACCIT.LOOP AT LT_ACCCR_YFYSP INTO LS_ACCCR_YFYSP.CLEAR LS_ACCCR.MOVE-CORRESPONDING LS_ACCCR_YFYSP TO LS_ACCCR.LS_ACCCR-WRBTR = LS_FENTAN-PSWBT_FTH.LS_ACCCR-SKFBT = LS_FENTAN-PSWBT_FTH.LS_ACCCR-POSNR = LS_ACCIT_YFYSP-POSNR.APPEND LS_ACCCR TO T_ACCCR.ENDLOOP.ELSE.LV_POSNR_MAX = LV_POSNR_MAX + 1.CLEAR LS_ACCIT.MOVE-CORRESPONDING LS_ACCIT_YFYSP TO LS_ACCIT.LS_ACCIT-PSWBT = LS_FENTAN-PSWBT_FTH.LS_ACCIT-POSNR = LV_POSNR_MAX.LS_ACCIT-EBELN = LS_FENTAN-EBELN.LS_ACCIT-EBELP = LS_FENTAN-EBELP.LS_ACCIT-PRCTR = LS_FENTAN-PRCTR.LS_ACCIT-ZUONR = LS_FENTAN-EBELN.APPEND LS_ACCIT TO T_ACCIT.LOOP AT LT_ACCCR_YFYSP INTO LS_ACCCR_YFYSP.CLEAR LS_ACCCR.MOVE-CORRESPONDING LS_ACCCR_YFYSP TO LS_ACCCR.LS_ACCCR-WRBTR = LS_FENTAN-PSWBT_FTH.LS_ACCCR-SKFBT = LS_FENTAN-PSWBT_FTH.LS_ACCCR-POSNR = LV_POSNR_MAX.APPEND LS_ACCCR TO T_ACCCR.ENDLOOP.ENDIF.ENDLOOP.SORT T_ACCIT BY POSNR.SORT T_ACCCR BY POSNR.ENDIF.ENDLOOP.ENDIF.

注意事项
经过SMOD: FMRESERV代码实现,可完成凭证行项目的拆分。
但是,凭证会无法提交。导致更新中止。如下图:

此时需要BTE增强更新两个参数来解决此问题。
SAMPLE_PROCESS_00001120。配置过程不做详解:

  IF SY-TCODE = 'MIRO'.LOOP AT IT_BSEG WHERE KOART = 'K'.LV_INDEX = SY-TABIX.READ TABLE T_BSEGSUB INTO LS_BSEGSUBWITH KEY TABIX =  LV_INDEX.IF SY-SUBRC = 0.LV_INDEX_BSEGSUB = SY-TABIX.LS_BSEGSUB-XKRES = 'X'.LS_BSEGSUB-XOPVW = 'X'.MODIFY T_BSEGSUB FROM LS_BSEGSUB INDEX LV_INDEX_BSEGSUB.ENDIF.ENDLOOP.ENDIF.

MIRO增强之会计凭证行项目拆分相关推荐

  1. 【增强】FI行项目报表增强任意字段

    业务背景:例如在FBL1N/FBL3N/FBL5N中显示总账科目名称.供应商名称1.客户名称1 依以下步骤执行: 1.FIBF > Settings > Products > of ...

  2. SAP采购订单抬头、行项目屏幕增强的两种方法

    对SAP系统中采购订单抬头进行屏幕增强,在抬头上增加了几个customer fields,但是实现方法有点怪,是一个Z report程序,其下创建了一个屏幕,屏幕中放的就是这几个customer fi ...

  3. 【转】采购订单行项目检查增强

    采购订单行项目检查增强 使用BADI"ME_PROCESS_PO_CUST"的方法CHECK中增强,增加对采购订单行项目的校验,若发现错误,将这些错误消息按照行项目归集显示. 完整 ...

  4. 销售订单的行项目里条件的增强

    如果要设置销售订单行项目里的某个类型下的金额数据 可能要用到增强来做 比如项目类别为TANN时,设置价格为空 在LV69AFZZ里面控制 代码如下: [html] view plaincopy IF  ...

  5. ABAP:增强篇-MIGO过账增强之CHECK方法获取行项目

    MIGO中做PO过账的时候,常常需要在MB_MIGO_BADI~CHECK方法里面写代码,这个方法只有两个参数,一个行号,一个返回报错消息 因此如果需要对行项目上的值做检查,则需要获取到行项目上的数据 ...

  6. MIGO 行项目屏幕自定义字段增强示例

    继上次抬头屏幕增强(MIGO 抬头屏幕自定义字段增强示例),本文章演示行项目增强示例 实现思路参考标准 MB_MIGO_BADI 增强示例类:CL_EXM_IM_MB_MIGO_BADI 1.创建增强 ...

  7. SAP UI5 应用开发教程之一百零四 - SAP UI5 表格控件的支持复选(Multi-Select)以及如何用代码一次选中多个表格行项目

    一套适合 SAP UI5 初学者循序渐进的学习教程 作者简介 Jerry Wang,2007 年从电子科技大学计算机专业硕士毕业后加入 SAP 成都研究院工作至今.Jerry 是 SAP 社区导师,S ...

  8. SAP 不支持交货单中同一个物料多个行项目HU与序列号组合发货场景

    SAP 不支持交货单中同一个物料多个行项目HU与序列号组合发货场景 笔者所在的项目里,后勤业务启用了序列号管理,Handling Unit Manager以及批次号管理.不同的物料分别启用序列号管理, ...

  9. 【实用】客户行项目清单FBL5N增加利润中心

    一.需求 最近碰到这样一个小需求,客户想要在客户行项目清单中(事务代码:FBL5N)显示利润中心(PRCTR),以便于针对同一个客户不同销售小组的核算. 如下图所示,目前是都不带利润中心的. 通常这里 ...

最新文章

  1. Javascript编程基础1
  2. android使碎片切换界面,玩转Android中的碎片Fragment
  3. 转载:PyBus(排忧巴士)的C#源代码(windows mobile手机软件 查询公交的)
  4. PHP面向对象设计的五大原则
  5. 一步一步写算法(开篇)
  6. opencv之求轮廓的凸包
  7. Python 之关键字(保留字)
  8. dest是什么意思(dest是什么意思车上的)
  9. outlook登陆Exchange邮箱不断掉线并弹出需要登陆的窗口
  10. java 一年有多少周_Java获取一年有多少周、某周的第一天和最后一天.
  11. 为什么我的背景图片加载不出来
  12. 数据正态分布化 + 基于回归算法的房价预测(含python代码)
  13. WebBowser 实现淘宝网自动登录
  14. 【解救ROS】clion2022.2.2的安装永久使用教程
  15. matlab绘图z=sin(x_如何用matlab的plot命令画出y=sin(1/x)的图形
  16. 【log4j 2.x】【log4j日志升级漏洞修复】log4j2日志 [简单明了][一眼就会]
  17. HTML+SASS项目:音乐Tai
  18. 初次结识海蜘蛛(2)
  19. 用PHP删除一条记录,php如何删除一条记录
  20. php 常见的错误级别,php 常见错误级别

热门文章

  1. java和基岩版区别_我的世界基岩版与Java版有什么区别?
  2. 33层高楼为什么27楼和28楼最贵 次顶层房价高原因揭秘
  3. 第14章 File类与IO流
  4. 中国油田化学品市场预测及战略研究报告(2022版)
  5. 计算机跨界之科技金融
  6. 【ae】keylight步骤
  7. 让我们看看目前的一些做视频会议厂家在WebRTC上做了哪些事?
  8. 如何检测是否使用gpu
  9. 视频剪辑工具,教你批量分割视频,并提取封面保存为图片格式
  10. 酷比魔方可以PHP编程么,主要想看文献做笔记酷比魔方的i7有人用过么? - 笔记本电脑(Notebook)版 - 北大未名BBS...