二维码

如何使用ALV创建99乘法表

XZ_P_0515发表于 2016-10-13 22:07XZ_P_0515 最后回复于 2016-10-17 22:36 [复制链接] 2406 5

ABAP新人,希望得到各位老师的教导。
回复

使用道具 举报

Twilight

RE: 如何使用ALV创建99乘法表

  1. DATA:c_index TYPE i,
  2.      r_index TYPE i.

  3. DATA:lv_sum TYPE i.
  4. DATA:lv_string TYPE string.

  5. DATA:BEGIN OF lt_out OCCURS 0,
  6.       field1 TYPE char10,
  7.       field2 TYPE char10,
  8.       field3 TYPE char10,
  9.       field4 TYPE char10,
  10.       field5 TYPE char10,
  11.       field6 TYPE char10,
  12.       field7 TYPE char10,
  13.       field8 TYPE char10,
  14.       field9 TYPE char10,
  15.   END OF lt_out .
  16. FIELD-SYMBOLS:<fs_out> LIKE lt_out,
  17.               <dyn_field> TYPE any.

  18. DO 9 TIMES.
  19.   r_index = sy-index.
  20.   APPEND INITIAL LINE TO  lt_out ASSIGNING <fs_out>.
  21.   DO 9 TIMES.
  22.     CHECK sy-index <= r_index.
  23.     CLEAR:lv_string.
  24.     c_index = sy-index.
  25.     lv_sum = r_index * c_index.
  26.     lv_string = r_index && '*' && c_index && '=' && lv_sum.
  27.     ASSIGN COMPONENT c_index OF STRUCTURE <fs_out> TO <dyn_field>.
  28.     <dyn_field> = lv_string.
  29.   ENDDO.

  30. ENDDO.

  31. LOOP AT lt_out.
  32.   WRITE:/ lt_out.
  33. ENDLOOP.
复制代码

99.jpg
自己补充成alv即可
回复 支持 反对

使用道具 举报

XZ_P_0515

RE: 如何使用ALV创建99乘法表

Twilight 发表于 2016-10-14 14:58
自己补充成alv即可

谢谢您
回复 支持 反对

使用道具 举报

XZ_P_0515

RE: 如何使用ALV创建99乘法表



