在做一些报表时,业务顾问直接的需求就是结果要与**标准报表的结果相同,这时候,如我们要完全读懂标准程序取数逻辑,那太难了,所以就会需要直接调用标准程序,然后从程序中获取标准程序中得到的数据集来使用。
以下是程序是项目是需要自定义报表的取数据逻辑与标准事务码FBL5N相同,并取出FBL5N中ALV结果的一段代码。
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 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
FORM PRM_GET_FBL5N . * SELECT * * INTO CORRESPONDING FIELDS OF TABLE GT_ALV * FROM BSID * WHERE BUKRS = P_BUKRS * AND GJAHR = P_GJAHR *" AND KUNNR IN S_KUNNR * AND UMSKS = '' * AND BUDAT <= G_BUDAT * . RANGES: II_BUKRS FOR BKPF-BUKRS, II_KUNNR FOR KNA1-KUNNR. DATA: LS_DATA TYPE REF TO DATA. FIELD-SYMBOLS: <LT_DATA> TYPE TABLE, <L_DATA> TYPE DATA, <FS>. CL_SALV_BS_RUNTIME_INFO=>SET( DISPLAY = '' METADATA = '' DATA = 'X' ). II_BUKRS-SIGN = 'I'. II_BUKRS-OPTION = 'EQ'. II_BUKRS-LOW = P_BUKRS. APPEND II_BUKRS. SUBMIT RFITEMAR "FBL5N WITH X_OPSEL EQ 'X' "未清项目 WITH X_CLSEL EQ '' "已清项目 WITH X_AISEL EQ '' "全部项目 WITH X_NORM EQ 'X' "普通项目 WITH X_SHBV EQ '' "特别总账业务 WITH X_MERK EQ '' "注释项目 WITH X_PARK EQ '' "预制项目 WITH X_APAR EQ '' "供应商项目 WITH PA_STIDA EQ G_BUDAT "未清关键日期 WITH DD_BUKRS IN II_BUKRS "公司 WITH DD_KUNNR IN II_KUNNR AND RETURN. TRY. CL_SALV_BS_RUNTIME_INFO=>GET_DATA_REF( IMPORTING R_DATA = LS_DATA ). ASSIGN LS_DATA->* TO <LT_DATA>. CATCH CX_SALV_BS_SC_RUNTIME_INFO. MESSAGE 'UNABLE TO RETRIEVE ALV DATA' TYPE 'E'. LEAVE LIST-PROCESSING. ENDTRY. CL_SALV_BS_RUNTIME_INFO=>CLEAR_ALL( ). * L_INES = LINES( <LT_DATA> ). IF <LT_DATA> IS ASSIGNED. LOOP AT <LT_DATA> ASSIGNING <L_DATA>. MOVE-CORRESPONDING <L_DATA> TO GS_ALV. ASSIGN COMPONENT 'KONTO' OF STRUCTURE <L_DATA> TO <FS>. IF SY-SUBRC = 0. GS_ALV-KUNNR = <FS>."取客户编码 ENDIF. ASSIGN COMPONENT 'DMSHB' OF STRUCTURE <L_DATA> TO <FS>. IF SY-SUBRC = 0. GS_ALV-DMBTR = <FS>."本位币金额 ENDIF. APPEND GS_ALV TO GT_ALV. ENDLOOP. ENDIF. ENDFORM. " PRM_GET_FBL5N |