Abap/4控制ALV表格(5)

来源:互联网 发布:应用最广泛的编程语言 编辑:程序博客网 时间:2024/05/23 20:15

*HelloWorld基本的ALV表格程序

REPORT  ZRA00746_002
message-id SU line-size 132 line-count 65 no standard page heading.

*引用类型及模块
type-pools slis.
include <icon>.
include <symbol>.

*宣告所使用的报表
*---------------------------------------------------------------
tables: usr01.
*---------------------------------------------------------------

*定义全局常量
*---------------------------------------------------------------
constants c_tax type c value 'q'.
*---------------------------------------------------------------

*定义内部表
*---------------------------------------------------------------
data: begin of itab_100 occurs 1,
          bname like usr01-bname,
          spld like usr01-spld,
          splg like usr01-splg,
          spdb like usr01-spdb,
          spda like usr01-spda,
          datfm like usr01-datfm,
      end of itab_100.
*---------------------------------------------------------------

*定义全局变量
*---------------------------------------------------------------
 data: g_repid like sy-repid,
       gt_fieldcat type slis_t_fieldcat_alv.
*---------------------------------------------------------------

*选择输入参数
*---------------------------------------------------------------
selection-screen begin of block b2 with frame title text-001.
   select-options s_bname for usr01-bname.
selection-screen end of block b2.

*---------------------------------------------------------------

*检查selection-screen输入的值是否正确
*---------------------------------------------------------------
initialization.
   g_repid = sy-repid.
   perform get_fieldcat using gt_fieldcat.
*---------------------------------------------------------------

*开始主程序
*---------------------------------------------------------------
start-of-selection.
    refresh itab_100.
    clear itab_100.
    perform get_data.
    perform sort_data.
    perform list_data.
end-of-selection.
*--------------------------------------------------------------

*报表头定义
*---------------------------------------------------------------
top-of-page.
DATA: COMP_POSI  TYPE I,
      MODUL_POSI TYPE I,
      PAGE_POSI  TYPE I,
      TITL_POSI  TYPE I,
      L_COMP(20) TYPE C VALUE '江西亚东水泥有限公司',
      L_MODUL(20) TYPE C VALUE '供应应商资料表'.

    COMP_POSI  = ( SY-LINSZ - STRLEN( L_COMP ) ) / 2.
    MODUL_POSI = ( SY-LINSZ - STRLEN( L_MODUL ) ) / 2.
    TITL_POSI  = ( SY-LINSZ - STRLEN( SY-TITLE ) ) / 2.
    PAGE_POSI  = SY-LINSZ - STRLEN( '印表日期' ) - 10.

    WRITE: ' ', AT COMP_POSI L_COMP.
    WRITE: AT MODUL_POSI L_MODUL.
    WRITE: '程式代号',SY-CPROG,
            at PAGE_POSI '页面', SY-PAGNO LEFT-JUSTIFIED.
    WRITE: '列印人员:', sy-uname,
           at PAGE_POSI  '印表日期', SY-DATUM.

    ULINE.
    WRITE: text-002,
             text-003,
             text-004,
             text-005,
             text-006,
             text-007.
uline.
*--------------------------------------------------------------

*取得数据Produce
*--------------------------------------------------------------
FORM get_data.

     select * from usr01
          into corresponding fields of itab_100
          where bname in s_bname.
       append itab_100.
       clear itab_100.
     endselect.

ENDFORM.                     "get_data
*---------------------------------------------------------------

*将数据排序Produce
*---------------------------------------------------------------
FORM sort_data.

     sort itab_100 by bname.

ENDFORM.                     "sort_data
*---------------------------------------------------------------

*输出数据Produce
*---------------------------------------------------------------
FORM list_data.
     call function 'REUSE_ALV_LIST_DISPLAY'
       exporting
         i_callback_program = g_repid
         it_fieldcat = gt_fieldcat[]
         I_CALLBACK_USER_COMMAND  = 'FRM_ALV_USER_COMMAND'
         i_save = 'A'
       tables
         t_outtab = itab_100.


