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

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.dtcms.com/a/178291.html

相关文章:

  • 【人工智能】低代码与AI技术未来趋势分析
  • Redis 8.0正式发布,再次开源为哪般?
  • SQL:MySQL函数:字符串函数
  • 深入解析:如何正确处理业务空值与技术异常?从避免滥用`None`和`WebDriverException`谈起
  • ERC-20与ERC-721:区块链代币标准的双星解析
  • 【知识点】三维项目中关于各种坐标系的初步认识
  • 2.3 点云数据存储格式——LiDAR专用型点云存储格式
  • 【Linux网络】Socket 编程预备
  • 极简远程革命:节点小宝 — 无公网IP的极速内网穿透远程解决方案
  • 用NVivo革新企业创新:洞悉市场情绪,引领金融未来
  • 科学发现 | 源于生活的启示与突破计划的创新
  • Python中,正则表达式,
  • Excel学习笔记
  • 【数据结构】——链表OJ(下)
  • K8s网络从0到1
  • 什么是变量提升?(形象的比喻)
  • 代码随想录算法训练营第三十七天-2|动态规划part2
  • CSS:字体和文本样式
  • Docker 常用命令
  • Google AI版图:解析AI Studio, Gemini, NotebookLM与GCP
  • 【Rust错误处理】Rust错误处理机制详解与应用实战
  • Yolo迁移训练-带训练源码
  • pip下载tmp不够
  • Git 基础操作系列2: 本地项目上传至git仓库(gitee / gitlab / github)
  • ITTIA DB Lite 9.x——一款高性能嵌入式事务型、时间序列嵌入式数据库
  • threejs 添加css3d标签 vue3
  • 自然语言到 SQL 转换:开启智能数据库交互新时代
  • cursor平替,试试 vscode+cline+openrouter 的方案,还能自定义 mcp-server 教程大纲
  • 【PostgreSQL数据分析实战:从数据清洗到可视化全流程】电商数据分析案例-9.2 流量转化漏斗分析
  • 企业微信自建消息推送应用