目录
代码:
*Report ZRFI001_XFL_TEST REPORT ZRFI001_XFL_TEST . *定义ALV所需要用到的类型池 TYPE-POOLS SLIS. *****************************TABLES TABLES:MARD. *****************************Data Definitions *定义ALV所要显示的数据对应的内表数据类型及内表数据对象 DATA: BEGIN OF GT_MARD OCCURS 0, "一般物料資料 MATNR LIKE MARD-MATNR , "物料號碼 WERKS LIKE MARD-WERKS, "工厂 LABST LIKE MARD-LABST, "未限制使用的已估價庫存 END OF GT_MARD. DATA: BEGIN OF GT_MARD2 OCCURS 0, "一般物料資料 LINECOLOR(4) TYPE C, "行颜色 MATNR LIKE MARD-MATNR , "物料號碼 WERKS LIKE MARD-WERKS, "工厂 LABST LIKE MARD-LABST, "未限制使用的已估價庫存 END OF GT_MARD2. *定义一些显示ALV时所需要使用的变量 DATA: GS_LAYOUT TYPE SLIS_LAYOUT_ALV, GT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE. "定义FIELDCAT *****************************Selection Screen *定义选择屏幕 SELECT-OPTIONS: S_MATNR FOR MARD-MATNR. *****************************Main Process *声明各个选择屏幕事件块 START-OF-SELECTION. PERFORM GET_DATA. PERFORM CATA_LOG. PERFORM ALV_SHOW. END-OF-SELECTION. *&---------------------------------------------------------------------* *& Form GET_DATA *&---------------------------------------------------------------------* FORM GET_DATA . SELECT MATNR WERKS LABST INTO TABLE GT_MARD FROM MARD WHERE MATNR IN S_MATNR. SORT GT_MARD BY MATNR ASCENDING. LOOP AT GT_MARD. IF GT_MARD-LABST > 0. GT_MARD2-LINECOLOR = 'C310'. "设置行颜色的值 ELSE. GT_MARD2-LINECOLOR = ''. ENDIF. GT_MARD2-MATNR = GT_MARD-MATNR. GT_MARD2-WERKS = GT_MARD-WERKS. GT_MARD2-LABST = GT_MARD-LABST. APPEND GT_MARD2. GS_LAYOUT-INFO_FIELDNAME = 'LINECOLOR'. "指定数据输出内表中哪列存储的是颜色 CLEAR GT_MARD2. ENDLOOP. ENDFORM. " GET_DATA *&---------------------------------------------------------------------* *& Form CATA_LOG *&---------------------------------------------------------------------* FORM CATA_LOG . DEFINE FILEDCAT. GT_FIELDCAT-FIELDNAME = &1. "对应内表的字段名 GT_FIELDCAT-SELTEXT_L = &2. "输出列文本 GT_FIELDCAT-OUTPUTLEN = &3. "输出列长度 APPEND GT_FIELDCAT. END-OF-DEFINITION. FILEDCAT 'MATNR' '物料编号' 20. FILEDCAT 'WERKS' '工厂' 10. FILEDCAT 'LABST' '库存' 10. ENDFORM. " CATA_LOG *&---------------------------------------------------------------------* *& Form ALV_SHOW *&---------------------------------------------------------------------* FORM ALV_SHOW. * 显示ALV的函数 CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING I_CALLBACK_PROGRAM = SY-REPID IS_LAYOUT = GS_LAYOUT IT_FIELDCAT = GT_FIELDCAT[] I_SAVE = 'A' "保存全局,特定變式 TABLES T_OUTTAB = GT_MARD2 EXCEPTIONS PROGRAM_ERROR = 1 OTHERS = 2. ENDFORM. " ALV_SHOW
运行效果:
代码:
*Report ZRFI001_XFL_TEST REPORT ZRFI001_XFL_TEST . *定义ALV所需要用到的类型池 TYPE-POOLS SLIS. *****************************TABLES TABLES:MARD. *****************************Data Definitions *定义ALV所要显示的数据对应的内表数据类型及内表数据对象 DATA: BEGIN OF GT_MARD OCCURS 0, "一般物料資料 MATNR LIKE MARD-MATNR , "物料號碼 WERKS LIKE MARD-WERKS, "工厂 LABST LIKE MARD-LABST, "未限制使用的已估價庫存 END OF GT_MARD. *定义一些显示ALV时所需要使用的变量 DATA: GT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE. "定义FIELDCAT *****************************Selection Screen *定义选择屏幕 SELECT-OPTIONS: S_MATNR FOR MARD-MATNR. *****************************Main Process *声明各个选择屏幕事件块 START-OF-SELECTION. PERFORM GET_DATA. PERFORM CATA_LOG. PERFORM ALV_SHOW. END-OF-SELECTION. *&---------------------------------------------------------------------* *& Form GET_DATA *&---------------------------------------------------------------------* FORM GET_DATA . SELECT MATNR WERKS LABST INTO TABLE GT_MARD FROM MARD WHERE MATNR IN S_MATNR. ENDFORM. " GET_DATA *&---------------------------------------------------------------------* *& Form CATA_LOG *&---------------------------------------------------------------------* FORM CATA_LOG . DEFINE FILEDCAT. GT_FIELDCAT-FIELDNAME = &1. "对应内表的字段名 GT_FIELDCAT-SELTEXT_L = &2. "输出列文本 GT_FIELDCAT-EMPHASIZE = &3. "栏位的颜色 APPEND GT_FIELDCAT. END-OF-DEFINITION. FILEDCAT 'MATNR' '物料编号' 'C310'. FILEDCAT 'WERKS' '工厂' ''. FILEDCAT 'LABST' '库存' ''. ENDFORM. " CATA_LOG *&---------------------------------------------------------------------* *& Form ALV_SHOW *&---------------------------------------------------------------------* FORM ALV_SHOW. * 显示ALV的函数 CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING I_CALLBACK_PROGRAM = SY-REPID IT_FIELDCAT = GT_FIELDCAT[] I_SAVE = 'A' "保存全局,特定變式 TABLES T_OUTTAB = GT_MARD EXCEPTIONS PROGRAM_ERROR = 1 OTHERS = 2. ENDFORM. " ALV_SHOW
运行效果:
*&---------------------------------------------------------------------* *& REPORT ZMMTEST. *&---------------------------------------------------------------------* *& *&---------------------------------------------------------------------* REPORT ZMMTEST. TABLES: MSEG,MKPF,T156T,MAKT,T001W,MARC,MARD. DATA: BEGIN OF GT_MSEG OCCURS 0, WERKS LIKE MSEG-WERKS, BWART LIKE MSEG-BWART, SHKZG LIKE MSEG-SHKZG, BTEXT LIKE T156T-BTEXT, AUFNR LIKE MSEG-AUFNR, MATNR LIKE MSEG-MATNR, MAKTX LIKE MAKT-MAKTX, ERFMG LIKE MSEG-ERFMG, ERFME LIKE MSEG-ERFME, LGORT LIKE MSEG-LGORT, LGPBE LIKE MARD-LGPBE, BUDAT_MKPF LIKE MSEG-BUDAT_MKPF, SOBKZ LIKE MSEG-SOBKZ, MJAHR LIKE MSEG-MJAHR, MBLNR LIKE MSEG-MBLNR, ZEILE LIKE MSEG-ZEILE, KOSTL LIKE MSEG-KOSTL, SGTXT LIKE MSEG-SGTXT, EBELN LIKE MSEG-EBELN, EBELP LIKE MSEG-EBELP, LIFNR LIKE MSEG-LIFNR, SORTL LIKE LFA1-SORTL, BLDAT LIKE MKPF-BLDAT, BKTXT LIKE MKPF-BKTXT, BPMNG LIKE MSEG-BPMNG, BSTMG LIKE MSEG-BSTMG, BPRME LIKE MSEG-BPRME, CPUDT_MKPF LIKE MSEG-CPUDT_MKPF, CPUTM_MKPF LIKE MSEG-CPUTM_MKPF, XBLNR_MKPF LIKE MSEG-XBLNR_MKPF, USNAM_MKPF LIKE MSEG-USNAM_MKPF, ZSTATUS LIKE ZMMT012-ZSTATUS, ZUSER LIKE ZMMT012-ZUSER, ZDATE LIKE ZMMT012-ZDATE, ZTIME LIKE ZMMT012-ZTIME, CELLCOLOR TYPE LVC_T_SCOL, "单元格颜色 END OF GT_MSEG. DATA: IW_CELLCOLOR TYPE LVC_S_SCOL. *-->ALV TYPE-POOLS SLIS. DATA: GS_LAYOUT TYPE SLIS_LAYOUT_ALV, GT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV, WA_FIELDCAT TYPE SLIS_FIELDCAT_ALV. SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-B01. SELECT-OPTIONS: S_MATNR FOR MSEG-MATNR, S_MBLNR FOR MSEG-MBLNR, S_WERKS FOR MSEG-WERKS, S_LGORT FOR MSEG-LGORT, S_CHARG FOR MSEG-CHARG, S_LIFNR FOR MSEG-LIFNR, S_KUNNR FOR MSEG-KUNNR, S_BWART FOR MSEG-BWART, S_SOBKZ FOR MSEG-SOBKZ, S_AUFNR FOR MSEG-AUFNR, S_KDAUF FOR MSEG-MAT_KDAUF, S_KDPOS FOR MSEG-MAT_KDPOS. SELECTION-SCREEN END OF BLOCK B1. SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-B02. SELECT-OPTIONS: S_BUDAT FOR MSEG-BUDAT_MKPF, S_USNAM FOR MSEG-USNAM_MKPF, S_VGART FOR MKPF-VGART, S_XBLNR FOR MSEG-XBLNR_MKPF. SELECTION-SCREEN END OF BLOCK B2. START-OF-SELECTION. PERFORM: GET_DATA. PERFORM: ALV_SHOW. END-OF-SELECTION. FORM GET_DATA. GS_LAYOUT-COLWIDTH_OPTIMIZE = 'X'. GS_LAYOUT-COLTAB_FIELDNAME = 'CELLCOLOR'. "单元格颜色内表字段 DATA: L_INDEX LIKE SY-TABIX. SELECT MSEG~WERKS MSEG~BWART MSEG~SHKZG MSEG~AUFNR MSEG~MATNR MSEG~ERFMG MSEG~ERFME MSEG~LGORT MSEG~BUDAT_MKPF MSEG~SOBKZ MSEG~MJAHR MSEG~MBLNR MSEG~ZEILE MSEG~KOSTL MSEG~SGTXT MSEG~EBELN MSEG~EBELP MSEG~LIFNR MKPF~BLDAT MKPF~BKTXT MSEG~BPMNG MSEG~BSTMG MSEG~BPRME MSEG~CPUDT_MKPF MSEG~CPUTM_MKPF MSEG~XBLNR_MKPF MSEG~USNAM_MKPF ZMMT012~ZSTATUS ZMMT012~ZUSER ZMMT012~ZDATE ZMMT012~ZTIME LFA1~SORTL INTO CORRESPONDING FIELDS OF TABLE GT_MSEG FROM MSEG LEFT JOIN MKPF ON MKPF~MJAHR = MSEG~MJAHR AND MKPF~MBLNR = MSEG~MBLNR LEFT JOIN ZMMT012 ON ZMMT012~MJAHR = MSEG~MJAHR AND ZMMT012~MBLNR = MSEG~MBLNR AND ZMMT012~ZEILE = MSEG~ZEILE LEFT JOIN LFA1 ON LFA1~LIFNR = MSEG~LIFNR WHERE MATNR IN S_MATNR AND MSEG~MBLNR IN S_MBLNR AND MSEG~WERKS IN S_WERKS AND LGORT IN S_LGORT AND CHARG IN S_CHARG AND MSEG~LIFNR IN S_LIFNR AND MSEG~KUNNR IN S_KUNNR AND BWART IN S_BWART AND SOBKZ IN S_SOBKZ AND AUFNR IN S_AUFNR AND MAT_KDAUF IN S_KDAUF AND MAT_KDPOS IN S_KDPOS AND BUDAT_MKPF IN S_BUDAT AND USNAM_MKPF IN S_USNAM AND VGART_MKPF IN S_VGART AND XBLNR_MKPF IN S_XBLNR. SORT GT_MSEG BY MJAHR MBLNR ZEILE ASCENDING. LOOP AT GT_MSEG. L_INDEX = SY-TABIX. *-->异动类型名称 SELECT SINGLE BTEXT INTO GT_MSEG-BTEXT FROM T156T WHERE BWART = GT_MSEG-BWART AND SPRAS = SY-LANGU. *-->物料说明 SELECT SINGLE MAKTX INTO GT_MSEG-MAKTX FROM MAKT WHERE MATNR = GT_MSEG-MATNR AND SPRAS = SY-LANGU. *-->仓库 IF GT_MSEG-LGORT = SPACE. IF GT_MSEG-AUFNR <> SPACE. SELECT SINGLE LGPRO INTO GT_MSEG-LGORT FROM MARC WHERE WERKS = GT_MSEG-WERKS AND MATNR = GT_MSEG-MATNR. ELSE. SELECT SINGLE LGFSB INTO GT_MSEG-LGORT FROM MARC WHERE WERKS = GT_MSEG-WERKS AND MATNR = GT_MSEG-MATNR. ENDIF. ENDIF. *-->储位 SELECT SINGLE LGPBE INTO GT_MSEG-LGPBE FROM MARD WHERE WERKS = GT_MSEG-WERKS AND MATNR = GT_MSEG-MATNR AND LGORT = GT_MSEG-LGORT. CASE GT_MSEG-SHKZG. "根据借贷项类别设定颜色 WHEN 'H'. GT_MSEG-ERFMG = GT_MSEG-ERFMG * -1. GT_MSEG-BPMNG = GT_MSEG-BPMNG * -1. DEFINE SET_COLOR. IW_CELLCOLOR-FNAME = &1. IW_CELLCOLOR-COLOR-COL = 6. IW_CELLCOLOR-COLOR-INT = 1. IW_CELLCOLOR-COLOR-INV = 0. APPEND IW_CELLCOLOR TO GT_MSEG-CELLCOLOR. END-OF-DEFINITION. SET_COLOR 'ERFMG'. SET_COLOR 'BPMNG'. SET_COLOR 'BSTMG'. WHEN 'S'. DEFINE SET_COLOR. IW_CELLCOLOR-FNAME = &1. IW_CELLCOLOR-COLOR-COL = 5. IW_CELLCOLOR-COLOR-INT = 1. IW_CELLCOLOR-COLOR-INV = 0. APPEND IW_CELLCOLOR TO GT_MSEG-CELLCOLOR. END-OF-DEFINITION. SET_COLOR 'ERFMG'. SET_COLOR 'BPMNG'. SET_COLOR 'BSTMG'. ENDCASE. MODIFY GT_MSEG INDEX L_INDEX. ENDLOOP. ENDFORM. FORM ALV_SHOW . DATA: L_REPID TYPE SY-REPID, L_INCLNAME TYPE TRDIR-NAME, L_IDX LIKE SY-TABIX. CLEAR: GT_FIELDCAT[],WA_FIELDCAT. L_REPID = L_INCLNAME = SY-CPROG. GS_LAYOUT-COLWIDTH_OPTIMIZE = 'X'. CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE' EXPORTING I_PROGRAM_NAME = L_REPID I_INTERNAL_TABNAME = 'GT_MSEG' I_INCLNAME = L_INCLNAME CHANGING CT_FIELDCAT = GT_FIELDCAT EXCEPTIONS INCONSISTENT_INTERFACE = 1 PROGRAM_ERROR = 2 OTHERS = 3. LOOP AT GT_FIELDCAT INTO WA_FIELDCAT. L_IDX = SY-TABIX. CASE WA_FIELDCAT-FIELDNAME. WHEN 'SORTL'. WA_FIELDCAT-SELTEXT_S = WA_FIELDCAT-SELTEXT_M = WA_FIELDCAT-SELTEXT_L = '供应商名称'. WA_FIELDCAT-DDICTXT = 'S'. WHEN 'ZSTATUS'. WA_FIELDCAT-SELTEXT_S = WA_FIELDCAT-SELTEXT_M = WA_FIELDCAT-SELTEXT_L = '过账状态'. WA_FIELDCAT-DDICTXT = 'S'. WHEN 'ZUSER'. WA_FIELDCAT-SELTEXT_S = WA_FIELDCAT-SELTEXT_M = WA_FIELDCAT-SELTEXT_L = '过账用户'. WA_FIELDCAT-DDICTXT = 'S'. WHEN 'ZDATE'. WA_FIELDCAT-SELTEXT_S = WA_FIELDCAT-SELTEXT_M = WA_FIELDCAT-SELTEXT_L = '过账日期'. WA_FIELDCAT-DDICTXT = 'S'. WHEN 'ZTIME'. WA_FIELDCAT-SELTEXT_S = WA_FIELDCAT-SELTEXT_M = WA_FIELDCAT-SELTEXT_L = '过账时间'. WA_FIELDCAT-DDICTXT = 'S'. ENDCASE. CLEAR WA_FIELDCAT-KEY. MODIFY GT_FIELDCAT FROM WA_FIELDCAT INDEX L_IDX. ENDLOOP. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING I_CALLBACK_PROGRAM = SY-REPID IS_LAYOUT = GS_LAYOUT IT_FIELDCAT = GT_FIELDCAT[] * I_CALLBACK_PF_STATUS_SET = 'ALV_PF_STATUS' " 触发事件调用子程序 * I_CALLBACK_USER_COMMAND = 'ALV_USER_COMMAND' " 鼠标事件操作子程序 I_SAVE = 'A' TABLES T_OUTTAB = GT_MSEG EXCEPTIONS PROGRAM_ERROR = 1 OTHERS = 2. ENDFORM. " ALV_SHOW
运行效果: