Chinaunix首页 | 论坛 | 博客
  • 博客访问: 57054
  • 博文数量: 29
  • 博客积分: 2000
  • 博客等级: 大尉
  • 技术积分: 245
  • 用 户 组: 普通用户
  • 注册时间: 2009-07-09 13:33
文章分类

全部博文(29)

文章存档

2014年(2)

2011年(1)

2010年(9)

2009年(17)

我的朋友

分类:

2009-07-29 13:58:29

加入了双击行操作和应用栏按钮以及其它一些设置!
请自行创建GUI STATUS "Y001".
 
*-----------------------------------------------------------------------
*  Program ID       : Z_AD_ALV
*-----------------------------------------------------------------------
REPORT z_ad_alv.
*-----------------------------------------------------------------------
* T Y P E S
*-----------------------------------------------------------------------
TYPE-POOLS:col.
*-> TYPES
TYPES:
*-> ALV data
  BEGIN OF typ_h_tbl_data,
    check        TYPE c,                    "CheckBox field
    matnr        TYPE marc-matnr,           "Material Number
    werks        TYPE marc-werks,           "Plant
    pstat        TYPE marc-pstat,           "Maintenance status
    lvorm        TYPE marc-lvorm,           "Flag Material
    bwtty        TYPE marc-bwtty,           "Valuation Category
    xchar        TYPE marc-xchar,           "Batch management
    mmsta        TYPE marc-mmsta,           "Plant-Specific
    mmstd        TYPE marc-mmstd,           "Date from which the
    maabc        TYPE marc-maabc,           "ABC Indicator
    kzkri        TYPE marc-kzkri,           "Indicator: Critical
    ekgrp        TYPE marc-ekgrp,           "Purchasing Group
    ausme        TYPE marc-ausme,           "Unit of issue
    dispr        TYPE marc-dispr,           "Material: MRP profile
    dismm        TYPE marc-dismm,           "MRP Type
    dispo        TYPE marc-dispo,           "MRP Controller
    kzdie        TYPE marc-kzdie,           "Indicator: MRP
    plifz        TYPE marc-plifz,           "Planned Delivery Time
    webaz        TYPE marc-webaz,           "Goods Receipt
    perkz        TYPE marc-perkz,           "Period Indicator
    ausss        TYPE marc-ausss,           "Assembly scrap in
    disls        TYPE marc-disls,           "Lot size (materials
    beskz        TYPE marc-beskz,           "Procurement Type
    sobsl        TYPE marc-sobsl,           "Special procurement
    minbe        TYPE marc-minbe,           "Reorder Point
    eisbe        TYPE marc-eisbe,           "Safety Stock
    dmbtr        TYPE mseg-dmbtr,           "Amount
    waers        TYPE mseg-waers,           "Currency
    ordate       TYPE sy-datum,             "Date
    tbl_colors   TYPE lvc_t_scol,           "Row color
  END   OF typ_h_tbl_data.
*-> Table type
TYPES typ_tbl_alv TYPE STANDARD TABLE OF typ_h_tbl_data.
*-> Range type: location
TYPES typ_rng_matnr  TYPE RANGE OF marc-matnr.
*-> Range type: plant
TYPES typ_rng_werks  TYPE RANGE OF marc-werks.
*-> Class Definition
CLASS lcl_handle_events DEFINITION DEFERRED.
*-----------------------------------------------------------------------
* D A T A
*-----------------------------------------------------------------------
*-> Internal table
DATA: tbl_alv   TYPE typ_tbl_alv,
      h_tbl_alv TYPE typ_h_tbl_data.
*-> Global Data
DATA: wk_matnr  TYPE marc-matnr,  "Material Number
      wk_plant  TYPE marc-werks,  "Plant
      wk_row    TYPE char10,      "Line number
      wk_msgtxt TYPE char50.      "Message text
*-> Class
DATA: wcl_events TYPE REF TO lcl_handle_events,"Handle event
      wcl_alv    TYPE REF TO cl_salv_table.    "ALV table
*-----------------------------------------------------------------------
* C O N S T A N T S
*-----------------------------------------------------------------------
CONSTANTS:
  cns_on         TYPE c       VALUE 'X',               "Flag On
  cns_msgty      TYPE c       VALUE 'I',               "Message type
  cns_sep        TYPE c       VALUE '-',               "Seperator
  cns_matnr(16)  TYPE c       VALUE 'Material Number:',"Metrial No.
  cns_plant(6)   TYPE c       VALUE 'Plant:',          "Plant
  cns_pm(14)     TYPE c       VALUE 'Plant Material',  "Plant Material
  cns_gui_status TYPE sypfkey VALUE 'Y001'.            "ALV list menu
