# ITC/# SAP
ALV Grid with Transtion Watch
ilus
2012. 9. 21. 17:43
*&---------------------------------------------------------------------*
*& Report ZALV_S
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ZALV_S.
TABLES: ZTKKS01.
TYPE-POOLS: SLIS. "ALV Declarations
*Data Declaration
*----------------
TYPES: BEGIN OF T_EKKO,
EBELN TYPE ZTKKS01-ITEMNO,
EBELP TYPE ZTKKS01-GROUPS,
STATU TYPE ZTKKS01-AREA,
AEDAT TYPE ZTKKS01-NAME,
MATNR TYPE ZTKKS01-HOMETEL,
MENGE TYPE ZTKKS01-MOBILE,
MEINS TYPE ZTKKS01-EMAIL,
NETPR TYPE ZTKKS01-BIRTH,
PEINH TYPE ZTKKS01-ADDRESS,
LINE_COLOR(4) TYPE C, "Used to store row color attributes
END OF T_EKKO.
DATA: IT_EKKO TYPE STANDARD TABLE OF T_EKKO INITIAL SIZE 0,
WA_EKKO TYPE T_EKKO.
*ALV data declarations
DATA: FIELDCATALOG TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE,
GD_TAB_GROUP TYPE SLIS_T_SP_GROUP_ALV,
GD_LAYOUT TYPE SLIS_LAYOUT_ALV,
GD_REPID LIKE SY-REPID.
* Transtion Prograss Watch
DATA: G_TOTAL TYPE I,
G_CNT TYPE I,
G_INDEX TYPE I.
DATA : GT_SFLIGHT TYPE TABLE OF ZTKKS01 WITH HEADER LINE.
************************************************************************
*Start-of-selection.
START-OF-SELECTION.
PERFORM DATA_RETRIEVAL.
PERFORM BUILD_FIELDCATALOG.
PERFORM BUILD_LAYOUT.
PERFORM DISPLAY_ALV_REPORT.
*&---------------------------------------------------------------------*
*& Form BUILD_FIELDCATALOG
*&---------------------------------------------------------------------*
* Build Fieldcatalog for ALV Report
*----------------------------------------------------------------------*
FORM BUILD_FIELDCATALOG.
* There are a number of ways to create a fieldcat.
* For the purpose of this example i will build the fieldcatalog manualy
* by populating the internal table fields individually and then
* appending the rows. This method can be the most time consuming but can
* also allow you more control of the final product.
* Beware though, you need to ensure that all fields required are
* populated. When using some of functionality available via ALV, such as
* total. You may need to provide more information than if you were
* simply displaying the result
* I.e. Field type may be required in-order for
* the 'TOTAL' function to work.
FIELDCATALOG-FIELDNAME = 'EBELN'.
FIELDCATALOG-SELTEXT_M = 'ITEM-NO'.
FIELDCATALOG-COL_POS = 0.
FIELDCATALOG-OUTPUTLEN = 10.
FIELDCATALOG-EMPHASIZE = 'X'.
FIELDCATALOG-KEY = 'X'.
* fieldcatalog-do_sum = 'X'.
* fieldcatalog-no_zero = 'X'.
APPEND FIELDCATALOG TO FIELDCATALOG.
CLEAR FIELDCATALOG.
FIELDCATALOG-FIELDNAME = 'EBELP'.
FIELDCATALOG-SELTEXT_M = 'GROUP'.
FIELDCATALOG-COL_POS = 1.
APPEND FIELDCATALOG TO FIELDCATALOG.
CLEAR FIELDCATALOG.
FIELDCATALOG-FIELDNAME = 'STATU'.
FIELDCATALOG-SELTEXT_M = 'AREA'.
FIELDCATALOG-COL_POS = 2.
APPEND FIELDCATALOG TO FIELDCATALOG.
CLEAR FIELDCATALOG.
FIELDCATALOG-FIELDNAME = 'AEDAT'.
FIELDCATALOG-SELTEXT_M = 'NAME'.
FIELDCATALOG-COL_POS = 3.
APPEND FIELDCATALOG TO FIELDCATALOG.
CLEAR FIELDCATALOG.
FIELDCATALOG-FIELDNAME = 'MATNR'.
FIELDCATALOG-SELTEXT_M = 'HOME-TEL'.
FIELDCATALOG-COL_POS = 4.
APPEND FIELDCATALOG TO FIELDCATALOG.
CLEAR FIELDCATALOG.
FIELDCATALOG-FIELDNAME = 'MENGE'.
FIELDCATALOG-SELTEXT_M = 'MOBILE'.
FIELDCATALOG-COL_POS = 5.
APPEND FIELDCATALOG TO FIELDCATALOG.
CLEAR FIELDCATALOG.
FIELDCATALOG-FIELDNAME = 'MEINS'.
FIELDCATALOG-SELTEXT_M = 'E-MAIL'.
FIELDCATALOG-COL_POS = 6.
APPEND FIELDCATALOG TO FIELDCATALOG.
CLEAR FIELDCATALOG.
FIELDCATALOG-FIELDNAME = 'NETPR'.
FIELDCATALOG-SELTEXT_M = 'BIRTH'.
FIELDCATALOG-COL_POS = 7.
FIELDCATALOG-OUTPUTLEN = 15.
FIELDCATALOG-DATATYPE = 'CURR'.
APPEND FIELDCATALOG TO FIELDCATALOG.
CLEAR FIELDCATALOG.
FIELDCATALOG-FIELDNAME = 'PEINH'.
FIELDCATALOG-SELTEXT_M = 'ADDRESS'.
FIELDCATALOG-COL_POS = 8.
APPEND FIELDCATALOG TO FIELDCATALOG.
CLEAR FIELDCATALOG.
ENDFORM. " BUILD_FIELDCATALOG
*&---------------------------------------------------------------------*
*& Form BUILD_LAYOUT
*&---------------------------------------------------------------------*
* Build layout for ALV grid report
*----------------------------------------------------------------------*
FORM BUILD_LAYOUT.
GD_LAYOUT-NO_INPUT = 'X'.
GD_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
GD_LAYOUT-TOTALS_TEXT = 'TOTALS'(201).
* Set layout field for row attributes(i.e. color)
GD_LAYOUT-INFO_FIELDNAME = 'LINE_COLOR'.
* gd_layout-totals_only = 'X'.
* gd_layout-f2code = 'DISP'. "Sets fcode for when double
* "click(press f2)
* gd_layout-zebra = 'X'.
* gd_layout-group_change_edit = 'X'.
* gd_layout-header_text = 'helllllo'.
ENDFORM. " BUILD_LAYOUT
*&---------------------------------------------------------------------*
*& Form DISPLAY_ALV_REPORT
*&---------------------------------------------------------------------*
* Display report using ALV grid
*----------------------------------------------------------------------*
FORM DISPLAY_ALV_REPORT.
GD_REPID = SY-REPID.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = GD_REPID
* i_callback_top_of_page = 'TOP-OF-PAGE' "see FORM
* i_callback_user_command = 'USER_COMMAND'
* i_grid_title = outtext
IS_LAYOUT = GD_LAYOUT
IT_FIELDCAT = FIELDCATALOG[]
* it_special_groups = gd_tabgroup
* IT_EVENTS = GT_XEVENTS
I_SAVE = 'X'
* is_variant = z_template
TABLES
T_OUTTAB = IT_EKKO
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. " DISPLAY_ALV_REPORT
*&---------------------------------------------------------------------*
*& Form DATA_RETRIEVAL
*&---------------------------------------------------------------------*
* Retrieve data form EKPO table and populate itab it_ekko
*----------------------------------------------------------------------*
FORM DATA_RETRIEVAL.
DATA: LD_COLOR(1) TYPE C.
SELECT ITEMNO GROUPS AREA NAME HOMETEL MOBILE EMAIL BIRTH ADDRESS
UP TO 10 ROWS
FROM ZTKKS01
INTO TABLE IT_EKKO.
DESCRIBE TABLE IT_EKKO LINES G_TOTAL. " Transtion Prograss Watch
*Populate field with color attributes
LOOP AT IT_EKKO INTO WA_EKKO.
* Populate color variable with colour properties
* Char 1 = C (This is a color property)
* Char 2 = 3 (Color codes: 1 - 7)
* Char 3 = Intensified on/off ( 1 or 0 )
* Char 4 = Inverse display on/off ( 1 or 0 )
* i.e. wa_ekko-line_color = 'C410'
LD_COLOR = LD_COLOR + 1.
* Only 7 colours so need to reset color value
IF LD_COLOR = 3.
LD_COLOR = 1.
ENDIF.
CONCATENATE 'C' LD_COLOR '10' INTO WA_EKKO-LINE_COLOR.
* wa_ekko-line_color = 'C410'.
MODIFY IT_EKKO FROM WA_EKKO.
G_CNT = G_CNT + 1. " Transtion Prograss Watch
PERFORM PROGRESS_INDICATOR " Transtion Prograss Watch
USING G_CNT G_TOTAL ' Progressing... '. " Transtion Prograss Watch
ENDLOOP.
ENDFORM. " DATA_RETRIEVAL
*&--------------------------------------------------------------------*
*& Form progress_indicator
*&--------------------------------------------------------------------*
FORM PROGRESS_INDICATOR USING VALUE(P_CUR)
VALUE(P_TOTAL)
VALUE(P_TEXT).
DATA : TEXT(50) TYPE C,
IDX1(3) TYPE N.
IF P_CUR > P_TOTAL.
IDX1 = 100.
ELSE.
IDX1 = ( P_CUR / P_TOTAL ) * 100.
ENDIF.
CHECK G_INDEX <> IDX1 OR G_INDEX IS INITIAL.
G_INDEX = IDX1.
CONCATENATE IDX1 ' % : ' P_TEXT INTO TEXT.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
PERCENTAGE = IDX1
TEXT = TEXT
EXCEPTIONS
OTHERS = 0.
ENDFORM. " progress_indicator