运行结果没有列名,怎么可以加上列名呢?
  1. TYPE-POOLS:slis.

  2. DATA:i_fieldcat_alv TYPE slis_t_fieldcat_alv, "定义列标题(属性信息)
  3.      i_layout       TYPE slis_layout_alv,
  4.      i_fieldcat     TYPE slis_fieldcat_alv, "定义对象
  5.      w_repid        LIKE sy-repid. "当前程序
  6. i_layout-zebra = 'X'. "ALV表格按斑马线条纹显示
  7. i_layout-colwidth_optimize = 'X'. "将ALV字段宽度设置为最优化
  8. DATA: i_grid_settings TYPE lvc_s_glay."修改状态
  9. i_grid_settings-edt_cll_cb = 'X'.
  10. w_repid = sy-repid.

  11. DATA: column(7) TYPE c.
  12. *DATA it LIKE TABLE OF column.

  13. DATA: BEGIN OF wa,
  14.         co1 LIKE column,
  15.         co2 LIKE column,
  16.         co3 LIKE column,
  17.         co4 LIKE column,
  18.         co5 LIKE column,
  19.         co6 LIKE column,
  20.         co7 LIKE column,
  21.         co8 LIKE column,
  22.         co9 LIKE column,
  23.       END OF wa.
  24. DATA itab LIKE TABLE OF wa.

  25. *变量定义

  26. DATA: gr_table TYPE REF TO cl_salv_table.
  27. DATA: wa_layout   TYPE lvc_s_layo.

  28. FORM frm_display_data .
  29.   PERFORM frm_fill_field.
  30. ENDFORM.

  31. DATA: fieldcat TYPE lvc_t_fcat WITH HEADER LINE.

  32. DEFINE fill_field.
  33.   CLEAR fieldcat.
  34.   fieldcat-fieldname     = &1.
  35.   fieldcat-col_pos       = &2.
  36.   APPEND fieldcat.
  37. END-OF-DEFINITION.

  38. SELECTION-SCREEN BEGIN OF BLOCK blk WITH FRAME.
  39. PARAMETERS: p_full RADIOBUTTON GROUP rg,
  40.             p_list RADIOBUTTON GROUP rg.
  41. SELECTION-SCREEN END OF BLOCK blk.

  42. *----------------------------------------------------------------------*
  43. *       CLASS lcl_alv DEFINITION
  44. *----------------------------------------------------------------------*
  45. *       ALV操作类(定义)
  46. *----------------------------------------------------------------------*
  47. CLASS lcl_alv DEFINITION.
  48.   PUBLIC SECTION.
  49.     METHODS: getdata         "取得要显示的数据
  50.       RETURNING VALUE(lt_tab) LIKE itab,
  51.       alv_full        "全屏Grid列表处理方法
  52.         IMPORTING VALUE(lt_tab) LIKE itab,
  53.       alv_list        "普通List处理方法
  54.         IMPORTING VALUE(lt_tab) LIKE itab,
  55.       main.           "主方法
  56. ENDCLASS.                    "lcl_alv DEFINITION


  57. *----------------------------------------------------------------------*
  58. *       CLASS lcl_alv IMPLEMENTATION
  59. *----------------------------------------------------------------------*
  60. *       ALV操作类(实现)
  61. *----------------------------------------------------------------------*
  62. CLASS lcl_alv IMPLEMENTATION.
  63. *取得要显示的数据
  64.   METHOD getdata.
  65.     DO 9 TIMES.
  66.       DATA i1 TYPE i.
  67.       i1 = sy-index.

  68.       DO i1 TIMES.
  69.         DATA result(2) TYPE c.
  70.         DATA: c1 TYPE c,
  71.               c2 TYPE c.
  72.         result = i1 * sy-index.
  73.         c1 = i1.
  74.         c2 = sy-index.
  75.         CONCATENATE c1 '*' c2 '=' result INTO column.
  76.         CONCATENATE wa column INTO wa SEPARATED BY ' '.

  77.       ENDDO.
  78.       APPEND wa TO lt_tab.
  79.       CLEAR wa.
  80.     ENDDO.

  81.   ENDMETHOD.                    "getdata

  82. *输出全屏网格列表的方法
  83.   METHOD alv_full.
  84.     "创建实例
  85.     TRY.
  86.         cl_salv_table=>factory(
  87.           IMPORTING
  88.             r_salv_table = gr_table
  89.           CHANGING
  90.             t_table      = lt_tab
  91.         ).
  92.       CATCH cx_salv_msg.
  93.     ENDTRY.

  94.     "显示列表
  95.     gr_table->display( ).
  96.   ENDMETHOD.                    "alv_full

  97. *输出全屏普通列表的方法
  98.   METHOD alv_list.
  99.     "创建实例
  100.     TRY.
  101.         cl_salv_table=>factory(
  102.           EXPORTING
  103.             list_display = 'X'
  104.           IMPORTING
  105.             r_salv_table = gr_table
  106.           CHANGING
  107.             t_table      = lt_tab
  108.         ).
  109.       CATCH cx_salv_msg.
  110.     ENDTRY.

  111.     "显示列表
  112.     gr_table->display( ).
  113.   ENDMETHOD.                    "alv_list

  114. *主方法,整合数据
  115.   METHOD main.
  116.     DATA: lt_tab LIKE itab.

  117.     "取得要显示的数据
  118.     lt_tab = me->getdata( ).

  119.     "判断选择屏幕的选择条件调用不同的方法
  120.     CASE 'X'.
  121.       WHEN p_full.
  122.         me->alv_full( lt_tab ).
  123.       WHEN p_list.
  124.         me->alv_list( lt_tab ).
  125.     ENDCASE.
  126.   ENDMETHOD.                    "main
  127. ENDCLASS.                    "lcl_alv IMPLEMENTATION
  128. FORM frm_layout .
  129.   CLEAR: wa_layout."它用来定义ALV报表的整体属性
  130. * WA_LAYOUT-ZEBRA         = 'X' ."ZBbra
  131. *  WA_LAYOUT-DETAILINIT         = 'X' . "initial values on detail screen
  132.   wa_layout-cwidth_opt    = 'X'."优化列宽选项是否设置
  133. *  WA_LAYOUT-DETAILTITL      = 'Detail Information' ."设置弹出窗口的标题栏
  134.   wa_layout-box_fname = 'SEL'.
  135. *  WA_LAYOUT-INFO_FNAME = 'ROWCOLOR'.

  136. ENDFORM.
  137. FORM frm_fill_field.

  138.   CLEAR fieldcat.
  139.   fieldcat-fieldname = 'BELNR'.
  140.   fieldcat-col_pos   = '9'.
  141.   APPEND fieldcat.

  142.   fill_field '1' '9'.
  143.   fill_field '2' '9'.
  144.   fill_field '3' '9'.
  145.   fill_field '4' '9'.
  146.   fill_field '5' '9'.
  147.   fill_field '6' '9'.
  148.   fill_field '7' '9'.
  149.   fill_field '8' '9'.
  150.   fill_field '9' '9'.

  151. ENDFORM.                    " FRM_FILL_FIELD
  152. *报表执行
  153. START-OF-SELECTION.
  154.   DATA  lr_alv   TYPE REF TO lcl_alv.
  155.   CREATE OBJECT lr_alv.
  156.   lr_alv->main( ).
