• ABAPALV双击界面弹出窗口


    此文引用自寒武青峰大姑 原文https://blog.csdn.net/lmf496891416/article/details/124249915?spm=1001.2014.3001.5502

    ALV界面

     双击行任一地方 跳出新的窗口

     弹窗是使用SALV的简单展示,有标准的按钮与简单设置,使用起来蛮方便的,写个例子记录一下。
    详细设置可以我参考寒武青峰大姑的另外一篇博客 简单SALV

    TYPE-POOLS: slis.
    TYPE-POOLS: kcde.
    
    *&---------------------------------------------------------------------*
    *&      TABLES
    *&---------------------------------------------------------------------*
    TABLES: vbap,vbak.
    
    *----------------------------------------------------------------------*
    * GLOBAL INTERNAL TABLES DECLARATION
    *----------------------------------------------------------------------*
    DATA: gt_file TYPE filetable.
    
    *----------------------------------------------------------------------*
    * GLOBAL VARIANTS DECLARATION
    *----------------------------------------------------------------------*
    DATA: g_repid TYPE sy-repid.
    DATA: gt_field TYPE slis_t_fieldcat_alv.
    *定义读入EXCEL的内表
    
    TYPES : BEGIN OF typ_alv ,
              vbeln TYPE vbak-vbeln,
              erdat TYPE vbak-erdat, "创建日期
              vkorg TYPE vbak-vkorg, "销售组织
              vkbur TYPE vbak-vkbur, "销售办事处
              ernam TYPE vbak-ernam, "创建人
              sel   TYPE c , "    复选框
            END OF typ_alv .
    DATA : gs_alv   TYPE typ_alv,
           gt_print TYPE TABLE OF typ_alv,
           gt_alv   TYPE TABLE OF typ_alv.
    
    *创建字段宏定义
    DEFINE add_field.
      ls_fieldcat-fieldname = '&1' .  "字段名称
      ls_fieldcat-ref_table = &2. "关联表格
      ls_fieldcat-ref_field = &3."参考字段
      ls_fieldcat-coltext = &4. "描述文本
      APPEND ls_fieldcat TO gt_fieldcat.
      CLEAR ls_fieldcat.
    END-OF-DEFINITION.
    
    
    *--------选择条件
    SELECTION-SCREEN BEGIN OF BLOCK bl01 WITH FRAME TITLE TEXT-001.
    
      SELECT-OPTIONS:
                        s_vkorg  FOR     vbak-vkorg OBLIGATORY,"销售组织
                        s_vkbur  FOR     vbak-vkbur ,"销售办公室
                        s_ernam  FOR     vbak-ernam."创建人
    SELECTION-SCREEN END OF BLOCK bl01.
    
    * ALV 用
    DATA:
      gs_layout   TYPE lvc_s_layo,
      gv_repid    TYPE repid,
      gt_fieldcat TYPE lvc_t_fcat,
      ls_fieldcat TYPE lvc_s_fcat.
    DATA: g_grid TYPE REF TO cl_gui_alv_grid.
    *DATA: GT_ALVDATA LIKE BDCDATA OCCURS 0 WITH HEADER LINE.
    *DATA: G_LIGHTS_NAME TYPE LVC_CIFNM VALUE 'LIGHT'.
    *&---------------------------------------------------------------------*
    *&   EVENT AT INITIALIZATION
    *&---------------------------------------------------------------------*
    INITIALIZATION .
    
    AT SELECTION-SCREEN OUTPUT .
    
    *----------------------------------------------------------------------*
    * EVENT OCCURS AFTER THE SELECTION SCREEN HAS BEEN PROCESSED
    *----------------------------------------------------------------------*
    START-OF-SELECTION.
    
      PERFORM frm_auth_check.  "权限检查
      PERFORM frm_getdata .    "获取数据  --GETTING DATA
      PERFORM frm_display_data.  "展示ALV
    
    END-OF-SELECTION.
    *&---------------------------------------------------------------------*
    *& FORM FRM_AUTH_CHECK
    *&---------------------------------------------------------------------*
    *& TEXT
    *&---------------------------------------------------------------------*
    *& -->  P1        TEXT
    *& <--  P2        TEXT
    *&---------------------------------------------------------------------*
    FORM frm_auth_check .
    
    ENDFORM.
    *&---------------------------------------------------------------------*
    *& FORM FRM_GETDATA
    *&---------------------------------------------------------------------*
    *& TEXT
    *&---------------------------------------------------------------------*
    *& -->  P1        TEXT
    *& <--  P2        TEXT
    *&---------------------------------------------------------------------*
    FORM frm_getdata .
    
      SELECT vbak~vbeln,
             vbak~erdat,"创建日期
             vbak~vkorg,"销售组织
             vbak~vkbur, "销售办事处
             vbak~ernam
        FROM vbak
       WHERE vbak~vkorg IN @s_vkorg
        AND  vbak~vkbur IN @s_vkbur
        AND  vbak~ernam IN @s_ernam
        INTO CORRESPONDING FIELDS OF TABLE @gt_alv.
    
    ENDFORM.
    *&---------------------------------------------------------------------*
    *& FORM FRM_DISPLAY_DATA
    *&---------------------------------------------------------------------*
    *& TEXT
    *&---------------------------------------------------------------------*
    *& -->  P1        TEXT
    *& <--  P2        TEXT
    *&---------------------------------------------------------------------*
    FORM frm_display_data .
      DATA : lv_html_header TYPE slis_formname  .
    *定义输出模式
      CLEAR:gs_layout,gt_fieldcat.
      gs_layout-cwidth_opt         = 'X'.
      gs_layout-zebra              = 'X'.
      gs_layout-box_fname              = 'SEL'.
      gv_repid = sy-repid.
      PERFORM frm_set_fieldcat.
      .
    *  TRY .
      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
        EXPORTING
          i_callback_program       = gv_repid
          i_callback_user_command  = 'FRM_USER_COMMAND'
          i_callback_pf_status_set = 'FRM_PF_STATUS'
          is_layout_lvc            = gs_layout
          it_fieldcat_lvc          = gt_fieldcat
          i_save                   = 'A'
        TABLES
          t_outtab                 = gt_alv
        EXCEPTIONS
          program_error            = 1
          OTHERS                   = 2.
    
      IF sy-subrc <> 0.
        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
        WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ENDIF.
    ENDFORM.
    *&---------------------------------------------------------------------*
    *& FORM FRM_SET_FIELDCAT
    *&---------------------------------------------------------------------*
    *& TEXT
    *&---------------------------------------------------------------------*
    *& -->  P1        TEXT
    *& <--  P2        TEXT
    *&---------------------------------------------------------------------*
    FORM frm_set_fieldcat .
      add_field:
              vbeln   'VBAK'   'VBELN' '销售订单',
              erdat   'VBAK'   'ERDAT' '创建日期',
              vkorg   'VBAK'   'VKORG' '销售组织',
              vkbur   'VBAK'   'VKBUR' '销售办事处',
              ernam   'VBAK'   'ERNAM' '创建人'.
    ENDFORM.
    
    FORM frm_pf_status USING extab TYPE slis_t_extab.
      DATA: fcode TYPE TABLE OF sy-ucomm.
      CLEAR:fcode[].
    
      SET PF-STATUS 'STANDARD' EXCLUDING fcode[] .
    ENDFORM.
    *&---------------------------------------------------------------------*
    *&      FORM  FRM_USER_COMMAND
    *&---------------------------------------------------------------------*
    *       自定义用户动作
    *----------------------------------------------------------------------*
    *  -->  P1        TEXT
    *  <--  P2        TEXT
    *----------------------------------------------------------------------*
    
    *自定义用户动作
    FORM frm_user_command USING p_ucomm TYPE sy-ucomm rs_selfield TYPE slis_selfield.
      DATA : l_ucomm TYPE sy-ucomm  .
      IF g_grid IS INITIAL.
        CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
          IMPORTING
            e_grid = g_grid.
      ENDIF.
      "失去焦点触发更新内表
      CALL METHOD g_grid->register_edit_event
        EXPORTING
          i_event_id = cl_gui_alv_grid=>mc_evt_modified.
    
      CALL METHOD g_grid->check_changed_data.
      rs_selfield-refresh     = 'X'.
      rs_selfield-col_stable  = 'X'.
      rs_selfield-row_stable  = 'X'.
      l_ucomm = p_ucomm .
      CLEAR p_ucomm .
      DATA : l_uname TYPE sy-uname,
             l_datum TYPE sy-datum,
             l_uzeit TYPE sy-uzeit.
    
      CASE l_ucomm.
    
    
        WHEN '&IC1'. "双击
          READ TABLE gt_alv INDEX rs_selfield-tabindex INTO DATA(wa_sel_temp).  "双击行
          IF sy-subrc = 0 .
    *        SET PARAMETER ID 'VL' FIELD WA_SEL_TEMP-VBELN .
    *        CALL TRANSACTION 'VL03N' AND SKIP FIRST SCREEN ."SKIP FIRST SCREEN 忽略SELECTION SCREEN
            PERFORM displat_item USING wa_sel_temp-vbeln.
          ENDIF.
          CLEAR:wa_sel_temp.
        WHEN OTHERS.
      ENDCASE.
    ENDFORM.
    *&---------------------------------------------------------------------*
    *&---------------------------------------------------------------------*
    *&---------------------------------------------------------------------*
    *& FORM DISPLAT_ITEM
    *&---------------------------------------------------------------------*
    *& TEXT
    *&---------------------------------------------------------------------*
    *& -->  P1        TEXT
    *& <--  P2        TEXT
    *&---------------------------------------------------------------------*
    FORM displat_item  USING p_vbeln.
      DATA: go_alv    TYPE REF TO cl_salv_table,
            go_funlst TYPE REF TO cl_salv_functions_list.
      DATA: cxroot TYPE REF TO cx_root,
            excmsg TYPE c.
      CLEAR:go_alv,go_funlst.
    
      SELECT vbap~vbeln,
             vbap~posnr,
             vbap~matnr,
             vbap~ZMENG,
             makt~maktx
        FROM vbap
        LEFT JOIN makt ON makt~matnr EQ vbap~matnr AND makt~spras = '1'
       WHERE vbeln = @p_vbeln
        INTO TABLE @DATA(lt_item).
      IF sy-subrc = 0.
        TRY.
            cl_salv_table=>factory(
            IMPORTING
            r_salv_table = go_alv   "导出ALV的容器对象
            CHANGING
            t_table = lt_item[] ).  "内容表
          CATCH cx_root INTO cxroot.
            excmsg = cxroot->get_text( ).
            MESSAGE e000(oo) WITH excmsg.
        ENDTRY.
    
        go_funlst = go_alv->get_functions( ).
        go_funlst->set_all( 'X' ).
    
        "重新设置列名称
        go_alv->get_columns( )->get_column( 'MAKTX' )->set_long_text( 'TES删除' )."
    
    
        IF go_alv IS BOUND."设置窗口大小与位置-
          go_alv->set_screen_popup(
          start_column = 30
          end_column = 160
          start_line = 5
          end_line = 20 ).
          go_alv->display( ).
        ENDIF.
    
      ENDIF.
    ENDFORM.

    代码直接复制就能用了。

    另外自己扩展下,

    PERFORM displat_item USING wa_sel_temp-vbeln.  这里的形式参数可以扩展为任意的字段取弹出需要的新的ALV,

    分享使我快乐,我试萧静默。

  • 相关阅读:
    HDU_1006_Tick and Tick
    HDU_1011_Starship Troopers_树型dp
    HDU_1520_Anniversary party_树型dp
    HDU_1176_免费馅饼_16.4.23再做
    HDU_1203_01背包
    HDU_1421_搬寝室_dp
    HDU_1505_矩阵中的最大矩形_dp
    STL_map的使用
    Semantic-UI-React (称 stardust) 对比 Antd
    meteor 为基础,联合 Apollo + React + React-Router
  • 原文地址:https://www.cnblogs.com/BruceKing/p/16337476.html
Copyright © 2020-2023  润新知