1, 问题描述
在系统中用tcode SFP 参照已有的adobe form创建了一个新的,编译激活都没有问题,但是实际调用运行时发生dump,具体错误如下,
1 |
"%WORKAREA1-CONDITIONS" is a table without a header line and therefore has no component called "KOEI1". |
ST22中的截图,
提示在include /1BCDWB/LSM00000163F01中用到KOEI1字段时,没有给表%WORKAREA1-CONDITIONS定义工作区,
问题比较诡异,因为程序是SFP自动生成的,而且调用旧有adobe form并没有dump,一定是参照创建的过程中有什么漏掉了。
2, 问题解决
一点一点顺藤摸瓜分析问题,首先去/1BCDWB/LSM00000163F01中查看一下自动生成的代码,虽然adobe form能自动激活,但是check了代码,确实发现有语法错误,错误和ST22中DUMP提示的一致,
2122行代码显示在%workarea9-kbetr字段处用到了%workarea1-conditions中的koei1字段,
接着去SE11查看了%workarea9-kbetr的定义,发现koei1其实是kbetr的参照金额货币单位字段,
现在怀疑是自动生成的代码出了问题,错误地在表%workarea9-print_cond中用到了%workarea1-conditions中的货币单位字段koei1,
反查了 FORM %NO41,发现此时,只有%workarea9是工作区,并不存在%workarea1这个工作区,所以报错了。
什么导致SFP能将代码生成错误了呢?又去看了一下SFP中上下文中用到的表print_cond,发现只有KBETR,却没有货币参考字段koei1
所以,SFP脑子错乱了,直接用到了CONDITIONS表中的KOEI1字段作为参看货币单位。
又去检查了系统中已有的那个adobe form,发现它print_cond表中的KBETR字段是deactive的,参照的时候没点开print_cond节点,没有进去deactive掉字段,至此,真相大白。
以上。
1 条评论