问题描述:
SAP ERP 实施中,经常会用到例程开发(TCODE:VOFM)。创建例程需要ACCESS KEY,这个可以通过申请得到,创建后例程会被包含在一个REQUEST下,例程创建之后还不能马上使用,需要激活,如图所示。
否则无法正常使用。
文章转自 http://blog.csdn.net/zeewjj/article/details/8656660
REQUEST释放后可以传输到目标系统,但是问题就出现在传输。如果只是传输,是无法正常使用的。这是SAP的一个BUG。要了解这个BUG,先要了解SAP例程的工作原理。
例程工作原理:
例程,即Fomula,是使用在销售、采购、发票、交货等单据中定价过程的一小段程序。之所以有Fomula存在,是因为在不同的业务场景下,定价过程可能千差万别,但是却可以拆分为一些关键的组成部分,如复制请求、数据传输、要求、公式,每个例程就是一小段专用程序,这些例程程序会被标准程序动态调用:如:PERFORM XXX IN XXXX IF FOUND. 我们可以在例程中编写代码片段,修改运行环境中的数据。具体的每种例程都有不同的环境变量和接口数据,在此就不详细说明了。
创建例程的过程,实际上是做了以下几件事,我们以要求–定价–998例程为例说明:
1 创建了程序:RV61A998,改程序可通过SE38查看
2 在表TFRM、TFRMT中添加数据,记录创建的例程编号等信息
3 激活例程时,RV61A998被INCLUDE 在RV61ANNN,即在RV61ANNN中添加一行:INCLUDE RV61A998.
下面解释下传输后无法正常使用。
CHANGE REQUEST释放后传输,1、2两步可以正常完成,但是第三步,虽然在目标系统中激活了,但是未能INCLUDE在RV61ANNN程序中,因此定价过程配置好之后,会出现ABAP DUMP.
解决方法:在目标系统中运行程序:RV80HGEN即可修复BUG,而不需要在目标系统中通过VOFM激活例程。该程序的作用是根据表TFRM,TFRMT在RV61ANNN等程序中增加INCLUDE RV61A998这样的代码,如此才能正常运行。具体见Notes:28683
文章转自 http://silverw0396.iteye.com/blog/90673
关于SAP的SD的定价公式的资料(强力推荐,有时间我会进行翻译)
Enhancing Output Determination | |
Implementing Subsequent Function Requirement Routines | |
Material Number Ranges and Formatting | |
SD Document Number Range Enhancements | |
SD Billing Document Consolidation and Splitting | |
Inside the VOFM Program |
Sales and Distribution VOFM Routines Part 1: Copy Requirements | |
Sales and Distribution VOFM Routines Part 2: Data Transfer | |
Sales and Distribution VOFM Routines Part 3: Requirements | |
Sales and Distribution VOFM Routines Part 4: Formulas |
如何提取单据的实际定价数据
VBAK,vbrk等表都有字段“KNUMV” 纪录了"单据条件数"
KONV 纪录单据的单价计算步骤(条件(事务数据))
示例:
select vbrk~fkart vbrp~posnr vbrk~sfakn vbrk~knumv vbrp~matnr vbrp~fkimg
into corresponding fields of wa_vbrk
from vbrk
inner join vbrp on vbrk~vbeln = vbrp~vbeln
where vbrk~vbeln = wa_bkpf-awkey+0(10).
if sy-subrc = 0.
select single kwert into (wa_vbrk-kwert)
from konv
where knumv = wa_vbrk-knumv
and kposn = wa_vbrk-posnr and kschl = 'ZPRS'."'VPRS'.
*..................................
endif.
endselect.
如何提取单价定价数据
首先从定价表(AXXX)中取出“KNUMH”条件记录号
select single knumh
into (l_knumh)
from a118
where matnr = wa_report-matnr and kschl = 'Z101'
and datab <= wa_report-fkdat and datbi >= wa_report-fkdat .
再根据条件记录号从KONP提取数据
select single kbetr kpein into (l_kbetr,l_kpein)
from konp where knumh = l_knumh and kschl = 'Z101'.
在根据配置计算定价数据