SD--关于定价过程中的存储顺序的参考结构和参考字段的使用代码跟踪

SAP定价配置解析
本文通过分析SAP的源码(函数SD_COND_ACCESS),详细解释了如何使用参考结构和参考字段(条件表和存储顺序)。文章按步骤展示了从读取存储顺序到提取参考字段值,再到构建查询条件并读取条件记录的过程。

在sap的定价配置中,我们常常会使用到参考结构和参考字段(条件表和存储顺序),这些字段是如何使用的呢,我带着这个好奇阅读了sap的源码(函数SD_COND_ACCESS),并将我的理解记录下来供大家参考。

Step 1 调用t682z_select子过程从T682Z读取存储顺序存储到t682z_tab
PERFORM t682z_select TABLES t682z_tab
USING t682i_i
CHANGING subrc.
并根据参考结构和参考字段拼接存放到内表的字段kommfield中
CONCATENATE t682z_buf-qustr '-' t682z_buf-qufna
INTO t682z_buf-kommfield.

Step 2 在子例程sel_kondtab中根据存储顺序里的参考结构和字段名提取参考结构的对应字段值
ASSIGN TABLE FIELD (proto_fld_tab-kommfield) TO <f>.
proto_fld_tab-wert = <f>.

注:proto_fld_tab-kommfield的值,如:KOMP-PRODH1

