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.
分享到:
相关推荐
文件名`ccding-go-stun-04a4eed`可能是一个Git仓库的某个特定版本,表示这个实现可能来源于GitHub用户`ccding`的仓库,并且这个版本的commit ID为`04a4eed`。如果你需要具体的代码示例或者详细使用教程,可以访问该...
go-stun, STUN客户端的go实现( RFC 3489和 RFC 5389 ) stun go是 golang ( a 。k ) 中的STUN ( RFC 3489,5389 ) 客户端实现。 UDP孔穿孔。:STUN: 通过网络地址转换器( nat ) 简单遍历用户数据报协议:用于 NAT
在"stun-c"这个压缩包中,很可能包含的是用C语言编写的STUN客户端源代码。可能包括以下组件: - **STUN消息结构**:C代码将定义STUN消息的结构,包括报文头和属性字段,以便构建和解析STUN请求和响应。 - **网络I...
:STUN-通过网络地址转换器(NAT)的用户数据报协议(UDP)的简单遍历 :用于NAT(STUN)的会话遍历实用程序 使用命令行工具 只需运行这些命令(如果您已经安装了golang并设置了$GOPATH ) go get github....
8. **编程语言**:未指定源代码使用的编程语言,但常见的实现语言包括C、C++、Java或Python。理解语言特性和库函数对正确解读和使用源代码至关重要。 学习和研究开源STUN服务器源代码有助于开发者构建自己的NAT穿透...
开发者可以通过分析和修改这些代码,理解NAT穿透的工作原理,并在自己的项目中实现这一功能。同时,STUN服务器的部署也是实现NAT穿透的重要环节,它可以极大地提高P2P网络的连通性和稳定性。 总的来说,NAT穿透技术...
在实际应用中,NAT探测和STUN协议的使用流程通常包括以下几个步骤: 1. 客户端发起一个STUN请求到已知的STUN服务器。 2. STUN服务器接收到请求后,记录下请求的源IP和端口,并将这些信息封装在一个响应消息中。 3. ...
2. **STUN源代码分析**: 在提供的源代码中,我们可能会看到以下几个关键组件: - 客户端(Client):负责发起STUN请求,构建并发送包含特定属性的STUN报文。 - 服务器(Server):接收客户端请求,解析报文,...
"stun-c_notpyb_stun_" 这个标题可能指的是一个STUN客户端的代码库,"notpyb"可能是项目名的一部分,表示这不是用Python编写的,而"stun"则直接指明与STUN协议相关的功能。这个项目可能包含C语言实现的STUN客户端,...
在Java应用中,使用stun4j进行NAT穿越通常包括以下几个步骤: 1. **初始化STUN客户端**:创建STUNClient实例,并设置服务器的公网IP和端口。 2. **创建绑定请求**:调用客户端的相应方法,如`createBindingRequest...
用于Node.js的STUN服务器 寻找较旧的实现? 转到分支。 概述 STUN(通过NAT的UDP的简单遍历:RFC3489)是一种协议,它允许客户端节点获得客户端背后的NAT分配的外部IP地址和端口号。 它还可以识别NAT的行为类型。 ...
Stun-Lib是一个用Go开发的STUN(RFC 3489)协议支持库,支持stun的BindingRequest和BindingResponse消息以及想关的Atrribute编码和解码。具体使用参考server.go文件。 标签:StunLib
STUN(Session Traversal Utilities for NAT,NAT穿越工具)服务器是网络通信中解决NAT(Network Address Translation,网络地址转换)问题的关键技术。在P2P(Peer-to-Peer,对等网络)应用,如VoIP(Voice over ...
STUN(Simple Traversal of UDP over NATs,NAT 的UDP简单穿越)是一种网络协议,它允许位于NAT(或多重NAT)后的客户端找出自己的公网地址,查出自己位于哪种类型的NAT之后以及NAT为某一 个本地端口所绑定的...
描述中提到,项目包含了一个安装程序(WinStunSetup-0-96.msi)以及两个可执行文件,分别是stun-server-0-96.exe(STUN服务器)和stun-client-0-96.exe(STUN客户端)。服务器部分负责响应来自客户端的请求,提供...
标题中的“zsg_-peer-to-peer_tcp_stun_C#源码”表明这是一个关于P2P(Peer-to-Peer)通信的项目,使用TCP协议并通过STUN(Session Traversal Utilities for NAT,NAT穿越)技术来解决网络地址转换(NAT)下的通信...
STUN(Session Traversal Utilities for NAT,NAT穿越工具)协议是互联网协议栈中的一个重要组成部分,主要用于解决网络地址转换(NAT)环境下的通信问题。NAT技术在防止IP地址耗尽、提供网络安全等方面起到了积极...
coturn的安装通常涉及从源代码编译或使用包管理器进行安装。安装过程包括获取源码、配置、编译和安装步骤。 9 coturn配置: 配置coturn涉及到设置监听地址、认证机制、日志级别等参数,一般通过修改`turnserver....
STUN-over-TCP 开源项目是一个创新的尝试,旨在扩展Vovida Simple Traversal of User Datagram Protocol (UDP) Through Network Address Translators (NATs) 即STUN协议的功能,使其不仅能在User Datagram Protocol...
STUN(Session Traversal Utilities for NAT,NAT穿越服务)协议是一种用于网络应用程序通过NAT(Network Address Translation,网络地址转换)设备进行通信的技术。在P2P(peer-to-peer)网络、VoIP(Voice over ...