精华内容
下载资源
问答
  • ABAP ALV

    千次阅读 2017-10-10 09:33:27
    7. ALV 7.1.Layout重要字段 zebra(1) type c, " striped pattern斑马线显示,颜色隔行交替显示 edit(1) type c, " for grid only ALV是否可编辑,注意只对Grid模式有效,对List模式无效 f2code like sy-ucomm, "gs...

    ALV

    1.Layout重要字段

    zebra(1type c" striped pattern斑马线显示,颜色隔行交替显示
    edit(1type c" for grid only ALV是否可编辑,注意只对Grid模式有效,对List模式无效
    f2code like sy-ucomm, "gs_layout-f2code='&ETA'.双击时触发的Funcode这里为弹出详情窗口

    colwidth_optimize(1type c, ALV网格(单元格)宽度设置为自动最优化,按输出内容宽度自动调整[ˈɔptəˌmaɪz]

    lights_fieldname type slis_fieldname," fieldname for exception列显示为红绿灯
    box_fieldname type slis_fieldname, " fieldname for checkbox指定数据内表中哪列以选择按钮形式显示(首列前可按下或弹上来的按钮),ALV最左上角会出现全选按钮

    key_hotspot(1type c,        " keys as hotspot " K_KEYHOT设置关键字段是否是热点,可单击

    info_fieldname type slis_fieldname, " infofield for listoutput指定数据输出内表中哪列存储的是颜色,用来设置ALV每行数据的颜色。注:使用属性需要同时在数据内表中定义一个与该参数所定义字段名相同的栏位,如:LAYOUT-INFO_FIELDNAME=’COLOR’,假设数据内表名为LT_OUT,则需要在该内表增加一个栏位“COLOR”,颜色范围 C000~C999
    coltab_fieldname type slis_fieldname, "colors  指单元格式颜色,每行的单元格颜色就需一个单独的内表

    2.FIELDCATALOG重要字段

    [ˈkætəlɔɡ]

    key(1type c" column with key-color指定字段是否是关键字段,如果是则单元格显示的颜色会不同,并会靠前显示

    col_pos like sy-cucol, position of the column列的输出位置字段在表中第几列

    fieldname type slis_fieldname,"针对输出内表哪列进行设置,只有设置了的列才会显示,如果没有设置,则不会显示在ALV中。如果此字段是CURR金额(currency field) ,QUAN数量(Quantity field) 需要指定所参照的CUKY货币单位、UNIT字段名,需设置Cfieldname Ctabname Qfieldname Qtabname
    cfieldname type slis_fieldname, "field with currency unit金额字段所参照的货币单位字段名

    ctabname type slis_tabname,   " and table
    qfieldname type slis_fieldname, " field with quantity unit数量字段所参照的数量单位字段名
    qtabname type slis_tabname,   " and table

    just(1)  type c" (R)ight (L)eft (C)ent.单元格中内容显示时对齐方式。不设置时按钮数据类型默认对齐方式来对齐
    lzero(1type c" leading zero X时输出前导零
    no_sign(1type c" write no-sign 不显示数字符号
    no_zero(1type c" write no-zero 只输出有意义的值,空值不输出。为X时全为零(如:00000)时不输出,所以不输出零时应该最好同时设置lzero = sapceno_zero = X,相反如果要输出,则应同时设置lzero = X no_zero = space
    fix_column(1type c" Spalte fixieren列固定不滚动,与Key属性相似,但颜色不会发生变化
    do_sum(1type c" sum up该列是否进行小计,需与gt_sort-subtot一起使用(即需要参考排序),否则只对整列进行一个合计


    seltext_l like dd03p-scrtext_l, " long key word标题字段显示的名称(长)
    seltext_m like dd03p-scrtext_m, " middle key word标题字段显示的名称(中)
    seltext_slike dd03p-scrtext_s, short key word标题字段显示的名称(短)
    ddictxt(1type c" (S)hort (M)iddle (L)ong设置以长、中还是短名称来显示,取值分别为 SML。直接指定文本显示为长文本、中、还是短文本指定这个字段后则会固定下来,不会随着用户的宽度调整变化.

    如果是金额P小数(数量)类型时,需要对下面两个属性进行设置,否则,如果不设置时,在修改对应ALV单元格内容时,会自动将你所输入的数除100,即小数点提前两位;并且如果是数量类型,除了设置datatype外,inttype也需要进行设置,且为C
    datatype like dd03p-datatype,数据类型
    inttype like dd03p-inttype, 内部类型

     

    ref_fieldname  like dd03p-fieldname,"如需单元格显示F4输入帮助,则需要指定字段所参照的表
    ref_tabname like dd03p-tabname,"如需单元格显示F4输入帮助,则需要指定字段所参照的表中的字段名

    另外,以上两个字段还可以解决ALV中形如参照VBELNMATNR词典类型的列导出(自带的导出功能)Excel时被截断的问题,具体请参照:ALV自带导出文件时字段数据末尾被截断问题

    CONVEXIT:设置转换规则,对应于Domain中的转换规则,也可用于解决导出Excel数据前导0被截断的问题

     

    edit(1type c" internal use only是否可编辑
    hotspot(1type c" hotspot设置字段内容下面是否有热点(有下划线,可点击,单击即可触发相应事件)

    3.  指定双击触发的FunCode

    gs_layout-f2code  '&ETA'设置ALV数据行双击触发的Tcode,这里为弹出详情窗口

    4.相关函数

    REUSE_ALV_GRID_DISPLAY

    REUSE_ALV_LIST_DISPLAY

    REUSE_ALV_GRID_DISPLAY_LVC

    REUSE_ALV_FIELDCATALOG_MERGE   [mə:dʒ] 混合, (使)合并

    5.重要参数接口

    I_CALLBACK_PF_STATUS_SET  设置工具条

    I_CALLBACK_USER_COMMAND用户点击工具栏中自定义按钮、预置按钮(需通过IT_EVENT_EXIT参数指定预置FunCode才会回调指定的Form)、数据行双击、单元格热点等时,会回调此参数指定的Form

    IT_SORT排序、分类汇总

     

    I_SAVE保存表格布局:'X' 只能保存为全局标准变式,'U' 只能保存特定用户变式,'A'都可以保存,SPACE不能保存变式

    I_DEFAULT用户是否可以设置默认的布局变式(即是否可以将某个布局变式设置为默认的布局)

    IS_VARIANT指定布局变式

     

    IT_EVENTS事件回调,可以用来代替I_CALLBACK_USER_COMMAND参数

    IT_EVENT_EXIT 预置FunCode回调I_CALLBACK_USER_COMMAND指定的Form

     

    IS_LAYOUT

    IT_FIELDCAT

    T_OUTTAB需要显示的数据内表

    i_grid_settings

    6.  让预置按钮回调I_CALLBACK_USER_COMMAND 

    IT_EVENT_EXIT:让预置按钮回调I_CALLBACK_USER_COMMAND 指定的Form。可以向IT_EVENT_EXIT参数内表填充需要被拦截的保留Funcode,及在是执行对应功能代码之前还是之后调用:

      DATAevent_exit TYPE slis_t_event_exit WITH HEADER LINE.
      event_exit-ucomm '&OAD'."Funcode为点击AlV工具栏上的选择布局按钮所对应的FunCode,会被USER_COMMAND 指定的Form拦截
    event_exit-after 'X'."在执行完预置功能代码之前还是之后调用
    APPEND event_exit.
      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING 
          i_callback_program sy-repid
          it_fieldcat        fieldcat[]
          i_callback_user_command 'USER_COMMAND'
    IT_EVENT_EXIT event_exit[]
    TABLES
          t_outtab           gt_result.
    FORM user_command  USING r_ucomm LIKE sy-ucomm rs_selfield TYPE slis_selfield.
    ENDFORM.

    7.颜色

    行颜色:gs_layout-info_fieldname 'COLOR'."指定数据内表中的哪一用来作为行颜色的列,颜色值与下面列颜色取值格式是一样的,也是4位,不同的是此种方式下的颜色值是与显示数据内表存放在一起,而下面的颜色值则是与gt_fieldcat存放在一起
    列颜色:gt_fieldcat-emphasize['emfəsaɪz]强调) 'C510'."此种方式下的颜色值定义为4位字符,各位含意:

    1位:固定取值为C

    2COL颜色值,取值为0~7

    3INT高亮,即颜色是否加深,取值为011表示加深显示

    4INV颜色是否反转,即颜色是作用在背景上,还是作用在输出字符上,取值上为01。为1时表示设置的是前景色,即输出字符本身的颜色(好像只有在第3位为0时才有效?)

    单元格颜色:gs_layout-coltab_fieldname = 'COLORTABLE'."数据内表中哪列为颜色内表,颜色内表结构如下:

     

    slis_color颜色结构类型各字体对应于上面颜色值串'C510'后三位,意义也是一样,只是没有第一位固定字符C

    8.可编辑

    整体可编辑:gs_layout-edit 'X'.

    某列可编辑:gt_fieldcat-edit 'X'.

    单元格可编辑:只能使用REUSE_ALV_GRID_DISPLAY_LVC,并且还作以下一些设置:
    cellstab TYPE lvc_t_styl,"在输出内表中加上这一类型的列
    "先将所有单元格设置为可编辑状态
    gt_fieldcat-edit 'X'.

    DATAgt_cellstab TYPE lvc_t_styl WITH HEADER LINE.

      "再将原本可编辑的单元格切换到不可编辑样式。注:这里只是样式的切换,不能仅仅使用cl_gui_alv_grid=>mc_style_enabled来将单元格设置为可编辑状态,单元格真正是否可编辑是由fieldcat-editlayout-edit来决定的,而仅设置为cl_gui_alv_grid=>mc_style_enabled是不可编辑的
    gt_cellstab-style = cl_gui_alv_grid=>mc_style_disabled.

       APPEND gt_cellstab.
    gt_data-cellstab gt_cellstab[].
    gs_layout-stylefname 'CELLSTAB'."数据内表中哪列为可编辑信息内表

    9.单元格数据修改后立即自动刷新

    单元格中的数据被修改后,将ALV单元格中的数据立即刷新到ABAP对应的内表中:

    法一:通过对REUSE_ALV_GRID_DISPLAY函数参数i_grid_settings-edt_cll_cb进行设置:

    i_grid_settings-edt_cll_cb  'X' .
    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING i_grid_settings i_grid_settings
    法二:通过函数参数I_CALLBACK_USER_COMMAND指定的回调Form的参数slis_selfield进行设置:

    FORM user_command USING ucomm LIKE sy-ucommselfield selfield TYPE slis_selfield.
      selfield-refresh 'X'.
    CASE ucomm.
    WHEN 'UPDATE'.
    PERFORM frm_update.
    ENDCASE.
    ENDFORM

    10.数据有效性验证事件:data_changed

    通过REUSE_ALV_GRID_DISPLAY函数的it_events参数设置DATA_CHANGE事件及事件回调Form:

      t_events-name slis_ev_data_changed.
      t_events-form 'ALV_DATA_CHANGED'.
    APPEND t_events.

      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
     it_events          t_events[]

    "注:如果没有设置REUSE_ALV_GRID_DISPLAY 函数的参数i_grid_settings-edt_cll_cb  = 'X',在单元格数据被修改后,此Form不会自动调用(即不触发data_changed事件),直到点击了保存或刷新按钮后才会被调用,另外 cl_gui_alv_grid CHECK_CHANGED_DATA方法也会触发data_changed事件;另外,如果是通过OO实现的ALV,要让DATA_CHANGE事件触发,则还需要注册回车或焦点失去动作,具体参看后面
    FORM alv_data_changed USING pel_data TYPE REF TO cl_alv_changed_data_protocol.
    DATAl_name(20),ls_cells TYPE lvc_s_modi.
    FIELD-SYMBOLS <fs_value>.
    LOOP AT pel_data->mt_mod_cells INTO ls_cells."读取被修改了的单元格
    CLEAR gt_data.
    READ TABLE gt_data INDEX ls_cells-row_id."被修改了的单元格所对应输出内表行数据
    CONCATENATE 'GT_DATA-' ls_cells-fieldname INTO l_name. "读取被单元格所对应的输出内表中的相应列数据,注:读取出来是的单元格修改之前的数据
    ASSIGN (l_nameTO <fs_value>."<fs_value>即为修改前的值
        <fs_value> ls_cells-value. "ls_cells-value单元格中修改后的新值?
    "实际上不需要此句来修改输出内表中的数据,因为只要在该Form中不弹出 E MSG,则该Form执行完后会也会自动更新输出内表
    "MODIFY gt_data INDEX ls_cells-row_id.
    ENDLOOP.

     

    注:如果是通过CL_GUI_ALV_GRID来实现ALV,则在ALV单元格中修改数据后,要在失去焦点或回车时自动触发DATA_CHANGE事件,则还需要通过CL_GUI_ALV_GRID类的REGISTER_EDIT_EVENT方法来设置发数据改变事件在何时触发,2 种方式:

    ²按回车触发: i_event_id = cl_gui_alv_grid=>mc_event_enter

    ²单元格失去焦点: i_event_id = cl_gui_alv_grid=>mc_event_modifies

    必须设置一种方式,要不然数据变化事件不会被触发事件

    11.     金额、数字类型输入问题

    对于货币与P类型小数(如数量)类型字段,需要对gt_fieldcat-datatype属性进行设置,才能将输入的数字保持原样大小,否则输入的数据会自动将小数点提前2位;对于数量类型,好像还需要对gt_fieldcat-INTTYPE属性进行设置才好使,并且只能设置为C类型:

        if &1 'CURR'.
    "对于金额字段,需要设置为 CURR 数据库字典类型
          gt_fieldcat-datatype 'CURR'.
    endif.
    if &1 'P'.
    "对于小数,需要设置为 QUAN 数据库字典类型
          gt_fieldcat-datatype 'QUAN'.
    "除此之外,还需要将inttype类型设置为C类型。另外,按理来说要设置为P类型的,但发现不行,QUAN类型映射为 C类型??
          gt_fieldcat-inttype 'C'.
    endif.

    12.排序、分类汇总

    "决定此列是否进行分类汇总与大汇总。注如果不设置gt_sort-subtot,则只有大汇总,不会进行分类小汇总
    gt_fieldcat-do_sum 'X'. "设置了gt_fieldcat-do_sum就会有大汇总,分类小汇总要出现的前提之一也是必须要设置此属性,另外还需对gt_sort-subtot进行设置;如果此参数(gt_fieldcat-do_sum)不设置的话,则大汇总与小汇总都没有

     

    gt_sort-spos '1'."排序的顺序,如果根据多个字段来排时,决定哪个先排
    gt_sort-fieldname 'KEY1'.
    gt_sort-up 'X'."升序,如果不指定排序(即gt_sort-upgt_sort-down都没设置时),默认为升序只要某字段参设置了gt_sort-down/up,则在展示时,排序以后垂直网格中相邻相同的单元格就会合并起来(即分类合并,如果要避免合并,请在布局中设置"no_merging""X"
    "
    是否需要以此字段进行分类小计(小计汇总)
    gt_sort-subtot'X'."是否需要以此字段进行分类合并、并进行小计(注:与本列是否参与排序无关系,只要设置此属性就进行分类合并且小计——但前提是要对gt_fieldcat-do_sum也进行了设置)
    APPEND gt_sort.
    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING it_sort     = gt_sort[]

    13.可打印的表头输出

      t_events-name slis_ev_top_of_page.
      t_events-form 'alv_top_of_page '.
    APPEND t_events.

     

      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTINGit_events = t_events[]

     

    "页眉触发时所回调Form
    FORM alv_top_of_page.
    DATA:lr_rows TYPE REF TO cl_salv_form_layout_grid,
            lr_grid_rows LIKE lr_rows,
            lr_row TYPE REF TO cl_salv_form_layout_flow,
            lr_logo TYPE REF TO cl_salv_form_layout_logo.

    DATAl_row TYPE i VALUE '1'.
    CREATE OBJECT lr_rows.
    CREATE OBJECT lr_logo.
    ...
    ENDFORM.

    14.布局变式读取、切换、根据布局格式导出数据

    INITIALIZATION.
    CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET'获取默认的布局 [ˈveəri:ənt] 
        EXPORTING
          i_save        'A'
    CHANGING
          cs_variant    gx_variant
      p_varit gx_variant-variant.

     

    AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_varit.
    CALL FUNCTION 'REUSE_ALV_VARIANT_F4'选择布局
    EXPORTING
          is_variant    g_variant
          i_save        'A'

     p_varit gx_variant-variant.

    START-OF-SELECTION.
    DATAevent_exit TYPE slis_t_event_exit WITH HEADER LINE.
      event_exit-ucomm '&OAD'."Funcode为点击AlV工具栏上的选择布局按钮时 会被USER_COMMAND Form拦截
      event_exit-after 'X'.
    APPEND event_exit.

    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING      
          i_save                  'A'
          i_callback_user_command 'USER_COMMAND1'
    it_event_exit           event_exit[]
          is_variant              g_variant "ALV展示时,所使用的布局变式名。如果不存在,按默认来

    FORM user_command1  USING r_ucomm LIKE sy-ucomm rs_selfield TYPE slis_selfield.
    CASE  r_ucomm.
    WHEN '&OAD'."当点击选择布局按钮时执行

         DATA l_ref1 TYPE REF TO cl_gui_alv_grid.
    CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'获取当前ALV所对应的OO Grid
             IMPORTING e_grid l_ref1.

    l_ref1->get_variantIMPORTING es_variant l_variant )

      DATA:p_fieldcat_tab TYPE slis_t_fieldcat_alv.
    "当知道当前用户所选择的布局变式后,再通过函数 REUSE_ALV_VARIANT_SELECT 可以
    "得到布局变式所对应的布局具体信息,如哪些字段显示、字段显示的顺序如何等,当得到这些
    "布局信息后,可以用在用户在导出ALV数据到文件时使用,这样可以保持ALV显示的布局与
    "导出去的文件显示的哪些内容及字段顺序体质一致
    CALL FUNCTION 'REUSE_ALV_VARIANT_SELECT'读取布局信息
    IMPORTING          
    "可以根据返回的p_fieldcat_tab,得到当前ALV所使用的布局变式所对应的Layout情况,如
    "ALV数据下载成文件时需要与当前Layout布局一样:输出相同的字段与顺序,可以根据
    "p_fieldcat_tab  NO_OUT(控制是否输出)、COL_POS(控制顺序)来控制,文件表头可取
    "seltext_lseltext_mseltext_s。可用于导出文件布局
              et_fieldcat         p_fieldcat_tab[]
    CHANGING
              cs_variant          l_variant."传入的布局布局变式名
    """""""下面就是对 p_fieldcat_tab[] 内表字段结构进行分析及应用了
    ....
    ENDCASE.
    ENDFORM.

    15.动态内表

    另外,在ALV中可以根据FieldCat来动态创建内表

    rt_fieldcatalog type lvc_t_fcat.
    CALL METHOD cl_alv_table_create=>create_dynamic_table [daiˈnæmik]
      EXPORTING
        it_fieldcatalog rt_fieldcatalog[]
    IMPORTING
        ep_table        g_table.


    展开全文
  • SAP ABAP ALV分页显示

    2011-12-22 09:08:55
    这个代码是利用了内表数据转到另一个内表的技术.达到最后的分页效果
  • ABAP ALV例程用法

    2021-09-25 17:56:55
    最近遇到一个需求,业务自定义一个字段,为4位小数,没有对应的参考单位,导致ALV展示的时候,无法参考对应单位,如果数量为0,在ALV上就会显示,无法达到下图不显示的效果。 用户需求如下:小数为四位小数,超过的...

    最近遇到一个需求,业务自定义一个字段,为4位小数,没有对应的参考单位,导致ALV展示的时候,无法参考对应单位,如果数量为0,在ALV上就会显示,无法达到下图不显示的效果。

    用户需求如下:小数为四位小数,超过的部分四舍五入,并且后置的0隐藏不显示,如果为0,也不显示。

    我们通过寻找ALV->Fieldcat参数发现,并没有合适的参数可以实现这个效果。
    在这里插入图片描述
    在网上查找相关资料,并结合各路大神的经验,总结了两种靠谱的解决方法:
    1.在内表内添加字符型(CHAR)的字段,对数据进行处理;
    2.可以通过在ALV里添加例程来实现这一效果。

    下面主要介绍第二种方法:
    我们需要定义一对函数,命名规则CONVERSION_EXIT_ZXXXX_OUTPUT和CONVERSION_EXIT_ZXXXX_INPUT,如下:
    在这里插入图片描述

    Output:

    FUNCTION conversion_exit_z0001_output.
    *"----------------------------------------------------------------------
    *"*"本地接口:
    *"  IMPORTING
    *"     REFERENCE(INPUT)
    *"  EXPORTING
    *"     REFERENCE(OUTPUT)
    *"----------------------------------------------------------------------
    
      DATA: lv_num(16) TYPE p DECIMALS 4,
            lv_char    TYPE char50.
    
      CHECK input IS NOT INITIAL.
    
      TRY.
          lv_num = input.
        CATCH cx_root.
          CLEAR output.
          RETURN.
      ENDTRY.
    
      lv_char = lv_num.
    
      CONDENSE lv_char NO-GAPS.
      FIND  '.' IN lv_char.
      IF sy-subrc = 0.
        SHIFT lv_char RIGHT DELETING TRAILING space . "去掉没用的小数位的0
        SHIFT lv_char RIGHT DELETING TRAILING  '0' . "去掉没用的小数位的0
        SHIFT lv_char RIGHT DELETING TRAILING  '.' . "去掉没用的小数位的0
      ENDIF.
    
      CONDENSE lv_char NO-GAPS.
      IF lv_char NE '0'.
        output = lv_char.
      ENDIF.
    
    ENDFUNCTION.
    

    Input:

    FUNCTION conversion_exit_z0001_input.
    *"--------------------------------------------------------------------
    *"*"局部接口:
    *"  IMPORTING
    *"     REFERENCE(INPUT)
    *"  EXPORTING
    *"     REFERENCE(OUTPUT)
    *"--------------------------------------------------------------------
    
      DATA: lv_num(16) TYPE p DECIMALS 4,
            lv_char    TYPE char50.
    
      CHECK input IS NOT INITIAL.
    
      TRY.
          lv_num = input.
        CATCH cx_root.
          CLEAR output.
          RETURN.
      ENDTRY.
    
      output = lv_num.
    
    ENDFUNCTION.
    

    之后我们需要在ALV的Fieldcat参数里设置这个例程
    在这里插入图片描述
    最后ALV输出就可以达到想要的效果了。

    注意:
    一定需要做一对相反的转换历程output和input,不然ALV的排序和筛选功能会报错,同时,用了历程之后会对筛选产生一定影响,点击按钮会出现乱码,如下图,不过并不影响筛选功能的作用,暂时没有找到解决办法。
    在这里插入图片描述

    展开全文
  • 只有使用REUSE_ALV_GRID_DISPLAY_LVC函数才能设置ALV下拉框 定义数据元素 "*定义存储下拉列表的数据 DATA:gt_ddval TYPE lvc_t_drop, gs_ddval TYPE lvc_s_drop, gt_events TYPE slis_t_event, gs_events TYPE ...

    只有使用REUSE_ALV_GRID_DISPLAY_LVC函数才能设置ALV下拉框

    1. 定义数据元素
    "*定义存储下拉列表的数据
    DATA:gt_ddval  TYPE lvc_t_drop,
         gs_ddval  TYPE lvc_s_drop,
         gt_events TYPE slis_t_event,
         gs_events TYPE slis_alv_event.
    "ALV参数
    DATA: gv_line TYPE c,
          gr_grid     TYPE REF TO cl_gui_alv_grid,    "ALV Grid
          gs_layout   TYPE lvc_s_layo,                "ALV Layout
          gt_fieldcat TYPE lvc_t_fcat.                "ALV Fieldcat
    
    1. 设置fieldcat
    FORM fieldcat_init_all .
    
      CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
        EXPORTING
          i_structure_name   = 'ZQMS_QYLIST03'   "自建的ALV输出结构
          i_bypassing_buffer = 'X'
        CHANGING
          ct_fieldcat        = gt_fieldcat.       "Field Catalog
    
      LOOP AT gt_fieldcat ASSIGNING FIELD-SYMBOL(<fs_fieldcat>).
        IF <fs_fieldcat>-fieldname = 'QYR'.
          <fs_fieldcat>-edit = 'X'.
          <fs_fieldcat>-drdn_hndl = '1'. "下拉框分组序号
          <fs_fieldcat>-reptext = '请验人'.
        ENDIF.
      ENDLOOP.
    
    ENDFORM.
    
    1. 数据库中获取下拉框选择项,在调用LVC函数之前调用该frm_drdown_values子例程
    *&---------------------------------------------------------------------*
    *& Form frm_drdown_values
    *&---------------------------------------------------------------------*
    FORM frm_drdown_values .
      DATA:lv_count TYPE i.
      SELECT zxm
        FROM zqmt_qy
       INTO TABLE @DATA(lt_zqyr).
      gv_line = lines( lt_zqyr ).
      CLEAR:gs_ddval.
      LOOP AT  lt_zqyr INTO DATA(ls_zqyr).
    *    ADD 1 TO lv_count.
        gs_ddval-handle = '1'.
        gs_ddval-value = ls_zqyr-zxm.
        APPEND gs_ddval TO gt_ddval.
      ENDLOOP.
    
      SORT gt_ddval BY VALUE.
    ENDFORM.
    
    1. 创建事件和事件回调,在调用lvc函数之前调用该frm_creat_event子例程
    *&---------------------------------------------------------------------*
    *& Form frm_creat_event
    *&---------------------------------------------------------------------*
    FORM frm_creat_event .
    * 固定写法
      gs_events-name = 'CALLER_EXIT'.
      gs_events-form = 'CALLER_EXIT'.
      APPEND gs_events TO gt_events.
    
    ENDFORM.
    
    *---------------------------------------------------------------------*
    *      Form  frm_creat_event
    *---------------------------------------------------------------------*
    *回调函数,不要自己调用,交给lvc
    FORM caller_exit USING ls_data TYPE slis_data_caller_exit.
      DATA: lr_grid TYPE REF TO cl_gui_alv_grid.
      "Get ALV grid
      CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
        IMPORTING
          e_grid = lr_grid.
    
      "设置下拉列表,使Grid和内表能链接上
      CALL METHOD lr_grid->set_drop_down_table
        EXPORTING
          it_drop_down = gt_ddval.
    
    ENDFORM.
    
    1. 调用LVC函数
      "请验人下拉框
       PERFORM frm_drdown_values .
      "事件
       PERFORM frm_creat_event.
    
      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
        EXPORTING
          i_callback_program       = sy-repid
          is_layout_lvc            = gs_layout
          it_fieldcat_lvc          = gt_fieldcat
          i_callback_user_command  = gc_callback_user_command      "F_USER_COMMAND
          i_callback_pf_status_set = gc_callback_satus             "F_SET_STATUS
          i_save                   = 'A'             "A
          it_events                = gt_events
        TABLES
          t_outtab                 = gt_alv				"要输出的ALV内表
        EXCEPTIONS
          program_error            = 1
          OTHERS                   = 2.
    

    运行效果:

    展开全文
  • 添加Fieldcatalog参数 GS_FIELDCAT_LVC-DATATYPE = 'DATS'. 原始输出 格式化输出

    添加Fieldcatalog参数

    GS_FIELDCAT_LVC-DATATYPE = 'DATS'.	"日期
    
    "类似的用法
    GS_FIELDCAT_LVC-DATATYPE = 'CURR'.		"金额类型
    GS_FIELDCAT_LVC-DATATYPE = 'QUAN'		"计量单位
    GS_FIELDCAT_LVC-INTTYPE = 'C'.
    
    "也可设置参照字段属性
    GS_FIELDCAT_LVC-REF_FIELD = FIELD_NAME.
    GS_FIELDCAT_LVC-REF_TABLE = TABLE_NAME.
    
    • 原始输出
      1
    • 格式化输出
      2
    展开全文
  • "设置ALV状态栏按钮的隐藏与显示 DATA: LT_EXTAB TYPE TABLE OF SY-UCOMM WITH HEADER LINE. IF P_ALL IS NOT INITIAL. "此处P_ALL是选择屏幕的单选按钮 REFRESH: LT_EXTAB. APPEND 'POPUSH' TO LT_EXTAB. APPEND '...
  • ABAP ALV可编辑更新

    2021-05-13 14:19:07
    *&---------------------... REPORT ZDCH_09_ALV02 *&---------------------------------------------------------------------* *& *&-----------------------------------------------------------..
  • REUSE_ALV_GRID_DISPLAY_LVC有三种方式设置选择框 第一种:fieldcat上设置checkbox 1、 fieldcat和layout声明 2、定义宏 也可以不定义宏来做,反正就是fieldcat有一个checkbox字段,设置为X就行了 3、设置...
  • sap abap alv事件

    2020-07-22 14:42:53
    alv 事件的创建使用 在实际开发中经常要用到 事件 event,在各个alv中的具体使用如下 REUSE_ALV_GRID_DISPLAY_LVC 显示代码 CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC' EXPORTING i_callback_program = sy-...
  • ABAP ALV刷新

    2021-06-01 14:20:02
    ALV报表里面有可编辑字段的时候,当用户选中行对某些字段进行编辑后,我们是需要拿取用户编辑后的内表的,下述方法可以将ALV报表里的数据更新到ABAP程序内表当中 * 将更新后的数据传到alv所对应的内表 DATA: lr_...
  • ABAP ALV下拉框

    2020-06-29 10:20:03
    在调用alv之前:下拉的内表传递需要使用方法”SET_DROP_DOWN_TABLE”. CALL METHOD GRID1->SET_DROP_DOWN_TABLE EXPORTING IT_DROP_DOWN = LT_DDVAL1. 或者在这加: 5.在alv字段目录里设置: ls_fcat-DRDN_FIELD = ...
  • SAP abap alv报表实例

    千次阅读 2020-08-27 18:41:06
    *定义类型组 TYPE-POOLS: abap, slis. *定义ALV变量 DATA : lt_fieldcat TYPE slis_t_fieldcat_alv, wt_fieldcat TYPE slis_fieldcat_alv, ls_layout TYPE slis_layout_alv. *定义表 TABLES:bkpf. *定义输出表结构 ...
  • ABAP ALV控件单元格编辑设置DEMO

    千次阅读 2020-03-13 11:02:50
    1、使用的ABAP ALV 控件是:REUSE_ALV_GRID_DISPLAY_LVC 。 2、DEMO程序运行后的效果,等于4700000005的PO,PO ITEM列的单元格时可以编辑的: 3、注意内存数据结构,这个清楚了,就很好理解是怎么玩的。在数据...
  • ABAP ALV自适应列宽

    千次阅读 2019-12-30 10:41:49
    ALV输出的时候,可以直接用LAYOUT-CWIDTH_OPT来设置自适应列宽,这样可以满足大部分需求,但是如果ALV中有编辑或者输出,那我们需要重新定义一下列宽。如果使用的是函数ALV的方式,那么可以参考如下代码 DATA:lv_...
  • ABAP ALV可编辑字段长度受限

    千次阅读 2020-06-03 17:10:45
    问题描述:自开发ALV报表中某个字段设定为可编辑状态,但是实际操作中发现被设为可编辑状态的字段输入长度受限制了。 解决办法:通过上网查找和研究摸索,原来是要给该字段一个参考字段,要编辑的字段长度和参考...
  • ABAP 编程: ABAP ALV取消整数小数点后面的0
  • ABAP ALV显示简单例子

    2021-01-13 15:12:31
    *ALV输出定义 DATA:WA_FIELDCAT TYPE SLIS_FIELDCAT_ALV, I_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV, I_LAYOUT TYPE SLIS_LAYOUT_ALV. DATA LV_POS TYPE i value 1. CLEAR WA_FIELDCAT. lv_pos = lv_pos...
  • 除了Search help 以外,我们在使用的过程中还常常设置下拉列表,相较Search help其优点在于只能输入下拉列表中存在的数据,而...二.ALV 设置drop down list 1.定义下拉列表并赋值 DATA:gt_drp TYPE lvc_t_drop. DATA
  • ABAP ALV 展示之后,点击按钮重新触发程序,alv 字段结构发生变化,重新调用alv 目的 刷新Function ALV fieldcat字段结构 原因 设置刷新标识无效果 解决方式 ALV触发按钮事件中,给事件接口字段EXIT赋值’X’. RS_...
  • ABAP ALV 单元格 设置下拉框

    千次阅读 2020-08-20 13:51:30
    最近经常听到网友和用户需求希望你在 ALV Grid 的函数中加入下来列表,其实SAP已经考虑了大家的需求,用户的需求是可以实现的。这个需求是很合理的,会了不难,难了不会,第一次做 比着葫芦画瓢 把这个需求实现。。...
  • ALV上的红绿灯状态 先看效果图: 步骤 一:ALV的内表包含一个状态字段 二:设置FIELDCAT时把 ICON设置为 ‘X’ 三:给内表赋值显示 @EB@ 熄灯 @0A@ 红灯 @08@ 绿灯 @09@ 黄灯 四:显示ALV
  • REPORT YLTL_TEST. TYPES: BEGIN OF TY_DATA, SEL TYPE ABAP_BOOL, COL01 TYPE STRING, COL02 TYPE STRING, COL03 TYPE STRING, ...DATA GO_ALV TYPE REF TO CL_GUI_ALV_GRID. DATA GT_DATA TYPE TABLE OF TY_D
  • ABAP ALV自动刷新

    2020-03-27 17:55:16
     " 将变动内容更新到内表 DATA: lr_grid TYPE REF TO cl_gui_alv_grid. CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR' IMPORTING e_grid = lr_grid. CALL METHOD lr_grid->check_changed_data. rs_selfield-...
  • *@--------------------------------------------------------------------* *@ Form sub_user_command *@-----------------------------------------------------------...RS_SELFIELD ALV相关的数据 *------------...
  • ALV控件的使用和ALV ALV(SAP List Viewer)控件是SAP业务中最常用的控件之一,本章先用一个简单的例子介绍用ALV控件显示数据,再以实例方式介绍ALV的强大功能。 本章主要内容有: (1)简单的ALV控件实例 (2)自定义...
  • ABAP日常开发中经常会用到ALV OO(CL_GUI_ALV_GRID)进行清单显示,其中对指定单元格进行操作也是日常必备技能,比如下图中的需求,对指定单元格的“原因代码”列进行修改,校验值的有效性,给出如下所示的提示框,...
  • tables: sscrfields,bseg,bkpf,mara. type-pools: slis,kkblo. data: w_vari type disvariant, w_layo type slis_layout_alv, i_fcat type slis_t_fieldcat_alv, w_fcat type slis_fieldcat_alv, .
  • TYPE-POOLS: slis. TABLES: MARA. SELECTION-SCREEN BEGIN OF SCREEN 1001 AS SUBSCREEN. SELECTION-SCREEN BEGIN OF BLOCK 001 WITH FRAME TITLE TEXT-001. SELECT-OPTIONS S_MATNR FOR MARA-MATNR. ...
  • abap alv 总结

    2015-02-02 16:49:20
    abap alv详细整理,适合开发不久的新手
  • ABAP ALV中背景和字体颜色改变的做法大全 ABAP ALV中背景和字体颜色改变的做法大全 ABAP ALV中背景和字体颜色改变的做法大全

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,567
精华内容 1,826
关键字:

abapalv