無名经验总结与分享(SAP)            十年树木,百年树人

开发:报表公共单元(一)常用函数

*&---------------------------------------------------------------------*
*&  Include           ZRPT_FUN
*   共用函数
*
*
*&---------------------------------------------------------------------*

 

SELECTION-SCREEN BEGIN OF BLOCK B3 WITH FRAME TITLE TEXT-003.
PARAMETERS: P_VARI LIKE DISVARIANT-VARIANT MODIF ID PVR.
SELECTION-SCREEN END OF BLOCK B3.




*按描述隐藏选择屏幕上组件
FORM P_NO_VAR .

  LOOP AT SCREEN.
    IF SCREEN-NAME 'P_VARI'
       OR SCREEN-NAME '%_P_VARI_%_APP_%-TEXT'.                     "前面描述 lab签

      SCREEN-ACTIVE '1'.
      SCREEN-INVISIBLE '1'.
      SCREEN-INPUT 0.
      MODIFY SCREEN.

    ENDIF.

  ENDLOOP.

*AT SELECTION-SCREEN OUTPUT .
*
*  PERFORM P_NO_VAR.
ENDFORM.





*单位转换
FORM F_GET_UNIT USING MUNT.

  CALL FUNCTION 'CONVERSION_EXIT_CUNIT_OUTPUT'
    EXPORTING
      INPUT    = MUNT
      LANGUAGE = SY-LANGU
    IMPORTING
      OUTPUT   = MUNT.

  IF SY-SUBRC > 0.

    CALL FUNCTION 'CONVERSION_EXIT_CUNIT_OUTPUT'
      EXPORTING
        INPUT    = MUNT
        LANGUAGE '1'
      IMPORTING
        OUTPUT   = MUNT.

  ENDIF.


ENDFORM.

*&---------------------------------------------------------------------*
*&  补零功能
*&---------------------------------------------------------------------*
FORM F_ADD_ZERO  USING VI_INPUT.
  CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
    EXPORTING
      INPUT  = VI_INPUT
    IMPORTING
      OUTPUT = VI_INPUT.

ENDFORM.                    " f_add_zero

*&---------------------------------------------------------------------*
*&      Form  F_CUT_ZERO
*&---------------------------------------------------------------------*
*       去零功能
*----------------------------------------------------------------------*
*      -->VI_OUTPUT  text
*----------------------------------------------------------------------*
FORM F_CUT_ZERO  USING VI_OUTPUT .

  CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
    EXPORTING
      INPUT  = VI_OUTPUT
    IMPORTING
      OUTPUT = VI_OUTPUT.

ENDFORM.                    "f_cut_zero

*&---------------------------------------------------------------------*
*&      Form  SHOWPB
*&---------------------------------------------------------------------*
*       任务栏显示信息
*----------------------------------------------------------------------*
*      -->MTEXT      text
*----------------------------------------------------------------------*
FORM SHOWPB USING MTEXT.
  CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
    EXPORTING
      TEXT = MTEXT.
ENDFORM.                    "ShowPB

*IF not ( SY-UNAME = 'FANXZ' OR SY-UNAME = 'LIUYL' OR SY-UNAME = 'BI01').
*  CALL FUNCTION 'POPUP_TO_DISPLAY_TEXT'
*    EXPORTING
*      TITEL     = '警告'
*      TEXTLINE1 = '系统资源不足,请稍候再试!'.
*  RETURN.
*ENDIF.
**产生GUID
FORM GET_GUID USING AGUID.
  DATA: GD TYPE GUID_32.
  CALL FUNCTION 'GUID_CREATE'
    IMPORTING
      EV_GUID_32 = GD.
  MOVE GD TO AGUID.
ENDFORM.                    "ShowPB

**显示ALV数据
FORM SHOW_ALV TABLES ITAB USING TITLE STR .

  CALL FUNCTION 'ZLXS_ALV'
    EXPORTING
      I_TITLE    TITLE
      FIELD_LIST = STR
      IS_VARI    = P_VARI
    TABLES
      I_ITAB     = ITAB.

ENDFORM.

**显示ALV数据
FORM GET_ALV_STR USING STRUC_NAME  STR.

  DATA BEGIN OF TABLE_STRUCTURE OCCURS 10.
          INCLUDE STRUCTURE DFIES.
  DATA END OF TABLE_STRUCTURE.
  DATA TABLE_TYPE TYPE DD02V-TABCLASS.

  DATA: QUERY_TABLE LIKE  DD02L-TABNAME.

  MOVE STRUC_NAME TO QUERY_TABLE.

*  DATA: QUERY_FIELD LIKE  DD02L-TABNAME.
  CALL FUNCTION 'DDIF_FIELDINFO_GET'
    EXPORTING
      TABNAME        = QUERY_TABLE
*     FIELDNAME      = ' '
      LANGU          = sy-langu
*     LFIELDNAME     = ' '
*     ALL_TYPES      = ' '
*     GROUP_NAMES    = ' '
    IMPORTING
*     X030L_WA       =
      DDOBJTYPE      = TABLE_TYPE
*     DFIES_WA       =
*     LINES_DESCR    =
    TABLES
      DFIES_TAB      = TABLE_STRUCTURE
*     FIXED_VALUES   =
    EXCEPTIONS
      NOT_FOUND      1
      INTERNAL_ERROR 2
      OTHERS         3.

  CLEAR STR.
  LOOP AT TABLE_STRUCTURE.
    CONCATENATE STR  TABLE_STRUCTURE-FIELDNAME ',' TABLE_STRUCTURE-FIELDTEXT '|' INTO STR.
  ENDLOOP.