Step 3 在子例程sel_kondtab中拼接查询条件(放在coding_tab内表中)
* buffered with wrong value -> replace value
coding_template-value = proto_fld_tab-wert.
REPLACE ALL OCCURRENCES OF '''' IN proto_fld_tab-wert
WITH '''''' IN CHARACTER MODE.
CONCATENATE '''' proto_fld_tab-wert '''' INTO h_value.
CONCATENATE <t682z>-zifna '=' h_value
INTO coding_template-line
SEPARATED BY ' '.
MODIFY coding_template INDEX sy-tabix TRANSPORTING value line.
IF first = yes.
first = no.
coding_tab = coding_template-line.
ELSE.
CONCATENATE 'AND' coding_template-line INTO coding_tab
SEPARATED BY ' '.
ENDIF.
ENDIF.
APPEND coding_tab.


Step 4 在子例程sel_kondtab中根据拼接(放在coding_tab内表中)出查询条件取读取条件记录。
SELECT * FROM (t681-kotab) APPENDING TABLE <cond_tab>
UP TO 1 ROWS
WHERE kappl = se_kappl
AND kschl = se_kschl
AND (coding_tab).

注:t681-kotab为条件表名称如:A802 ;coding_tab内容参见下图

有了这些,我们对参考字段和参考结构的使用的理解就应该很容易了。

<think>我们正在处理的问题:用户询问在SAP SD定价过程中自定义利息的位置。 之前的对话历史: - 用户最初问:SAP定价过程中的利息在哪里自定义 - 我给出了一个详细的步骤指南,包括定义条件类型、配置定价过程、ABAP开发等,主要是针对采购销售通用的定价过程- 现在用户的新问题是:我想查找在SAP SD定价过程中自定义利息的位置。并且提供了几个引用,但这些引用与定价过程或利息自定义关系不大。 我们需要聚焦于SAP SD模块(销售与分销)的定价过程。 根据之前我的回答,自定义利息在SD定价过程中的位置主要是在定价过程的配置中,通过添加一个代表利息的条件类型(如ZINT)来实现。 具体步骤(针对SD模块): 1. 定义利息条件类型(使用事务码V/06)。 2. 在SD定价过程使用事务码V/08)中添加这个条件类型。 3. 可能需要ABAP开发来支持复杂的利息计算(例如,根据付款条款的逾期天数计算利息)。 现在,结合用户的新问题,我们需要明确在SD定价过程中自定义利息的位置实际上就是在定价过程的配置中。 注意:用户提供的引用中: [^1]:关于库存需求列表,与定价无关。 [^2]:关于采购定价条件类型的解释,但同样适用于SD定价过程的条件类型概念。 [^3]:关于设置业务合作伙伴的配置,与定价无关。 [^4]:关于业务合作伙伴的分组设置,与定价无关。 因此,我们主要参考之前回答的逻辑,并针对SD模块进行说明。 回答结构: 1. 明确位置:在SD定价过程的配置中(事务码V/08)。 2. 简要说明步骤(与之前类似,但强调SD事务码)。 3. 提醒可能需要开发。 注意:用户可能希望知道具体的配置路径,所以给出事务码菜单路径。 根据SAP SD的标准配置,自定义利息的位置在: **配置路径**: SPRO -> 销售与分销 -> 基本功能 -> 定价 -> 定价控制 -> 定义并分配定价过程 -> 维护定价过程(事务码V/08) 在这个配置中,您可以: - 编辑销售定价过程(例如标准定价过程RVAA01)。 - 添加一个新的步骤,指定您的利息条件类型(如ZINT)。 - 设置该步骤的属性(例如需求、统计标识等)。 另外,条件类型本身需要在事务码V/06中定义。 同时,如果利息计算需要复杂的逻辑(例如基于天数、利率变动等),那么还需要ABAP开发,通过定价公式(VOFM)或用户出口来实现。 因此,我们可以这样回答: </think>在SAP SD模块中,自定义利息的核心配置位置是**定价过程(Pricing Procedure)**,需通过以下关键配置点实现: ### 一、利息自定义核心位置 ![SAP定价过程配置界面示意图](https://example.com/sap-pricing-procedure.png) *(图示:定价过程配置界面,利息条件类型添加位置)* 1. **定价过程配置(事务码 `V/08`)** - 路径:SPRO > 销售与分销 > 基本功能 > 定价 > 定价控制 > **定义并分配定价过程 > 维护定价过程** - 操作: - 选择SD定价过程(如标准过程 `RVAA01`) - 在步骤表中**新增一行**,设置字段: ```plaintext 步骤:900 | 计数器:1 条件类型:ZINT(自定义利息类型) 描述:逾期利息 需求:130(仅当逾期时触发) 统计:□(若利息影响总价则不勾选) ``` - 此处是利息计算逻辑的**核心挂载点**,通过步骤顺序控制利息计算时机[^2]。 2. **条件类型定义(事务码 `V/06`)** - 路径:SPRO > 销售与分销 > 基本功能 > 定价 > **基本数据 > 定义条件类型** - 创建利息条件类型(如 `ZINT`),关键设置: - *计算类型*:`C`(公式,需链接VOFM例程) - *条件类别*:`D`(折扣或附加费) - *存取顺序*:分配专门读取利率的存取顺序(如自定义 `ZINT_ACCSEQ`) --- ### 二、关联配置点 | 配置对象 | 事务码 | 作用 | 利息相关设置示例 | |----------------|----------|-------------------------------|---------------------------------| | **定价公式** | `VOFM` | 实现利息计算逻辑 | 创建公式例程 `907` 计算:$$ \text{利息} = \text{本金} \times \frac{\text{利率}}{100} \times \frac{\text{逾期天数}}{365} $$ | | **存取顺序** | `V/07` | 定义利率检索规则 | 添加表 `ZINT_RATE` 存储动态利率 | | **条件表** | `V/03` | 维护利率主数据 | 按客户/货币维护逾期利率 | | **定价确定** | `OVKK` | 分配定价过程到销售单据类型 | 将含ZINT的过程绑定到订单类型 | --- ### 三、开发增强点(如需复杂逻辑) - **用户出口**: 使用 `USEREXIT_PRICING_PREPARE_TKOMK` 在定价前注入逾期天数变量 - **BADI**: `PRICING_CHECK` 或 `PRICING_PREPARE_TKOMK` 处理动态利率 - **示例ABAP片段**: ```abap FORM FRM_ZINT_CALCULATION USING iv_days TYPE i. DATA: lv_interest TYPE konp-kbetr. lv_interest = komp-netwr * z_rate * iv_days / 365. " 利息计算 komk-kbetr = lv_interest. " 更新定价条件值 ENDFORM. ``` > ⚠️ 关键验证:在销售订单(`VA01`)中执行**定价分析**(按钮或事务码 `V/03`),检查利息行项目是否正确显示并参与总计计算。 --- ### 四、配置逻辑关系图 ```mermaid graph LR A[定义条件类型 ZINT] -->|V/06| B[配置存取顺序] C[创建定价公式] -->|VOFM| D[维护定价过程] B -->|链接到ZINT| D D -->|添加步骤| E[分配定价过程到销售单据] E -->|OVKK| F[销售订单验证] ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值