ALV基础二:ALV的扩展功能详解编程语言

参考这个,做扩展,有些人喜欢用OO ALV有些喜欢用普通的CALL FUNC ALV。。。我只用LVC。。。

先说明一下,每个报表程序,我都会自定义工具栏,只是为了以防万一。工具栏有个一键填充的功能,可以把ALV常用的按钮都添加到工具栏,所以不需要自己去想加什么按钮。。

双击按钮进入工具栏界面,

ALV基础二:ALV的扩展功能详解编程语言

入图,选择调整模板

ALV基础二:ALV的扩展功能详解编程语言

普通的LIST,选择list viewer,下面那个复制程序的工具栏还不如直接从程序复制快。。。然后就可以了。

打印:https://www.cnblogs.com/sapSB/p/7735719.html

编辑:https://www.cnblogs.com/sapSB/p/5168184.html

今天新做的个测试例子:

REPORT YLY001. 
 
DATA:GT_FIELDCAT TYPE LVC_T_FCAT. 
DATA GS_FIELDCAT LIKE LINE OF GT_FIELDCAT. 
DATA LS_LAYOUT TYPE LVC_S_LAYO. 
DATA LT_EVENT TYPE SLIS_T_EVENT. 
DATA LS_EVENT LIKE LINE OF LT_EVENT. 
DATA LR_GRID TYPE REF TO CL_GUI_ALV_GRID. 
DATA:GT_T100 TYPE STANDARD TABLE OF T100, 
     GS_T100 TYPE T100. 
 
DEFINE APPEND_FIELDCAT . 
  CLEAR GS_FIELDCAT. 
  GS_FIELDCAT-FIELDNAME = &1. 
  GS_FIELDCAT-SCRTEXT_L = &2. 
  GS_FIELDCAT-OUTPUTLEN = &3. 
  GS_FIELDCAT-NO_ZERO = &4. 
  GS_FIELDCAT-EDIT = &5. 
  APPEND GS_FIELDCAT TO GT_FIELDCAT. 
END-OF-DEFINITION. 
 
 
START-OF-SELECTION. 
  PERFORM PRM_GET_DATA. 
*  PERFORM PRM_SET_FIELD. 
  PERFORM PRM_SHOW. 
*&---------------------------------------------------------------------* 
*&      Form  PRM_GET_DATA 
*&---------------------------------------------------------------------* 
*       text 
*----------------------------------------------------------------------* 
*  -->  p1        text 
*  <--  p2        text 
*----------------------------------------------------------------------* 
FORM PRM_GET_DATA . 
  SELECT * INTO TABLE GT_T100 FROM T100 UP TO 100 ROWS WHERE SPRSL = 'E' AND ARBGB = 'ZCRM_MSG'. 
ENDFORM. 
*&---------------------------------------------------------------------* 
*&      Form  PRM_SHOW 
*&---------------------------------------------------------------------* 
*       text 
*----------------------------------------------------------------------* 
*  -->  p1        text 
*  <--  p2        text 
*----------------------------------------------------------------------* 
FORM PRM_SHOW . 
  REFRESH GT_FIELDCAT. 
  LS_LAYOUT-CWIDTH_OPT    = 'X'. "优化列宽选项是否设置 
  LS_LAYOUT-ZEBRA                = 'X'. 