*    CHECK TABLE_STRUCTURE[] IS NOT INITIAL.


ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  GETCNT
*&---------------------------------------------------------------------*
*       报表使用次数统计
*----------------------------------------------------------------------*
FORM GETCNT.
  DATA: LS_TAB LIKE ZRPT_CNT.
  SELECT SINGLE * INTO LS_TAB
  FROM ZRPT_CNT
  WHERE  RPTNAME = SY-REPID
    AND SPMON = SY-DATUM+0(6)
    AND USR = SY-UNAME .
  IF SY-SUBRC 0.
    LS_TAB-RPTCNT = LS_TAB-RPTCNT + 1.
  ELSE.
    LS_TAB-RPTCNT 1.
  ENDIF.
  LS_TAB-RPTNAME = SY-REPID.
  LS_TAB-USR = SY-UNAME.
  LS_TAB-UDAT = SY-DATUM.
  LS_TAB-UTIM =  SY-UZEIT.
  LS_TAB-SPMON = SY-DATUM+0(6).
  IF LS_TAB-SDAT IS INITIAL.
    LS_TAB-SDAT = SY-DATUM.
  ENDIF.

  MODIFY ZRPT_CNT FROM LS_TAB.
  COMMIT WORK AND WAIT.
ENDFORM.                    "GETCNT




INITIALIZATION.
  PERFORM GETCNT.


AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_VARI.
  CALL FUNCTION 'ZLXS_ALV_VARIANT'
    IMPORTING
      P_VARI = P_VARI.





*&----------------------------------------------------*
*&      FORM  my_EXCEL_GET
*&----------------------------------------------------*
*       TCODE: SMW0 WEBRFC 的二进制数据
*-----------------------------------------------------*
*      -->P_OBJID TYPE WWWDATA-OBJID 文件下载
*----------------------------------------------------*
FORM MY_EXCEL_GET USING P_OBJID TYPE WWWDATA-OBJID.
  DATA:L_OBJDATA     LIKE WWWDATATAB,
       L_DESTINATION LIKE RLGRAP-FILENAME,
       L_RC          LIKE SY-SUBRC,
       L_ERRTXT      TYPE STRING.

  DATA:   L_FULLPATH  TYPE STRING,
          L_EXTENSION TYPE STRING,
          L_FNAME     LIKE RLGRAP-FILENAME,
          "     L_RC        LIKE SY-SUBRC,
          L_FORMKEY   LIKE  WWWDATATAB.

  L_EXTENSION = P_OBJID.

  PERFORM MY_GET_FILE_NAME USING '.xls'
                              'Excel|*.xls,*.xlsx'
                        CHANGING L_FULLPATH.
  IF L_FULLPATH = SPACE.
    MESSAGE '请选择下载文件名' TYPE 'E'.
  ELSE.
    L_FNAME = L_FULLPATH.
    SELECT SINGLE RELID OBJID
      FROM WWWDATA
      INTO CORRESPONDING FIELDS OF L_OBJDATA
      WHERE RELID 'MI'
        AND OBJID = P_OBJID .

    IF SY-SUBRC NE OR L_OBJDATA-OBJID = SPACE.
      MESSAGE E001(00WITH '文件不存在!'.
    ELSE.
      CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
        EXPORTING
          KEY         = L_OBJDATA
          DESTINATION = L_FNAME
        IMPORTING
          RC          = L_RC
        CHANGING
          TEMP        = L_FNAME.
      IF L_RC NE 0.
        MESSAGE E001(00WITH '文件下载失败!'.
      ENDIF.
    ENDIF.
  ENDIF.

ENDFORM"my_EXCEL_GET
FORM MY_GET_FILE_NAME USING P_EXTENSION                             P_FILE_FILTER                      

CHANGING P_FULLPATH.   
DATA: L_FILENAME TYPE STRING,         L_PATH     
TYPE STRING,         L_FULLPATH 
TYPE STRING,         L_TITILE   
TYPE STRING,         L_INIT_DIR 
TYPE STRING.   

CLEAR P_FULLPATH.

*  L_TITILE    = TEXT-T04.
*  L_INIT_DIR  = TEXT-T03.   
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG     
EXPORTING       WINDOW_TITLE         
= L_TITILE       DEFAULT_EXTENSION    
'.xlsx'       INITIAL_DIRECTORY    
= L_INIT_DIR       PROMPT_ON_OVERWRITE  
'X'       FILE_FILTER          
= P_FILE_FILTER     
CHANGING       FILENAME             
= L_FILENAME       PATH                 
= L_PATH       FULLPATH             
= L_FULLPATH     
EXCEPTIONS       CNTL_ERROR           
1       ERROR_NO_GUI         
2       NOT_SUPPORTED_BY_GUI 
3       
OTHERS               4.   
IF SY-SUBRC <> 0.     
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO                
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.   
ENDIF.   P_FULLPATH 

= L_FULLPATH.
ENDFORM" my_GET_FILE_NAME
FORM GET_DOC_DOWN.   
PERFORM MY_EXCEL_GET USING SY-CPROG.
ENDFORM.

posted @ 2021-01-11 16:33  無名  阅读(72)  评论(0编辑  收藏  举报
Twttafku@163.com
十年树木,百年树人