*---------------------------------------------------------------------*
*    CLASS lcl_handle_events DEFINITION
*---------------------------------------------------------------------*
* Define a local class for handling events of cl_salv_table
*---------------------------------------------------------------------*
CLASS lcl_handle_events DEFINITION.
  PUBLIC SECTION.
    METHODS:
      on_user_command FOR EVENT added_function OF cl_salv_events
        IMPORTING e_salv_function,
      double_click FOR EVENT double_click OF cl_salv_events_table
        IMPORTING row.
ENDCLASS.                    "lcl_handle_events DEFINITION

*-----------------------------------------------------------------------
* P A R A M E T E R S   &   S E L E C T - O P T I O N S
*-----------------------------------------------------------------------
*-> Material Number
SELECT-OPTIONS s_matnr FOR wk_matnr.
*-> Plant
SELECT-OPTIONS s_plant FOR wk_plant.
*-----------------------------------------------------------------------
* S T A R T - O F - S E L E C T I O N
*-----------------------------------------------------------------------
START-OF-SELECTION.
*-> Get data
  PERFORM get_data
            USING    s_matnr[]
                     s_plant[]
            CHANGING tbl_alv.
*-----------------------------------------------------------------------
* E N D - O F - S E L E C T I O N
*-----------------------------------------------------------------------
END-OF-SELECTION.
*-> Output ALV data
  PERFORM output_alv_data
            USING    tbl_alv.
*---------------------------------------------------------------------*
*  CLASS lcl_handle_events IMPLEMENTATION
*---------------------------------------------------------------------*
*  Implement the events for handling the events of cl_salv_table
*---------------------------------------------------------------------*
CLASS lcl_handle_events IMPLEMENTATION.
  METHOD on_user_command.
    IF sy-ucomm = 'RESET'.
      MESSAGE 'You clicked the RESET button' TYPE cns_msgty.
    ENDIF.
  ENDMETHOD.                    "on_user_command
  METHOD double_click.
*   Show the ROW number
    MOVE row TO wk_row.
    CONDENSE wk_row.
    CONCATENATE 'You double clicked line'
                wk_row
           INTO wk_msgtxt
      SEPARATED BY space.
    MESSAGE wk_msgtxt TYPE cns_msgty.
  ENDMETHOD.                    "double_click
ENDCLASS.                    "lcl_handle_events IMPLEMENTATION
*&---------------------------------------------------------------------*
*&      Form  GET_DATA
*&---------------------------------------------------------------------*
*       Get data
*----------------------------------------------------------------------*
*  -->  fu_rng_matnr     Material Number
*  -->  fu_rng_sdate     Plant
*  <--  fc_tbl_data      ALV data
*----------------------------------------------------------------------*
FORM get_data
       USING    fu_rng_matnr     TYPE typ_rng_matnr
                fu_rng_werks     TYPE typ_rng_werks
       CHANGING fc_tbl_alv       TYPE typ_tbl_alv.
*-> Local data
  DATA l_h_tbl_color TYPE lvc_s_scol.
*-> Get data
  SELECT matnr
         werks
         pstat
         lvorm
         bwtty
         xchar
         mmsta
         mmstd
         maabc
         kzkri
         ekgrp
         ausme
         dispr
         dismm
         dispo
         kzdie
         plifz
         webaz
         perkz
         ausss
         disls
         beskz
         sobsl
         minbe
         eisbe
    INTO CORRESPONDING FIELDS OF TABLE tbl_alv
    FROM marc
   WHERE matnr IN fu_rng_matnr
     AND werks IN fu_rng_werks.
  IF sy-subrc = 0.
    SORT tbl_alv BY matnr ASCENDING
                    werks ASCENDING.
