1)概述
对于参考步骤 (Condition Step)(T683S-STUNB and T683S-STUN2)的使用代码分析
SAP对定价过程中的从参考步骤(T683S-STUNB)和到参考步骤T683S-STUN2)的使用分两种情况:无条件类型的小计项目和有条件计算项目。
在LV61AA55单元会根据定价过程生成的xkomv内表来循环计算各项值
*LOOP
loop at xkomv.
* calculate condition basis(有条件计算项目),(162行),调用konditionsbasis_ermitteln子过程填写kawrt(条件基值),供后续项目计算使用
perform konditionsbasis_ermitteln.
.....
* scale basis changed or 0
* KON-KBETR should not be there if scale basis is 0
( ( xkstbs ne ykstbs ) or xkstbs eq 0 ) and
xkomv-kmprs is initial and
xkomv-ksteu eq 'A'.
perform xkomv_kbetr_aus_staffel.
endif.
if xkomv-krech na absolute or xkomv-kgrpe ne 'X'.
perform xkomv_kwert_ermitteln.
endif.
endif.
else.
if xkomv-kschl eq space."
*(无条件类型的小计项目),调用xkomv_kwert_ermitteln子过程直接将汇总填写到小计项目的kwert字段
perform xkomv_kwert_ermitteln.
endif.
endif.
.....
endloop.
2)无条件类型的小计项目计算代码分析
xkomv_kwert_ermitteln代码参见单元LV61AA43的下列代码,这段代码会调用子过程xkomv_kawrt_ermitteln将相应定价项目的字段(kwert)汇总填写到小计项目的kwert字段,参见红色部分。
FORM xkomv_kwert_ermitteln.
DATA: xkbetr(16) TYPE p DECIMALS 2.
DATA: cond_curr_is_euro, doc_curr_is_euro.
* sum line owning reference step
IF xkomv-kschl = space AND xkomv-stunb NE 0.
CATCH SYSTEM-EXCEPTIONS conversion_errors = 1
arithmetic_errors = 5.
PERFORM xkomv_kawrt_ermitteln.
xkomv-kwert = xkawrt.
ENDCATCH.
IF sy-subrc = 1 OR sy-subrc = 5.
MESSAGE s802.
xkomv-kinak = 'X'.
xkomv-kwert = 0.
xkomv-fxmsg = '802'.
komp-fxmsg = '802'.
ENDIF.
* no calculation for KDUPL conditions because condition value is
* calculated by formula 36.
ELSEIF xkomv-kdupl NE 'B'.
3)有条件计算项目代码分析
konditionsbasis_ermitteln代码参见单元LV61AA74的下列代码,这段代码会调用子过程xkomv_kawrt_ermitteln将相应定价项目的字段(kwert)汇总填写到小计项目的kawrt(条件基值),参见红色部分。
form konditionsbasis_ermitteln.
data: da_xxmglme like komp-brgew,
da_xxmeins like komp-gewei,
da_fxmsg like xkomv-fxmsg.
data: arbfeld_dec(16) type p decimals 3.
xkomv-kawrt = 0.
if xkomv-krech ca prz_abs and not xkomv-krech = 'T'.
if xkomv-stunb ne 0 or xkomv-stun2 ne 0 or xkomv-koaid = 'D'.
perform xkomv_kawrt_ermitteln.
xkomv-kawrt = xkawrt.
endif.
if xkomv-stunb = 0 and xkomv-stun2 = 0.
xkomv-kawrt = zwisu.
endif.
endif.
4)循环合计子过程代码的摘抄,参见红色部分
form xkomv_kawrt_ermitteln.
data: axkomv like komv.
* assign & initialize
axkomv = xkomv.
xkawrt = 0.
* set from - to step number comming form pricing procedure
xstunr = xkomv-stunb.
xstun2 = xkomv-stun2.
if xstun2 lt xstunr.
xstun2 = xstunr.
endif.
if xstun2 = 0.
xstun2 = xkomv-stunr.
endif.
* build up key to read XKOMV table
komv_key-mandt = komk-mandt.
komv_key-knumv = komk-knumv.
komv_key-kposn = komp-kposn.
komv_key-stunr = xstunr.
komv_key-zaehk = 0.
read table xkomv with key komv_key binary search.
if sy-subrc lt 8.
read table xkomv index sy-tabix.
if xkomv-stunr gt xstun2.
read table xkomv index xkomv_tabix.
xkomv = axkomv.
exit.
else.
loop at xkomv.
if xkomv-stunr gt xstun2 or sy-tabix = xkomv_tabix.
read table xkomv index xkomv_tabix.
xkomv = axkomv.
exit.
endif.
if ( xkomv-stunr ge xstunr and xkomv-stunr le xstun2 ) and
xkomv-kinak na 'AKLMX'.
add xkomv-kwert to xkawrt.
endif.
endloop.
endif.
endif.
if xkomv_tabix ne 0.
read table xkomv index xkomv_tabix.
endif.
xkomv = axkomv.
endform.
分享到:
相关推荐
go-stun, STUN客户端的go实现( RFC 3489和 RFC 5389 ) stun go是 golang ( a 。k ) 中的STUN ( RFC 3489,5389 ) 客户端实现。 UDP孔穿孔。:STUN: 通过网络地址转换器( nat ) 简单遍历用户数据报协议:用于 NAT
go-stun - STUN客户端(RFC 3489和RFC 5389)的一个Go实现
:STUN-通过网络地址转换器(NAT)的用户数据报协议(UDP)的简单遍历 :用于NAT(STUN)的会话遍历实用程序 使用命令行工具 只需运行这些命令(如果您已经安装了golang并设置了$GOPATH ) go get github....
实现stun 协议相关功能。 可以通过客户端代码编译后连接到服务器
Stun-Lib是一个用Go开发的STUN(RFC 3489)协议支持库,支持stun的BindingRequest和BindingResponse消息以及想关的Atrribute编码和解码。具体使用参考server.go文件。 标签:StunLib
开源的STUN服务器源代码,仅供参考,在实际的网络环境中,靠STUN方式穿透成功率低的可怕
STUN(Simple Traversal of UDP over NATs,NAT 的UDP简单穿越)是一种网络协议,它允许位于NAT(或多重NAT)后的客户端找出自己的公网地址,查出自己位于哪种类型的NAT之后以及NAT为某一 个本地端口所绑定的...
stun源代码,奉献给做Nat穿透的码农们,里面的开发思路值得参考
stun相关功能,实现相关穿透功能的客户端代码。详细信息见github
非常简单的STUN客户 顾名思义,这是一个非常简单完成的STUN客户端,它使用C#编写并且基于 ,可以在TCP或UDP上运行。 这是作为概念验证的目的,旨在使用STUN协议向NAT添加NAT打Kong。 它仅实现XOR-MAPPED-ADDRESS...
如果你准备长期使用 «Stun» 主题,并希望展示在这里,你只需在 README 中填入你的网站,然后提交 PR 即可。 :crystal_ball: 特性 简洁 & 快速 & 易用 & 可定制性高 响应式设计 二级导航菜单 支持图片懒加载 支持 ...
P2P内网穿透技术点,NAT网络探测。可以探测NAT网络类型,以及相关IP和端口。
Stun4j 是 Java 程序实现 NAT 穿越的一种方案。是对 STUN 协议(RFC3489)的Java实现。
STUNTMAN 是一个由RFCs5389, 5769, and 5780规范的STUN协议(Session Traversal Utilities for NAT)的开源实现,同时兼容旧版本的STUN RFC3489 。源码分发版中包含一个高性能的STUN服务器,一个客户端程序,以及一套...
STUN协议-Simple Traversal of User Datagram Protocol (UDP) Through Network Address Translators (NATs)的中英文合集pdf
(使用 STUN 服务器) 安装 $ [sudo] npm install -g pia 用法 $ pia $ pia -j -g -i -t $ pia --display-stun --specify-stun "stun.l.google.com:19302" 实际使用 $ pia -s | xargs whois 选项 -a, --all ...
特技套房(Stun套件)本项目包含一套使用Stun的服务器与客户端,用于查询当前网络的Nat类型。使用的Stun协议版本为 。项目采用Java实现,所用jdk版本为jdk1.8.0_181。使用Maven构建。项目模块有客户-Stun客户端...
sample of stun client to bypass nat
一个可用Stun服务器,用于学习标准的STUN有用,也可以直接使用此代码
这是STUNTMAN的代码-john selbie的开源STUN服务器和客户端代码。 符合包括5389、5769和5780在内的最新RFC。还包括对RFC 3489的向后兼容性。ICE和WebRTC就绪。 1.2版可在Linux,MacOS,BSD和Solaris上编译。 在...