ZPPRP030

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



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值