*-> Set color form field plant
    LOOP AT tbl_alv INTO h_tbl_alv.
      IF sy-tabix < 10.
        h_tbl_alv-dmbtr = '100.28'.
        h_tbl_alv-waers = 'RMB'.
        h_tbl_alv-ordate = '20090728'.
      ELSEif sy-tabix > 10 AND sy-tabix < 15 .
        h_tbl_alv-dmbtr = '101.280'.
        h_tbl_alv-waers = 'JPY'.
        h_tbl_alv-ordate = '20090729'.
      ELSEif sy-tabix > 15 AND sy-tabix < 20 .
        h_tbl_alv-dmbtr = '101.280'.
        h_tbl_alv-waers = 'RMB'.
        h_tbl_alv-ordate = '20090729'.
      ELSE.
        h_tbl_alv-dmbtr = '110.28'.
        h_tbl_alv-waers = 'RMB'.
        h_tbl_alv-ordate = '20090730'.
      ENDIF.
      IF h_tbl_alv-werks = 'CPF4'.
        l_h_tbl_color-fname = 'WERKS'.
        l_h_tbl_color-color-col = col_group.
        l_h_tbl_color-color-int = 1.
        APPEND l_h_tbl_color TO h_tbl_alv-tbl_colors.
      ENDIF.
      IF h_tbl_alv-werks = 'CPF1'.
        CLEAR l_h_tbl_color.
        l_h_tbl_color-color-col = col_heading.
        l_h_tbl_color-color-int = 1.
        APPEND l_h_tbl_color TO h_tbl_alv-tbl_colors.
      ENDIF.
      MODIFY tbl_alv FROM h_tbl_alv TRANSPORTING tbl_colors
                                                 dmbtr waers ordate.
    ENDLOOP.
  ENDIF.
ENDFORM.                    " GET_DATA
*&---------------------------------------------------------------------*
*&      Form  OUTPUT_ALV_DATA
*&---------------------------------------------------------------------*
*       Output ALV data
*----------------------------------------------------------------------*
* -->  fu_tbl_data      ALV data
*----------------------------------------------------------------------*
FORM output_alv_data
       USING fu_tbl_data    TYPE typ_tbl_alv.
 
*-> Local data
  DATA: l_wcl_events  TYPE REF TO cl_salv_events_table,"Register events
        l_wcl_columns TYPE REF TO cl_salv_columns_table,"ALV columns
        l_wcl_column  TYPE REF TO cl_salv_column_table, "ALV column
        l_wcl_display TYPE REF TO cl_salv_display_settings,"Display
        l_wcl_grid    TYPE REF TO cl_salv_form_layout_grid,"Grid table
        l_wcl_selections TYPE REF TO cl_salv_selections,"Selection
        l_wcl_aggregs    TYPE REF TO cl_salv_aggregations,
        l_wcl_aggreg     TYPE REF TO cl_salv_aggregation,
        l_wcl_sorts      TYPE REF TO cl_salv_sorts,
        l_wcl_sort       TYPE REF TO cl_salv_sort,
        l_wk_title       TYPE lvc_title,
        l_wk_color       TYPE lvc_s_colo,
        l_wk_text        TYPE char255.
 
  CREATE OBJECT l_wcl_grid.
 
*-> Set ALV commission list data
  TRY .
      CALL METHOD cl_salv_table=>factory
        IMPORTING
          r_salv_table = wcl_alv
        CHANGING
          t_table      = fu_tbl_data.
    CATCH cx_salv_msg.
  ENDTRY.
*-> Set Title Information of TOP OF PAGE
  l_wcl_grid->create_header_information(
    row     = 1
    column  = 1
    text    = cns_pm ).
 
*-> Set title bar
  l_wcl_display = wcl_alv->get_display_settings( ).
  l_wk_title = 'Advanced ALV'.
  l_wcl_display->set_list_header( value = l_wk_title ).
  l_wcl_display->set_list_header_size(
    value = cl_salv_display_settings=>c_header_size_large ).
 
*-> Set Header Data(Top of page)
*-> Line 1(Material Number)
  l_wcl_grid->create_text(
    row     = 2
    column  = 1
    text    = cns_matnr ).
  CONCATENATE s_matnr-low cns_sep s_matnr-high
         INTO l_wk_text SEPARATED BY space.
  l_wcl_grid->create_text(
    row     = 2
    column  = 2
    text    = l_wk_text ).
*-> Line 2(Plant)
  l_wcl_grid->create_text(
    row     = 3
    column  = 1
    text    = cns_plant ).
  CONCATENATE s_plant-low cns_sep s_plant-high
         INTO l_wk_text SEPARATED BY space.
  l_wcl_grid->create_text(
    row     = 3
    column  = 2
    text    = l_wk_text ).
  wcl_alv->set_top_of_list( l_wcl_grid ).
 
