2024年6月11日发(作者:)

作者:付鸿杰

客户化字段不能修改:

问题背景:自定义的客户化coding block字段无法修改, 分析一下, 如下图,自定义字段

ZZ0001,Tcode FB02进入,按F1帮助,可以看到其对应的程序名/屏幕号为SAPLKACB/9999。

双击程序名SAPLKACB,选择”显示对象清单”按钮,如下图。

找到屏幕9999,所有客户化字段都在该屏幕上,选择屏幕号9999,可看到逻辑流有对BEFORE

OUTPUT和AFTER INPUT的处理,客户化字段之所以会不可修改,主要受程序控制。

作者:付鸿杰

技术分析:

为什么后台配置只能将如文本和参考等字段拉出允许修改而客户化字段不能?

本人来分析一下,首先字段状态组大家都会很熟悉,下图为Tcode:OBC4科目字段状态

组的一个定义画面,你会发现能被设置修改的文本和参考字段在”一般数据”选择组,能被修改

的到期日字段在”支付业务”选择组, 自定义客户化字段在什么组? “附加科目设置”选择组,

附加科目设置是什么意思,英文叫Coding block,类似国内所谓的辅助核算字段,辅助核算字

段什么概念,类似会计科目也,可以修改凭证的会计科目吗?显然不可以,所以,FB02基本上严

禁修改任何客户化字段是正确的,如果需要修改如何办?如此看来,只有冲销再做。

现在,如果确实需修改内容如何办?只要找到SAPLKACB/9999的BEFORE OUTPUT的控

制显示的代码修正一下就可,看粗体注释。

FORM feldmodifikation_normal.

DATA: l_table(10) TYPE c,

l_fdnam TYPE cobl_fdnam,

作者:付鸿杰

l_coblf TYPE ty_coblf.

LOOP AT SCREEN. “Loop屏幕字段

screen-required = mod_off. “screen-required表示屏幕字段必输

screen-input = mod_off. “screen-input=mod_on(即1)允许修改

screen-output = mod_off. “screen-input=mod_off(0)禁止修改

screen-intensified = mod_off.

screen-invisible = mod_off.

screen-active = mod_off.

SPLIT screen-name AT '-' INTO l_table l_fdnam.

MODIFY SCREEN.

ENDLOOP.

ENDFORM.

所以只要在子例程

feldmodifikation_normal

的MODIFY SCREEN前加入如下4行参考

代码就可:

if sy-tcode = 'FB02' and screen-name+0(7) = 'COBL-ZZ'.

screen-input = mod_on.

screen-output = mod_on.

endif.

MODIFY SCREEN.

ENDLOOP.

ENDFORM.

注释:

如果找不到相关配置(

根据上面分析,应该是没有相关配置允许能修改

)和其他方法,客户化字

段可以通过增加代码实现,同时强调不要利用代码修改其他coding block字段,将造成意外结

果,如将成本中心放出修改,可能造成FB02仅仅修改了FI模块/财务凭证的成本中心,但

CO模块/CO凭证的成本中心未被修改。