073、ALV与Function Module(REUSE_ALV_GRID_LIST)

📅 2026/8/25 14:46:49
073、ALV与Function Module(REUSE_ALV_GRID_LIST)
073、ALV与Function Module(REUSE_ALV_GRID_LIST)入行那会儿,最怕听到“ALV”三个字。项目里老顾问甩过来一个函数名,REUSE_ALV_GRID_LIST,说“拿去用,报表就出来了”。结果真跑起来,屏幕是黑了还是白了,数据全列出来了但点一下标题就崩溃,最诡异的是明明内表有数,点刷新按钮直接dump。后来翻遍了SAP标准代码,加上半夜调试,才算把这家伙的脾气摸透。今天这篇笔记,就从我当时踩的那个坑说起。那个坑的名字叫“没有给字段目录排序”。当时我照着网上抄的代码,填好I_FIELDCAT,调用REUSE_ALV_GRID_LIST,输出出来列顺序完全是乱的。我以为是数据有问题,查了半天,后来发现字段目录内表的顺序就是输出顺序,而我因为用了MOVE-CORRESPONDING,把系统自动生成的字段顺序搞成了一堆字母排序。你如果直接往FIELDCAT里APPEND,顺序好看得很;一旦用MOVE或者从结构复制,顺序就完蛋。所以记住:字段目录内表的行序,就是ALV展示的列序,别指望它自动按逻辑给你排。想要自定义顺序,要么手工APPEND,要么在数据字典里定义一个专门的结构,但别在代码里用MOVE-CORRESPONDING去填字段目录。那阵子我被逼得把整个函数文档翻了个底朝天,才发现REUSE_ALV_GRID_LIST虽然叫GRID_LIST,但它本质上是把ALV网格和列表两种模式混在一起。你传入的I_CALLBACK_PROGRAM和I_CALLBACK_PF_STATUS_SET决定了它用哪套菜单,而I_STRUCTURE_NAME如果你给了,它就会自动生成字段目录;