*  ls_layout-box_fname        = 'SEL'. 
  APPEND_FIELDCAT:'SPRSL'             '语言'              4   'X' '', 
                  'ARBGB'             '区域'              20   'X' '', 
                  'MSGNR'             '消息号'              3   'X' 'X', 
                  'TEXT'             '消息文本'              73   '' ''. 
 
  DATA:LV_TITLE TYPE LVC_TITLE. 
 
  DESCRIBE TABLE GT_T100 LINES LV_TITLE. 
  CONDENSE LV_TITLE NO-GAPS. 
 
  CONCATENATE '结果共' LV_TITLE '条目!' INTO LV_TITLE. 
 
  REFRESH:LT_EVENT. 
  LS_EVENT-FORM = 'DATA_CHANGED_METHOD'. 
  LS_EVENT-NAME = 'DATA_CHANGED'. 
  APPEND LS_EVENT TO LT_EVENT. 
 
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC' 
    EXPORTING 
      I_CALLBACK_PROGRAM       = SY-REPID 
      I_CALLBACK_PF_STATUS_SET = 'PRM_SET_STATUS' 
      I_CALLBACK_USER_COMMAND  = 'PRM_USER_COMMAND' 
      IS_LAYOUT_LVC            = LS_LAYOUT 
      IT_FIELDCAT_LVC          = GT_FIELDCAT[] 
      I_GRID_TITLE             = LV_TITLE 
      IT_EVENTS                = LT_EVENT 
      I_DEFAULT                = 'X' 
      I_SAVE                   = 'A' 
    TABLES 
      T_OUTTAB                 = GT_T100 
    EXCEPTIONS 
      PROGRAM_ERROR            = 1 
      OTHERS                   = 2. 
  IF SY-SUBRC <> 0. 
  ENDIF. 
ENDFORM. 
FORM PRM_SET_STATUS USING RT_EXTAB TYPE SLIS_T_EXTAB. 
  SET PF-STATUS 'ZSTAT'. 
  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR' 
    IMPORTING 
      E_GRID = LR_GRID. 
 
  CALL METHOD LR_GRID->REGISTER_EDIT_EVENT 
    EXPORTING 
      I_EVENT_ID = CL_GUI_ALV_GRID=>MC_EVT_MODIFIED. 
  IF SY-SUBRC <> 0. 
  ENDIF. 
ENDFORM. 
FORM PRM_USER_COMMAND USING P_UCOMM    LIKE SY-UCOMM 
                        P_SELFIELD TYPE SLIS_SELFIELD. 
 
  CHECK P_UCOMM = '&IC1'. 
ENDFORM. 
FORM DATA_CHANGED_METHOD 
              USING PA_DATA_CHANGED TYPE REF TO CL_ALV_CHANGED_DATA_PROTOCOL . 
  DATA: 
    L_IT_DATA TYPE         LVC_T_MODI, 
    L_WA_DATA LIKE LINE OF L_IT_DATA. 
  FIELD-SYMBOLS:<LV_FIELD> TYPE ANY. 
 
  L_IT_DATA = PA_DATA_CHANGED->MT_MOD_CELLS. 
 
  CHECK L_IT_DATA IS NOT INITIAL. 
 
  LOOP AT PA_DATA_CHANGED->MT_MOD_CELLS INTO L_WA_DATA. 
    READ TABLE GT_T100 INTO GS_T100 INDEX L_WA_DATA-ROW_ID. 
    IF SY-SUBRC = 0. 
      ASSIGN COMPONENT L_WA_DATA-FIELDNAME OF STRUCTURE GS_T100 TO <LV_FIELD>. 
      IF SY-SUBRC = 0. 
        <LV_FIELD> = L_WA_DATA-VALUE. 
        IF L_WA_DATA-FIELDNAME = 'MSGNR'. 
          CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' 
            EXPORTING 
              INPUT  = GS_T100-MSGNR 
            IMPORTING 
              OUTPUT = GS_T100-MSGNR. 
 
          SELECT SINGLE TEXT INTO GS_T100-TEXT FROM T100 WHERE SPRSL = GS_T100-SPRSL AND ARBGB = GS_T100-ARBGB AND MSGNR = GS_T100-MSGNR. 
        ENDIF. 
        MODIFY GT_T100 FROM GS_T100 INDEX L_WA_DATA-ROW_ID. 
      ENDIF. 
    ENDIF. 
  ENDLOOP. 
 
  CALL METHOD LR_GRID->REFRESH_TABLE_DISPLAY. 
ENDFORM.                    " DATA_CHANGED_METHOD

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/18667.html

(0)
上一篇 2021年7月19日 21:21
下一篇 2021年7月19日 21:21

相关推荐

发表回复

登录后才能评论