【转】ABAP的坑5
对于初写ALV的ABAPer,it_fieldcat参数经常有一些隐藏的小坑,需要多加注意。
目录:
01、字段名大小写的问题
02、导出到Excel或者文本最后一位丢失
03、默认变式导致改了FLDCAT看不到效果
04、CONVERTION转换
05、编辑数值(数量、金额)字段总是给变成小数
06、汇总的时候DUMP
07、导出的时候DUMP
08、筛选的时候,长度不对
09、可编辑字段不指定输出长度,编辑的时候默认只能输入10位
10、 改变了数据元素或者domain之后,ALV字段没反应
11、金额和数值显示小数位的问题
详细介绍:
01、SAP运行时是区分大小写的,也就是说,'a'和'A'在SAP运行时是不同的字符,有同学在FIELDCAT里面使用了小写或者大小写混合的字段名,SAP就不会认识,导致出错。其实,不仅仅是FIELDCAT,程序任何地方最好都要注意大小写。
02、导出到Excel少一位,具体见:http://blog.chinaunix.net/uid-8527621-id-2029555.html,简单说就是加上参考表和参考字段就好了。
03、FIELDCAT添加了新的字段,ALV却不显示!看看是不是有默认的Layout变式吧。
04、显示的字段,物料的前导零没去掉、单位是内部单位、WBS元素成了数字。。。这一切的原因都是来自于CONVERTION转换,没有做内外部转换,加上参考表和参考字段吧。要么这样:fldct-edit_mask = '==MATN1'.
05、在可编辑的ALV里面,数值型字段修改的时候,会把数据缩小100(1000)倍,只要根据情况设置一下小数位就可以了:fldcat-decimals_out = 3.
06、这个不仅仅是FIELDCAT的事儿,有时候LAYOUT设置不对也会导致DUMP,比如设置is_layout-coltab_fieldname = 'CELLC'.但是内表根本就没有CELLC这个字段,就不行了。
07、同06.
08、比如物料号,18位,但是筛选弹出来的窗口只能输入10位。这个可以通过添加参考表参考字段解决,也可以使用fldct-edit_mask = '==MATN1'. ,还有设置fldct-intlen = 18.
09、同08
10、ALV的字段参考了数据字段的内容,但是在修改了数据元素或者域后,ALV字段并没有立即变成修改后的样子,然后第二天莫名其妙好了。这个实际上是SAP上下文的锅,只需要运行一下程序BALVBUFDEL,重置下ALV缓冲区就可以了。
11、SAP开发有句行话:有数值必有单位,有金额必有货币。ALV显示也是这样,如果不给指定单位或者货币字段,显示的可能就是不正确的。数值字段:fldct-qfieldname = 'MEINS'. 金额字段:fldct-cfieldname = 'WAERS'.
总结:
如果方便,最好是写上参考表和参考字段,实在不愿写用一个偷懒的办法:
根据实际情况修改一下既可以。