1, 替代介绍
替代(Subtittution)是FI模块中常用的一种增强技术。在凭证保存之前,如果满足替代的先决条件(Prerequiste),凭证中的抬头和行项目中的字段可以被替代成新值。
替代有以下特点:
1)替代是在FI中另外一种增强-校验(Validation)之前运行的
2)替代中不能抛出错误消息,错误消息可以写在校验(Validation)中
3)替代分三种:
- 固定值(constant)--替代成固定值
- 字段赋值(field assignment)--替代成另外一个字段
- 出口(User Exit)--在出口中可以写一段替代逻辑
4)优先级:OKB9默认设置 > 替代GGB1 > 屏幕手工输入
2, 实例教程
2.1 场景介绍
FB60中通过exit替代之前的文本,
SE11中,
FB60中,
2.2 创建替代(substitution)
tcode:GGB1 创建一个替代,SGTXT字段是在行项目上,所以要在line item上创建。输入替代名字和描述
2.3 创建Step
点击step按钮,在跳出的窗口中选择需要替代的字段sgtxt
接着选择替代的种类,这里选择复杂一点的exit,
创建一个step的先决条件(prerequisite),先决条件可以是以下几种:
1)表字段判断(table field)
2)规则(rule)
3)出口(exit)
这里添加一个供应商的判断,只有供应商是’CN543194‘的才替代,
然后选择vendor字段,点击 ’=‘号
最后点击constant输入供应商的固定值’CN543194‘,
条件就创建好了,如下:
然后再创建exit,输入exit的名字后保存,发现状态栏报错’User exit U_001 not declared in form pool YAF_SUBEXIT‘
提示要在YAF_SUBEXIT中定义exit U_001.
2.4 定义exit
2.3 中的YAF_SUBEXIT是怎么来的呢?YAF_SUBEXIT是copy标准程序RGGBS000,并通过Tcode GCX2配置的,
Tcode: GCX2,可以看到GCX2中替代配置的正是YAF_SUBEXIT,
在YAF_SUBEXIT中定义exit U_001,代码如下:
在form get_exit_titles 中:
1 2 3 4 | exits-name = 'U_001'. exits-param = c_exit_param_field. exits-title = 'TEXT'. "Text APPEND exits. |
在exit U_001中添加代码
1 2 3 4 5 | FORM u_001 USING c_sgtxt type bseg-sgtxt . c_sgtxt = 'This is a test'. ENDFORM. |
这样替代就创建完了,但是还不能用,没有激活
2.5 激活替代
Tcode OBBH,激活替代,
callpnt 选择2
active level:
3, 测试
FB60当所有必输字段都输入后才会调用替代,如下: