当前位置: 首页 > web >正文

SAP 交货单行项目含税金额计算报cx_sy_zerodivide处理

业务背景:SAP交货单只有数量,没有金额,所以开发报表从订单的价格按数量计算交货单的金额。
用户反馈近期报表出现异常:
在这里插入图片描述

****2012/12/12 清风雅雨 规格变更 Chg 修改开始
** 修改原因:由于余数为0时,可能会报错溢出。所以增加检查。
*          wa_alv-ttlwrx = ( wa_alv-lfimgr * wa_konv_pr01-kbetr / wa_konv_pr01-kpein +
*                  wa_alv-lfimgr * wa_konv_zr01-kbetr / wa_konv_zr01-kpein +
*                  wa_alv-lfimgr * wa_konv_pbxx-kbetr / wa_konv_pbxx-kpein +
*                  wa_alv-lfimgr * wa_konv_pb00-kbetr / wa_konv_pb00-kpein ) * ( 1 + p1 ) -
*                  wa_alv-lfimgr * wa_konv_zk01-kbetr / wa_konv_zk01-kpein +
*                  + wa_alv-lfimgr * wa_konv_zk03-kbetr / wa_konv_zk03-kpein.TRY.wa_alv-ttlwrx = ( wa_alv-lfimgr * wa_konv_pr01-kbetr / wa_konv_pr01-kpein +wa_alv-lfimgr * wa_konv_zr01-kbetr / wa_konv_zr01-kpein +wa_alv-lfimgr * wa_konv_pbxx-kbetr / wa_konv_pbxx-kpein +wa_alv-lfimgr * wa_konv_pb00-kbetr / wa_konv_pb00-kpein ) * ( 1 + p1 ) -wa_alv-lfimgr * wa_konv_zk01-kbetr / wa_konv_zk01-kpein ++ wa_alv-lfimgr * wa_konv_zk03-kbetr / wa_konv_zk03-kpein.CATCH cx_sy_zerodivide.IF p_jk <> 'X'.MESSAGE s000 WITH '交货单' wa_alv-vbeln '被0除请检查定价数量'.ENDIF.wa_alv-ttlwrx = 0.ENDTRY.
****2012/12/12 清风雅雨  规格变更 Chg 修改结束

当年年少不成熟,前台报cx_sy_zerodivide错误,就采用把异常CATCH后直接前台显示,并把值赋为0,而现在用户需要知道准确的值 ,时隔13年,再一次调查:
在这里插入图片描述
由于ZK01折让价格 没有价格单位,验证一下:

REPORT  ztmp_test2.
DATA wa_konv_zk01 TYPE konv.
DATA l_kbetr TYPE konv-kbetr.
wa_konv_zk01-kbetr = 0.
wa_konv_zk01-kpein = 0.
l_kbetr = wa_konv_zk01-kbetr / wa_konv_zk01-kpein.
WRITE : l_kbetr.

输出0

REPORT  ztmp_test2.
DATA wa_konv_zk01 TYPE konv.
DATA l_kbetr TYPE konv-kbetr.
wa_konv_zk01-kbetr = 1.
wa_konv_zk01-kpein = 0.
l_kbetr = wa_konv_zk01-kbetr / wa_konv_zk01-kpein.
WRITE : l_kbetr.

报cx_sy_zerodivide
在这里插入图片描述
总结:

1、0/0 = 0
2、有值/0 报cx_sy_zerodivide

问题找到了怎么解决?

检查KONV ZK01类型,13年才有38条记录。所以问题一直没有爆露。

解决方案:
针对没有价格单位kpein的计算逻辑:
交货单XXX金额= 交货单数量/订单数量 x 订单条件金额
而有价格单位的计算逻辑:
交货单XXX金额= 交货单数量 x 订单条件金额/订单条件价格单位

IF wa_konv_zk01-kpein NE 0.zk01tmp = wa_alv-lfimgr * wa_konv_zk01-kbetr / wa_konv_zk01-kpein.
ELSE.zk01tmp = wa_alv-lfimgr / wa_alv-kwmeng * wa_konv_zk01-kbetr
ENDIF.

比如本例:
如果交货5万则5/540000=40000
如果交货2万则2/5
40000=16000

同样的算法取其他5个定价条件:

	pr01tmp,zr01tmp,pbxxtmp,pb00tmp,zk03tmp.

这样可以取到6个正确的定价条件的值,再进行交货单行项目含税金额的计算

  wa_alv-ttlwrx = ( pr01tmp + zr01tmp + pbxxtmp + pb00tmp ) * ( 1 + p1 ) -zk01tmp + zk03tmp.
http://www.xdnf.cn/news/4626.html

相关文章:

  • 云手机虚拟地址技术的运营场景
  • n8n - 开放灵活的智能自动化工作流平台
  • uniapp自定义步骤条(可二开进行调试)
  • shader中性能优化
  • docker 部署clickhouse
  • App Store支付新政重构跨境电商生态:eBay卖家的突围之道
  • vue中scss使用js的变量
  • OpenCv实战笔记(3)基于opencv实现调用摄像头并实时显示画面
  • 【WEB3】区块链、隐私计算、AI和Web3.0——隐私计算(2)
  • 【计算机网络】Cookie、Session、Token之间有什么区别?
  • Angular 面试常见问题
  • maven如何搭建自己的私服(windows版)?
  • 住宅 IP 地址:数字时代的真实网络身份载体
  • Git 基础操作系列2: 本地项目上传至git仓库(gitee / gitlab / github)
  • QMK开发环境搭建指南:Eclipse和VS Code详解
  • 书法机构用的教务管理系统
  • 【Linux学习笔记】基础IO之理解文件
  • vue修改了node_modules中的包,打补丁
  • 论坛系统测试报告
  • 基于Transformer的多资产收益预测模型实战(附PyTorch实现与避坑指南)
  • OpenCV定位地板上的书
  • 中介者模式(Mediator Pattern)详解
  • 前端面经--网络通信与后端协作篇--XMLHttpRequest、axios、fetch、AbortController
  • 代理协议解析:如何根据需求选择HTTP、HTTPS或SOCKS5?
  • MySQL概念简介
  • C++ stl中的vector的相关用法 迭代器失效问题
  • Linux中的线程安全与线程同步详解
  • MySQL的深度分页如何优化?
  • NetSuite 销售订单折扣项目相关设置
  • 若依前后端分离项目中可以删除哪些原若依有的?