*&---------------------------------------------------------------------*
*& 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.