今天写一个REPORT,在选择屏幕上时,的一个选择条件需要自己写代码调用函数 F4IF_INT_TABLE_VALUE_REQUEST ,建立一个F4的搜索,代码感觉很简单的,结果写出来后发现,F4时,能弹出F4的数据选择屏幕,看到有几行数据,但F4显示的数据内容就是不能出来,如图,明显是有一行数据的,但就是不会显示出来。
后来在网上才找到原因:
原因是自定义表没有表头文本,内表结构里的字段不能用C类型,而应参照数据表里的字段类型
解决办法就是重新定义一下,函数中调用内容的数据结构,比如,参考数据表中的字段定义,完整的,代码如下
1 |
SELECT-OPTIONS:S_PROID FOR ZSDR3017-PROID NO-EXTENSION NO INTERVALS . |
1 2 |
AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_PROID-LOW. PERFORM F4_PROID_F4. |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
FORM F4_PROID_F4. DATA: BEGIN OF LS_PRPS, POSKI LIKE PRPS-POSKI, POST1 LIKE PRPS-POST1, END OF LS_PRPS. DATA: LT_PRPS LIKE TABLE OF LS_PRPS. DATA: LL_ROWCOUNT TYPE INT4. SELECT POSKI POST1 FROM PRPS INTO TABLE LT_PRPS WHERE "PSPRI = GV_NPRIO AND STUFE = 1 AND LOEVM = ''. SORT LT_PRPS BY POSKI. LL_ROWCOUNT = LINES( LT_PRPS ) . IF LL_ROWCOUNT > 0. "多个他们,显示帮助 CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST' EXPORTING RETFIELD = 'POSKI' "大写,可选值内表的字段名 VALUE_ORG = 'S' "就写’S’ DYNPPROG = SY-REPID "返回的输入框所在的main program DYNPNR = SY-DYNNR "返回的输入框所在屏幕 DYNPROFIELD = 'S_PROID-LOW'"返回的输入框名 TABLES VALUE_TAB = LT_PRPS "可选值的内表,此值在PBO中读取 EXCEPTIONS PARAMETER_ERROR = 1 NO_VALUES_FOUND = 2 OTHERS = 3. IF SY-SUBRC <> 0. ENDIF. ENDIF. ENDFORM. " F4_PROID_F4 |