ENDFORM.                     "list_data
*---------------------------------------------------------------
*&---------------------------------------------------------------------
*&      Form  get_fieldcat
*&---------------------------------------------------------------------
*构建fieldcat list & output
*----------------------------------------------------------------------
*      --P_GT_FIELDCAT  text
*----------------------------------------------------------------------
FORM get_fieldcat  USING P_GT_FIELDCAT type slis_t_fieldcat_alv.
     data ls_fieldcat type slis_fieldcat_alv.

     clear ls_fieldcat.

  define hout.
    l_pos = l_pos + 1.
    clear ls_fieldcat.
    ls_fieldcat-col_pos        = l_pos.
    ls_fieldcat-tabname        = 'IT_ITBA2'.
    ls_fieldcat-fieldname      = &1.
    ls_fieldcat-seltext_l      = &2.
    ls_fieldcat-outputlen      = &3.
    ls_fieldcat-hotspot        = &4.
    ls_fieldcat-ddictxt        = 'L'.
    append ls_fieldcat to p_gt_fieldcat.
  end-of-definition.

     ls_fieldcat-tabname       = 'ITAB_100'.
     ls_fieldcat-fieldname     = 'BNAME'.
     ls_fieldcat-seltext_l     = '用户名称'.
     ls_fieldcat-ddictxt       = 'L'.
     ls_fieldcat-outputlen     = '12'.
     append ls_fieldcat to P_GT_FIELDCAT.

     ls_fieldcat-tabname       = 'ITAB_100'.
     ls_fieldcat-fieldname     = 'SPLD'.
     ls_fieldcat-seltext_l     = '输出设备'.
     ls_fieldcat-ddictxt       = 'L'.
     ls_fieldcat-outputlen     = '4'.
     append ls_fieldcat to P_GT_FIELDCAT.

     ls_fieldcat-tabname       = 'ITAB_100'.
     ls_fieldcat-fieldname     = 'SPLG'.
     ls_fieldcat-seltext_l     = '参数1'.
     ls_fieldcat-ddictxt       = 'L'.
     ls_fieldcat-outputlen     = '1'.
     append ls_fieldcat to P_GT_FIELDCAT.

     ls_fieldcat-tabname       = 'ITAB_100'.
     ls_fieldcat-fieldname     = 'SPDB'.
     ls_fieldcat-seltext_l     = '参数2'.
     ls_fieldcat-ddictxt       = 'L'.
     ls_fieldcat-outputlen     = '1'.
     append ls_fieldcat to P_GT_FIELDCAT.

     ls_fieldcat-tabname       = 'ITAB_100'.
     ls_fieldcat-fieldname     = 'SPDA'.
     ls_fieldcat-seltext_l     = '参数3'.
     ls_fieldcat-ddictxt       = 'L'.
     ls_fieldcat-outputlen     = '1'.
     append ls_fieldcat to P_GT_FIELDCAT.

     ls_fieldcat-tabname       = 'ITAB_100'.
     ls_fieldcat-fieldname     = 'DATFM'.
     ls_fieldcat-seltext_l     = '日期格式'.
     ls_fieldcat-ddictxt       = 'L'.
     ls_fieldcat-outputlen     = '1'.
     append ls_fieldcat to P_GT_FIELDCAT.


ENDFORM.                     "get_fieldcat
*---------------------------------------------------------------------*
*       FORM FRM_ALV_USER_COMMAND                                     *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
*  -->  R_UCOMM                                                       *
*  -->  RS_SELFIELD                                                   *
*---------------------------------------------------------------------*
*form frm_alv_user_command using r_ucomm like sy-ucomm
*                   rs_selfield type slis_selfield.
*  data:l_mm03_start_sicht(15) type c  value 'BDEKLPQSVXZA'.
*  case r_ucomm.
*    when '&IC1'.
*      read table it_itab2 index rs_selfield-tabindex.
*      case rs_selfield-sel_tab_field.
*        when 'IT_ITBA2-VBELN'.
*          check it_itab2-vbeln is not initial.
*          set parameter id 'AUN' field it_itab2-vbeln.
*          call transaction 'VA03' and skip first screen.
*        when others.
*          ...
*      endcase.
*    when others.
*      ...
*  endcase.
*  rs_selfield-refresh = 'X'.
*endform.                    "FRM_ALV_USER_COMMAND