*&---------------------------------------------------------------------* *& Report ZPPRP030 *&---------------------------------------------------------------------* *& *&---------------------------------------------------------------------* REPORT ZPPRP030. INCLUDE ZPPRP030TOP. INCLUDE ZPPRP030ALV. *生成按钮 SELECTION-SCREEN: FUNCTION KEY 2. *初始化显示按钮 INITIALIZATION. COMM_SMP_DYNTXT-ICON_ID = ICON_CHANGE. COMM_SMP_DYNTXT-ICON_TEXT = '下载模版'. SSCRFIELDS-FUNCTXT_02 = COMM_SMP_DYNTXT. *自定义按钮点击事件 AT SELECTION-SCREEN. CASE SSCRFIELDS-UCOMM. WHEN 'FC02'. PERFORM FUNC_006. WHEN OTHERS. ENDCASE. *执行按钮点击事件 START-OF-SELECTION. IF COMM_P_F = ''. MESSAGE '请选择模版' TYPE 'I'. EXIT. ENDIF. PERFORM FUNC_ITAB_GET_DATA."获取数据 PERFORM FUNC_ALV_SHOW. "显示ALV
*&---------------------------------------------------------------------* *& 包含 ZPPRP030TOP *&---------------------------------------------------------------------* TABLES: SSCRFIELDS."选择屏幕上的字段 TYPE-POOLS: ICON."图标 DATA: COMM_SMP_DYNTXT TYPE SMP_DYNTXT."菜单制作器:动态文本的程序接口 DATA: BEGIN OF COMM_WTAB_001, MATNR(18)," LIKE MAKT-MATNR, MAKTX LIKE MAKT-MAKTX, MAKTXID TYPE CHAR10, END OF COMM_WTAB_001. DATA: BEGIN OF COMM_WTAB_002, CHECK(1), MATNR(18)," LIKE MAKT-MATNR, MAKTX LIKE MAKT-MAKTX, MAKTXID TYPE CHAR10, ZMSG TYPE STRING, END OF COMM_WTAB_002. DATA: BEGIN OF COMM_WTAB_003, MAKTXID TYPE CHAR10, END OF COMM_WTAB_003. DATA: COMM_ALV_ITAB LIKE TABLE OF COMM_WTAB_002 WITH HEADER LINE. PARAMETERS: COMM_P_F TYPE RLGRAP-FILENAME. AT SELECTION-SCREEN ON VALUE-REQUEST FOR COMM_P_F. CALL FUNCTION 'WS_FILENAME_GET' EXPORTING MASK = ',EXCEL FILE,*.XLS;*.XLSX;' MODE = 'O' IMPORTING FILENAME = COMM_P_F EXCEPTIONS INV_WINSYS = 1 NO_BATCH = 2 SELECTION_CANCEL = 3 SELECTION_ERROR = 4 OTHERS = 5.
*&---------------------------------------------------------------------* *& 包含 ZPPRP030ALV *&---------------------------------------------------------------------* *---------------------------------------------------------------------* * ALV字段显示控制 *---------------------------------------------------------------------* FORM COMM_ALV_FIELD_INIT TABLES FUNC_LVC_T_FCAT TYPE LVC_T_FCAT USING FUNC_FIELDNAME TYPE C " 字段名 FUNC_SCRTEXT_M TYPE C " 标题 FUNC_COL_POS TYPE I " 所在列 FUNC_OUTPUTLEN TYPE I " 输出长度 FUNC_EMPHASIZE TYPE C " 高亮显示 FUNC_KEY TYPE C " 主键 FUNC_CHECKBOX TYPE C " 显示checkbox FUNC_EDIT TYPE C " 是否可编辑 FUNC_FIX_COLUMN TYPE C " 固定列 FUNC_NO_ZERO TYPE C " 为输出隐藏零 . DATA: FUNC_LVC_S_FCAT TYPE LVC_S_FCAT. FUNC_LVC_S_FCAT-FIELDNAME = FUNC_FIELDNAME. FUNC_LVC_S_FCAT-SCRTEXT_M = FUNC_SCRTEXT_M. FUNC_LVC_S_FCAT-COL_POS = FUNC_COL_POS. FUNC_LVC_S_FCAT-OUTPUTLEN = FUNC_OUTPUTLEN. FUNC_LVC_S_FCAT-EMPHASIZE = FUNC_EMPHASIZE. FUNC_LVC_S_FCAT-KEY = FUNC_KEY. FUNC_LVC_S_FCAT-CHECKBOX = FUNC_CHECKBOX. FUNC_LVC_S_FCAT-EDIT = FUNC_EDIT. FUNC_LVC_S_FCAT-FIX_COLUMN = FUNC_FIX_COLUMN. FUNC_LVC_S_FCAT-NO_ZERO = FUNC_NO_ZERO. APPEND FUNC_LVC_S_FCAT TO FUNC_LVC_T_FCAT. CLEAR FUNC_LVC_S_FCAT. ENDFORM. *---------------------------------------------------------------------* * 绑定按钮 *---------------------------------------------------------------------* FORM FUNC_ALV_BTN_INIT USING FUNC_SLIS_T_EXTAB TYPE SLIS_T_EXTAB . SET PF-STATUS 'ZPPRP030STATUS'. ENDFORM. *---------------------------------------------------------------------* * 绑定按钮事件 *---------------------------------------------------------------------* FORM FUNC_ALV_BTN_EVENT USING FUNC_SY_UCOMM LIKE SY-UCOMM FUNC_SLIS_SELFIELD TYPE SLIS_SELFIELD . DATA: FUNC_CL_GUI_ALV_GRID TYPE REF TO CL_GUI_ALV_GRID. CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR' IMPORTING E_GRID = FUNC_CL_GUI_ALV_GRID. CALL METHOD FUNC_CL_GUI_ALV_GRID->CHECK_CHANGED_DATA. FUNC_SLIS_SELFIELD-REFRESH = 'X'. READ TABLE COMM_ALV_ITAB INDEX FUNC_SLIS_SELFIELD-TABINDEX. CASE FUNC_SY_UCOMM. WHEN '&FUNC_001'. PERFORM FUNC_001. WHEN '&FUNC_002'. PERFORM FUNC_002. WHEN '&FUNC_003'. PERFORM FUNC_003. WHEN '&FUNC_004'. PERFORM FUNC_001. WHEN '&FUNC_005'. PERFORM FUNC_005. WHEN OTHERS. ENDCASE. CLEAR:FUNC_SY_UCOMM. ENDFORM. *---------------------------------------------------------------------* * 显示ALV *---------------------------------------------------------------------* FORM FUNC_ALV_SHOW. DATA: FUNC_LVC_S_FCAT TYPE TABLE OF LVC_S_FCAT WITH HEADER LINE."设定输出目录 DATA: FUNC_LVC_S_LAYO TYPE LVC_S_LAYO."对输出样式的设定 FUNC_LVC_S_LAYO-CWIDTH_OPT = 'X'. FUNC_LVC_S_LAYO-CWIDTH_OPT = 'X'. FUNC_LVC_S_LAYO-STYLEFNAME = 'FIELD_STYLE'. PERFORM COMM_ALV_FIELD_INIT TABLES FUNC_LVC_S_FCAT USING 'CHECK' '选择' '' '' '' '' 'X' 'X' '' ''. PERFORM COMM_ALV_FIELD_INIT TABLES FUNC_LVC_S_FCAT USING 'MATNR' '物料编码' '' '' '' '' '' '' '' ''. PERFORM COMM_ALV_FIELD_INIT TABLES FUNC_LVC_S_FCAT USING 'MAKTX' '描述' '' '' '' '' '' '' '' ''. PERFORM COMM_ALV_FIELD_INIT TABLES FUNC_LVC_S_FCAT USING 'ZMSG' '是否成功' '' '' '' '' '' '' '' ''. PERFORM COMM_ALV_FIELD_INIT TABLES FUNC_LVC_S_FCAT USING 'MAKTXID' '长文本id' '' '' '' '' '' '' '' ''. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC' EXPORTING I_CALLBACK_PROGRAM = SY-CPROG I_CALLBACK_PF_STATUS_SET = 'FUNC_ALV_BTN_INIT' "绑定按钮 I_CALLBACK_USER_COMMAND = 'FUNC_ALV_BTN_EVENT' "自定义工具栏的事件 IT_FIELDCAT_LVC = FUNC_LVC_S_FCAT[] IS_LAYOUT_LVC = FUNC_LVC_S_LAYO TABLES T_OUTTAB = COMM_ALV_ITAB "ALV 输出的内表 EXCEPTIONS PROGRAM_ERROR = 1 OTHERS. ENDFORM. *---------------------------------------------------------------------* * itab赋值 *---------------------------------------------------------------------* FORM FUNC_ITAB_GET_DATA. DATA: FUNC_ITAB LIKE TABLE OF COMM_WTAB_001 WITH HEADER LINE. DATA: FUNC_TRUXS_T_TEXT_DATA TYPE TRUXS_T_TEXT_DATA. CLEAR: COMM_ALV_ITAB, COMM_ALV_ITAB[], FUNC_ITAB, FUNC_ITAB[]. CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP' EXPORTING I_LINE_HEADER = 'X' I_TAB_RAW_DATA = FUNC_TRUXS_T_TEXT_DATA I_FILENAME = COMM_P_F TABLES I_TAB_CONVERTED_DATA = FUNC_ITAB EXCEPTIONS CONVERSION_FAILED = 1 OTHERS = 2. LOOP AT FUNC_ITAB. COMM_ALV_ITAB-CHECK = 'X'. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' "前导0 物料编码 EXPORTING INPUT = FUNC_ITAB-MATNR IMPORTING OUTPUT = COMM_ALV_ITAB-MATNR. COMM_ALV_ITAB-MAKTX = FUNC_ITAB-MAKTX. APPEND COMM_ALV_ITAB. ENDLOOP. ENDFORM. FORM FUNC_001. COMM_ALV_ITAB-CHECK = 'X'. MODIFY COMM_ALV_ITAB FROM COMM_ALV_ITAB TRANSPORTING CHECK WHERE CHECK = ''. CLEAR COMM_ALV_ITAB. ENDFORM. FORM FUNC_002. COMM_ALV_ITAB-CHECK = ''. MODIFY COMM_ALV_ITAB FROM COMM_ALV_ITAB TRANSPORTING CHECK WHERE CHECK = 'X'. CLEAR COMM_ALV_ITAB. ENDFORM. FORM FUNC_003. READ TABLE COMM_ALV_ITAB WITH KEY CHECK = 'X'. "是否有选中的记录 IF SY-SUBRC <> 0. MESSAGE '请选择' TYPE 'S'. RETURN. ENDIF. DATA: FUNC_ITAB LIKE TABLE OF COMM_WTAB_003 WITH HEADER LINE. DATA: FUNC_ZTPP098 LIKE ZTPP098. DATA: FUNC_TEXTNAME TYPE THEAD-TDNAME. "长文本ID DATA: FUNC_TLINES TYPE STANDARD TABLE OF TLINE . "长文本内容 DATA: FUNC_TLINE TYPE TLINE . DATA: FUNC_NEXTNO TYPE CHAR10. "长文本ID DATA: FUNC_HEADER TYPE THEAD . LOOP AT COMM_ALV_ITAB WHERE CHECK NE ''. IF COMM_ALV_ITAB[] IS NOT INITIAL. CLEAR: FUNC_ITAB, FUNC_ITAB[], FUNC_ZTPP098, FUNC_TEXTNAME, FUNC_TLINES[], FUNC_TLINE, FUNC_NEXTNO, FUNC_HEADER. SELECT ZTPP098~MAKTXID INTO CORRESPONDING FIELDS OF TABLE FUNC_ITAB FROM ZTPP098 WHERE MATNR = COMM_ALV_ITAB-MATNR. IF SY-SUBRC IS INITIAL."有数据 LOOP AT FUNC_ITAB. "修改长文本 UPDATE ZTPP098 SET MDFUSER = SY-UNAME MDFDATE = SY-DATUM MDFTIME = SY-UZEIT WHERE MATNR = COMM_ALV_ITAB-MATNR. * FUNC_HEADER-TDID = '001'. * FUNC_HEADER-TDSPRAS = '1'. * FUNC_HEADER-TDNAME = FUNC_ITAB-MAKTXID."长文本ID * FUNC_HEADER-TDOBJECT = 'ZLSJQ'. * * FUNC_TLINE-TDFORMAT = '*'. * FUNC_TLINE-TDLINE = COMM_ALV_ITAB-MAKTX. * APPEND FUNC_TLINE TO FUNC_TLINES."长文本内容 * * CALL FUNCTION 'SAVE_TEXT' * EXPORTING * CLIENT = SY-MANDT * HEADER = FUNC_HEADER * TABLES * LINES = FUNC_TLINES. * . FUNC_TEXTNAME = FUNC_ITAB-MAKTXID."长文本ID FUNC_TLINE-TDFORMAT = '*' . FUNC_TLINE-TDLINE = COMM_ALV_ITAB-MAKTX. APPEND FUNC_TLINE TO FUNC_TLINES."长文本内容 CALL FUNCTION 'CREATE_TEXT' EXPORTING FID = '001' "文本对象下面的id FLANGUAGE = '1' "语言代码 FNAME = FUNC_TEXTNAME "长文本ID FOBJECT = 'ZLSJQ' "文本对象 SAVE_DIRECT = 'X' "直接保存标识 TABLES FLINES = FUNC_TLINES EXCEPTIONS NO_INIT = 1 NO_SAVE = 2 OTHERS = 3. IF SY-SUBRC = 0. LOOP AT COMM_ALV_ITAB WHERE MAKTX = COMM_ALV_ITAB-MAKTX. COMM_ALV_ITAB-ZMSG = '修改成功'. COMM_ALV_ITAB-MAKTXID = FUNC_ITAB-MAKTXID."显示生成的长文本id" MODIFY COMM_ALV_ITAB. ENDLOOP. ELSE. LOOP AT COMM_ALV_ITAB WHERE MAKTX = COMM_ALV_ITAB-MAKTX. COMM_ALV_ITAB-ZMSG = '修改失败'. MODIFY COMM_ALV_ITAB. ENDLOOP. ENDIF. ENDLOOP. ELSE. "增加长文本 CALL FUNCTION 'NUMBER_GET_NEXT' EXPORTING NR_RANGE_NR = '01' "上面起始编号前面的序号 OBJECT = 'ZPP_001' "编号对象 IMPORTING NUMBER = FUNC_NEXTNO. FUNC_ZTPP098-MATNR = COMM_ALV_ITAB-MATNR. FUNC_ZTPP098-MAKTXID = FUNC_NEXTNO. FUNC_ZTPP098-ADDUSER = SY-UNAME. FUNC_ZTPP098-ADDDATE = SY-DATUM. FUNC_ZTPP098-ADDTIME = SY-UZEIT. INSERT ZTPP098 FROM FUNC_ZTPP098. FUNC_TEXTNAME = FUNC_NEXTNO."长文本ID FUNC_TLINE-TDFORMAT = '*' . FUNC_TLINE-TDLINE = COMM_ALV_ITAB-MAKTX. APPEND FUNC_TLINE TO FUNC_TLINES."长文本内容 CALL FUNCTION 'CREATE_TEXT' EXPORTING FID = '001' "文本对象下面的id FLANGUAGE = '1' "语言代码 FNAME = FUNC_TEXTNAME "长文本ID FOBJECT = 'ZLSJQ' "文本对象 SAVE_DIRECT = 'X' "直接保存标识 TABLES FLINES = FUNC_TLINES EXCEPTIONS NO_INIT = 1 NO_SAVE = 2 OTHERS = 3. IF SY-SUBRC = 0. LOOP AT COMM_ALV_ITAB WHERE MAKTX = COMM_ALV_ITAB-MAKTX. COMM_ALV_ITAB-ZMSG = '添加成功'. COMM_ALV_ITAB-MAKTXID = FUNC_TEXTNAME."显示生成的长文本id" MODIFY COMM_ALV_ITAB. ENDLOOP. ELSE. LOOP AT COMM_ALV_ITAB WHERE MAKTX = COMM_ALV_ITAB-MAKTX. COMM_ALV_ITAB-ZMSG = '添加失败'. MODIFY COMM_ALV_ITAB. ENDLOOP. ENDIF. ENDIF. ENDIF. ENDLOOP. ENDFORM. FORM FUNC_005. DELETE FROM ZTPP098. IF SY-SUBRC IS INITIAL. MESSAGE '删除成功' TYPE 'S'. RETURN. ELSE. MESSAGE '无数据' TYPE 'S'. RETURN. ENDIF. ENDFORM. FORM FUNC_006. DATA: FUNC_WWWDATATAB LIKE WWWDATATAB, FUNC_RLGRAP_FILENAME TYPE RLGRAP-FILENAME. CALL FUNCTION 'WS_FILENAME_GET' EXPORTING DEF_FILENAME = 'ZPPRP030模版.xls' MASK = '.xls;' MODE = 'S' TITLE = '下载' IMPORTING FILENAME = FUNC_RLGRAP_FILENAME EXCEPTIONS SELECTION_CANCEL = 1 OTHERS = 2. SELECT SINGLE * INTO CORRESPONDING FIELDS OF FUNC_WWWDATATAB FROM WWWDATA WHERE OBJID = 'ZPPRP030'. CALL FUNCTION 'DOWNLOAD_WEB_OBJECT' " EXPORTING KEY = FUNC_WWWDATATAB DESTINATION = FUNC_RLGRAP_FILENAME. ENDFORM.