复制代码
回复 支持 反对

使用道具 举报

Twilight

RE: 如何使用ALV创建99乘法表

你把oo alv和function alv混在一起了
  1. TYPE-POOLS:slis.

  2. DATA: column(7) TYPE c.
  3. *DATA it LIKE TABLE OF column.

  4. DATA: BEGIN OF wa,
  5.         co1 LIKE column,
  6.         co2 LIKE column,
  7.         co3 LIKE column,
  8.         co4 LIKE column,
  9.         co5 LIKE column,
  10.         co6 LIKE column,
  11.         co7 LIKE column,
  12.         co8 LIKE column,
  13.         co9 LIKE column,
  14.       END OF wa.
  15. DATA itab LIKE TABLE OF wa.

  16. *变量定义

  17. DATA: gr_table TYPE REF TO cl_salv_table.

  18. SELECTION-SCREEN BEGIN OF BLOCK blk WITH FRAME.
  19. PARAMETERS: p_full RADIOBUTTON GROUP rg,
  20.             p_list RADIOBUTTON GROUP rg.
  21. SELECTION-SCREEN END OF BLOCK blk.

  22. *----------------------------------------------------------------------*
  23. *       CLASS lcl_alv DEFINITION
  24. *----------------------------------------------------------------------*
  25. *       ALV操作类(定义)
  26. *----------------------------------------------------------------------*
  27. CLASS lcl_alv DEFINITION.
  28.   PUBLIC SECTION.
  29.     METHODS: getdata         "取得要显示的数据
  30.       RETURNING VALUE(lt_tab) LIKE itab,
  31.       alv_full        "全屏Grid列表处理方法
  32.         IMPORTING VALUE(lt_tab) LIKE itab,
  33.       alv_list        "普通List处理方法
  34.         IMPORTING VALUE(lt_tab) LIKE itab,
  35.       main,           "主方法
  36.       fieldcate.
  37. ENDCLASS.                    "lcl_alv DEFINITION


  38. *----------------------------------------------------------------------*
  39. *       CLASS lcl_alv IMPLEMENTATION
  40. *----------------------------------------------------------------------*
  41. *       ALV操作类(实现)
  42. *----------------------------------------------------------------------*
  43. CLASS lcl_alv IMPLEMENTATION.
  44. *取得要显示的数据
  45.   METHOD getdata.
  46.     DO 9 TIMES.
  47.       DATA i1 TYPE i.
  48.       i1 = sy-index.

  49.       DO i1 TIMES.
  50.         DATA result(2) TYPE c.
  51.         DATA: c1 TYPE c,
  52.               c2 TYPE c.
  53.         result = i1 * sy-index.
  54.         c1 = i1.
  55.         c2 = sy-index.
  56.         CONCATENATE c1 '*' c2 '=' result INTO column.
  57.         CONCATENATE wa column INTO wa SEPARATED BY ' '.

  58.       ENDDO.
  59.       APPEND wa TO lt_tab.
  60.       CLEAR wa.
  61.     ENDDO.

  62.   ENDMETHOD.                    "getdata

  63. *输出全屏网格列表的方法
  64.   METHOD alv_full.
  65.     "创建实例
  66.     TRY.
  67.         cl_salv_table=>factory(
  68.           IMPORTING
  69.             r_salv_table = gr_table
  70.           CHANGING
  71.             t_table      = lt_tab
  72.         ).
  73.       CATCH cx_salv_msg.
  74.     ENDTRY.

  75.     me->fieldcate( ).

  76.     "显示列表
  77.     gr_table->display( ).
  78.   ENDMETHOD.                    "alv_full

  79. *输出全屏普通列表的方法
  80.   METHOD alv_list.
  81.     "创建实例
  82.     TRY.
  83.         cl_salv_table=>factory(
  84.           EXPORTING
  85.             list_display = 'X'
  86.           IMPORTING
  87.             r_salv_table = gr_table
  88.           CHANGING
  89.             t_table      = lt_tab
  90.         ).
  91.       CATCH cx_salv_msg.
  92.     ENDTRY.

  93.     "显示列表
  94.     gr_table->display( ).
  95.   ENDMETHOD.                    "alv_list

  96. *主方法,整合数据
  97.   METHOD main.
  98.     DATA: lt_tab LIKE itab.

  99.     "取得要显示的数据
  100.     lt_tab = me->getdata( ).

  101.     "判断选择屏幕的选择条件调用不同的方法
  102.     CASE 'X'.
  103.       WHEN p_full.
  104.         me->alv_full( lt_tab ).
  105.       WHEN p_list.
  106.         me->alv_list( lt_tab ).
  107.     ENDCASE.
  108.   ENDMETHOD.                    "main
  109.   METHOD fieldcate.
  110.     DATA: gr_columns TYPE REF TO cl_salv_columns_table.
  111.     DATA: gr_column TYPE REF TO cl_salv_column_table.
  112.     gr_columns = gr_table->get_columns( ).
  113.     gr_column ?= gr_columns->get_column( 'CO1' )."需处理的列
  114.     gr_column->set_long_text( 'name1' ).
  115.     gr_column->set_medium_text( 'name1' ).
  116.     gr_column->set_short_text( 'name1' ).
  117.     gr_column ?= gr_columns->get_column( 'CO2' )."需处理的列
  118.     gr_column->set_long_text( 'name2' ).
  119.     gr_column->set_medium_text( 'name2' ).
  120.     gr_column->set_short_text( 'name2' ).
  121.     gr_column ?= gr_columns->get_column( 'CO3' )."需处理的列
  122.     gr_column->set_long_text( 'name3' ).
  123.     gr_column->set_medium_text( 'name3' ).
  124.     gr_column->set_short_text( 'name3' ).
  125.     gr_column ?= gr_columns->get_column( 'CO4' )."需处理的列
  126.     gr_column->set_long_text( 'name4' ).
  127.     gr_column->set_medium_text( 'name4' ).
  128.     gr_column->set_short_text( 'name4' ).
  129.     gr_column ?= gr_columns->get_column( 'CO5' )."需处理的列
  130.     gr_column->set_long_text( 'name5' ).
  131.     gr_column->set_medium_text( 'name5' ).
  132.     gr_column->set_short_text( 'name5' ).
  133.     gr_column ?= gr_columns->get_column( 'CO6' )."需处理的列
  134.     gr_column->set_long_text( 'name6' ).
  135.     gr_column->set_medium_text( 'name6' ).
  136.     gr_column->set_short_text( 'name6' ).
  137.     gr_column ?= gr_columns->get_column( 'CO7' )."需处理的列
  138.     gr_column->set_long_text( 'name7' ).
  139.     gr_column->set_medium_text( 'name7' ).
  140.     gr_column->set_short_text( 'name7' ).
  141.     gr_column ?= gr_columns->get_column( 'CO8' )."需处理的列
  142.     gr_column->set_long_text( 'name8' ).
  143.     gr_column->set_medium_text( 'name8' ).
  144.     gr_column->set_short_text( 'name8' ).
  145.     gr_column ?= gr_columns->get_column( 'CO9' )."需处理的列
  146.     gr_column->set_long_text( 'name9' ).
  147.     gr_column->set_medium_text( 'name9' ).
  148.     gr_column->set_short_text( 'name9' ).
  149.   ENDMETHOD.
  150. ENDCLASS.                    "lcl_alv IMPLEMENTATION

  151. *报表执行
  152. START-OF-SELECTION.
  153.   DATA  lr_alv   TYPE REF TO lcl_alv.
  154.   CREATE OBJECT lr_alv.
  155.   lr_alv->main( ).
复制代码

ALV99.jpg
回复 支持 反对

使用道具 举报

XZ_P_0515
谢谢老师,因为刚刚开始接触,嘿嘿。太感谢您了
回复 支持 反对

使用道具 举报

快速回帖

本版积分规则
您需要登录后才可以回帖 登录 | 注册有礼

快速回复 返回顶部 返回列表