*-> Set optimize columns width
  l_wcl_columns = wcl_alv->get_columns( ).
  l_wcl_columns->set_optimize( ).
 
*-> Set ALV striped pattern
  l_wcl_display = wcl_alv->get_display_settings( ).
  l_wcl_display->set_striped_pattern( value = abap_true ).
 
*-> Set Selection Mode
  l_wcl_selections = wcl_alv->get_selections( ).
  l_wcl_selections->set_selection_mode(
    value = if_salv_c_selection_mode=>cell ).
 
*-> Set GUI status
  wcl_alv->set_screen_status(
    pfstatus      = cns_gui_status
    report        = sy-repid
    set_functions = wcl_alv->c_functions_all ).
 
*-> Set title text
  TRY.
    l_wcl_column ?= l_wcl_columns->get_column( columnname = 'MATNR' ).
    CATCH cx_salv_not_found .
  ENDTRY.
  l_wcl_column->set_long_text( 'My Material Number' ).
  l_wcl_column->set_medium_text( 'Material Number' ).
  l_wcl_column->set_short_text( 'Material' ).
 
*-> Set Color for column dismm(MRP Type)
  TRY.
    l_wcl_column ?= l_wcl_columns->get_column( columnname = 'DISMM' ).
    CATCH cx_salv_not_found .
  ENDTRY.
  l_wk_color-col = '6'.
  l_wk_color-int = '1'.
  l_wk_color-inv = '0'.
  l_wcl_column->set_color( l_wk_color ).
 
*-> Set color for Colum Plant
  l_wcl_columns = wcl_alv->get_columns( ).
* set cell color
  TRY.
      l_wcl_columns->set_color_column( value = 'TBL_COLORS' ).
    CATCH cx_salv_data_error.
  ENDTRY.

* get sorts object
  l_wcl_sorts = wcl_alv->get_sorts( ).

* set sort order
  TRY.
    l_wcl_sorts->set_group_active( ).
    l_wcl_sorts->add_sort(
      columnname = 'ORDATE'
      group      = if_salv_c_sort=>group_with_newpage ).
    l_wcl_sort = l_wcl_sorts->get_sort( 'ORDATE' ).
    l_wcl_sort->set_sequence( value = if_salv_c_sort=>sort_up ).
    l_wcl_sort->set_subtotal( ).
    CATCH: cx_salv_data_error,
           cx_salv_existing,
           cx_salv_not_found.
  ENDTRY.
 
*-> set aggregation
  l_wcl_aggregs = wcl_alv->get_aggregations( ).
* add  an aggregation
  TRY.
    l_wcl_aggregs->add_aggregation(
      columnname = 'DMBTR'
      aggregation = if_salv_c_aggregation=>total ).
    CATCH: cx_salv_not_found,
           cx_salv_existing,
           cx_salv_data_error.
  ENDTRY.
 
*-> Set Checkbox
  l_wcl_columns = wcl_alv->get_columns( ).
  TRY.
    l_wcl_column ?= l_wcl_columns->get_column( columnname = 'CHECK' ).
    CATCH cx_salv_not_found.
  ENDTRY.
  l_wcl_column->set_cell_type( value =
                               if_salv_c_cell_type=>checkbox_hotspot ).
 
*-> Set Currency
  l_wcl_columns = wcl_alv->get_columns( ).
  TRY.
    l_wcl_column ?= l_wcl_columns->get_column( columnname = 'DMBTR' ).
    CATCH cx_salv_not_found.
  ENDTRY.
  TRY.
    l_wcl_column->set_currency_column( value = 'WAERS' ).
    CATCH: cx_salv_not_found,
           cx_salv_data_error.
  ENDTRY.
 
*-> Get events
  l_wcl_events = wcl_alv->get_event( ).
  CREATE OBJECT wcl_events.
*-> Register to the event USER_COMMAND
  SET HANDLER wcl_events->on_user_command FOR l_wcl_events.
  SET HANDLER wcl_events->double_click    FOR l_wcl_events.
 
* display ALV list
  wcl_alv->display( ).
 
ENDFORM.                    " OUTPUT_ALV_DATA
阅读(1325) | 评论(0) | 转发(0) |
0

上一篇:Excel 快捷键

下一篇:选择屏幕的折叠效果

给主人留下些什么吧!~~