Code: Alles auswählen.
*&---------------------------------------------------------------------*
REPORT zicon .
INCLUDE <icon>.
TABLES : icon.
TYPES: BEGIN OF t_alv_tab,
icon TYPE icon_d,
END OF t_alv_tab.
DATA it_alvtab TYPE TABLE OF t_alv_tab .
DATA wa_alv TYPE t_alv_tab .
* Für ALV-Grid ------------------------------------------------
TYPE-POOLS : slis.
DATA it_fcat TYPE slis_t_fieldcat_alv.
DATA: ws_fcat LIKE LINE OF it_fcat.
DATA is_layout TYPE slis_layout_alv.
DATA it_excluding TYPE slis_t_extab.
DATA iw_excluding LIKE LINE OF it_excluding.
DATA is_variant LIKE disvariant.
DATA top_of_page TYPE slis_formname.
DATA llisth TYPE slis_listheader.
DATA ilisth TYPE slis_t_listheader.
DATA page(5) TYPE n.
DATA prog TYPE sy-repid.
DATA it_icon TYPE TABLE OF icon_d.
FIELD-SYMBOLS <fs_icon> TYPE icon_d.
START-OF-SELECTION.
DATA syinx TYPE i.
SELECT id FROM icon
INTO TABLE it_icon
ORDER BY PRIMARY KEY.
syinx = 0.
LOOP AT it_icon ASSIGNING <fs_icon>.
wa_alv-icon = <fs_icon>.
APPEND wa_alv TO it_alvtab.
ENDLOOP.
PERFORM set_alv_data.
PERFORM show_alv_grid.
END-OF-SELECTION.
*---------------------------------------------------------------------*
* FORM start_alv *
*---------------------------------------------------------------------*
FORM start_alv TABLES p_tab
USING p_repid.
* Call ABAP List Viewer (ALV)
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
* i_callback_program = p_repid
* i_callback_pf_status_set = 'SET_PF_STATUS'
i_save = 'A'
it_excluding = it_excluding
is_layout = is_layout
it_fieldcat = it_fcat
is_variant = is_variant
* i_callback_user_command = 'USER_COMMAND_ALV'
* i_callback_top_of_page = top_of_page
TABLES
t_outtab = p_tab.
ENDFORM. "start_alv
*---------------------------------------------------------------------*
* FORM get_struct *
*---------------------------------------------------------------------*
FORM get_struct USING p_struct.
TYPE-POOLS: sydes.
FIELD-SYMBOLS : <fs_struct> TYPE ANY.
DATA: ltdesc TYPE sydes_desc,
lttinf TYPE sydes_typeinfo,
ltname TYPE sydes_nameinfo,
col_pos TYPE p.
DESCRIBE FIELD p_struct INTO ltdesc.
REFRESH it_fcat.
LOOP AT ltdesc-types INTO lttinf
WHERE back NE 0 AND from EQ 0.
READ TABLE ltdesc-names INTO ltname INDEX lttinf-idx_name.
ADD 1 TO col_pos.
CLEAR ws_fcat.
MOVE col_pos TO ws_fcat-col_pos.
MOVE ltname-name TO ws_fcat-fieldname.
MOVE lttinf-type TO ws_fcat-inttype.
MOVE lttinf-length TO ws_fcat-intlen.
MOVE ws_fcat-fieldname TO ws_fcat-seltext_l.
MOVE ws_fcat-fieldname TO ws_fcat-seltext_m.
MOVE ws_fcat-fieldname TO ws_fcat-seltext_s.
MOVE lttinf-output_length TO ws_fcat-outputlen.
MOVE lttinf-decimals TO ws_fcat-decimals_out.
APPEND ws_fcat TO it_fcat.
ENDLOOP.
ENDFORM. "get_struct
*&---------------------------------------------------------------------*
*& Form show_alv_grid
*&---------------------------------------------------------------------*
FORM show_alv_grid.
PERFORM start_alv TABLES it_alvtab
USING sy-repid.
ENDFORM. " show_alv_grid
*&--------------------------------------------------------------------*
*& Form set_alv_data
*&--------------------------------------------------------------------*
FORM set_alv_data.
prog = sy-repid.
PERFORM get_struct USING it_alvtab.
is_layout-numc_sum = 'X'.
is_layout-detail_titlebar = ' '.
iw_excluding-fcode = '&ABC'.
APPEND iw_excluding TO it_excluding.
iw_excluding-fcode = '&GRAPH'.
APPEND iw_excluding TO it_excluding.
iw_excluding-fcode = '&AQW'.
APPEND iw_excluding TO it_excluding.
ENDFORM. "set_alv_data
das hört sich doch schon mal gut an...KleinerEisbaer hat geschrieben:Bei meiner Recherche bin ich auch auf das Thema 'Ausnahmeikonen' gestoßen, bin mir aber nicht sicher, ob das ein richtiger Anknüpfungspunkt für mich ist.
Code: Alles auswählen.
gs_layout-lights_fieldname = 'LIGHT'.
?lights_tabname type slis_tabname
lights_rollname like dfies-rollname
lights_condense(1) type c
Code: Alles auswählen.
REPORT z_mmstamm_bl.
*** I N C L U D E S ****************************************************
INCLUDE <icon>.
*** T A B E L L E N ****************************************************
TABLES: mara.
*** K O N S T A N T E N ************************************************
*Constantdeclaration for the output
*The fields are seperated with a semicolon
CONSTANTS:
separator(1) VALUE ';'.
*** D A T E N D E K L A R A T I O N ************************************
DATA:
* it_data TYPE TABLE OF mara,
* wa_data LIKE LINE OF it_data.
it_data TYPE TABLE OF zsss_mmstamm_bl,
wa_data TYPE zsss_mmstamm_bl.
DATA:
zaehler TYPE i,
zaehlermaktx TYPE i,
*the string for the output
ausgstr TYPE string,
datum LIKE sy-datum,
zeit LIKE sy-uzeit.
DATA:
ok_code LIKE sy-ucomm,
g_container TYPE scrfname VALUE 'BCALV_GRID_DEMO_0100_CONT1',
grid1 TYPE REF TO cl_gui_alv_grid,
g_repid LIKE sy-repid,
*Define a structure of type LVC_S_LAYO.
gs_layout TYPE lvc_s_layo,
g_custom_container TYPE REF TO cl_gui_custom_container,
*Feldkatalog definieren
gt_field TYPE lvc_t_fcat,
*Workarea definieren
gw_field TYPE lvc_s_fcat.
DATA: light TYPE c.
*The name of the additional field has to be acquainted to ALV
*in 'gs_layout-excp_fname' which is of type lvc_cifnm.
*'g_lights_name' is defined for that purpose:
DATA: g_lights_name TYPE lvc_cifnm VALUE 'LIGHT'.
*** S E L E K T I O N E N **********************************************
*Selectionscreen
SELECTION-SCREEN BEGIN OF BLOCK selection WITH FRAME TITLE text-001.
SELECT-OPTIONS:
s_matnr FOR mara-matnr.
PARAMETER:
p_alv TYPE c RADIOBUTTON GROUP radi,
p_wri TYPE c RADIOBUTTON GROUP radi.
SELECTION-SCREEN END OF BLOCK selection.
START-OF-SELECTION.
**It is possible to execute the report only for the users with the
**authorization for the transaction mm02
* AUTHORITY-CHECK OBJECT 'M_MATE_STA'
* ID 'ACTVT' FIELD '02'
* ID 'STATM' DUMMY.
* IF sy-subrc IS NOT INITIAL.
* MESSAGE text-012 TYPE 'E'.
* ENDIF.
SELECT mar~matnr mak~maktx mar~spart INTO CORRESPONDING FIELDS OF TABLE it_data
FROM mara AS mar INNER JOIN makt AS mak
ON mar~matnr = mak~matnr
WHERE mar~matnr IN s_matnr
AND mak~spras = sy-langu.
* SELECT * FROM mara INTO TABLE it_data
* WHERE matnr IN s_matnr.
IF p_wri = 'X'.
WRITE: / 'List of the materials'.
WRITE: /.
*Point of run time of the report, date and time
WRITE: / 'Date: ', sy-datum, 'Time: ', sy-uzeit.
WRITE: / 'User: ', sy-uname.
WRITE: /.
ENDIF.
IF p_alv = 'X'.
*Set initial dynpro
CALL SCREEN 100.
ELSEIF p_wri = 'X'.
LOOP AT it_data INTO wa_data.
CLEAR ausgstr.
IF wa_data-maktx IS NOT INITIAL.
wa_data-counter = 1.
ELSE.
wa_data-counter = 0.
ENDIF.
*Ausgabe der Daten
PERFORM ausgeben USING wa_data-matnr CHANGING ausgstr.
PERFORM ausgeben USING wa_data-maktx CHANGING ausgstr.
IF wa_data-counter = 1.
PERFORM ausgeben USING wa_data-counter CHANGING ausgstr.
*Hochzählen der verfügbaren Kurztexte
zaehlermaktx = zaehlermaktx + 1.
ELSE.
PERFORM ausgeben USING '' CHANGING ausgstr.
ENDIF.
PERFORM ausgeben USING wa_data-spart CHANGING ausgstr.
WRITE: / ausgstr.
*Hochzählen der Datensätze
zaehler = zaehler + 1.
IF wa_data-spart = 'Z1'.
WRITE icon_red_light AS ICON.
ELSEIF wa_data-spart = 'LF'.
WRITE icon_yellow_light AS ICON.
ELSE.
WRITE icon_green_light AS ICON.
ENDIF.
ENDLOOP.
ENDIF.
CLEAR ausgstr.
IF p_wri = 'X'.
*Ausgabe der Anzahl der mitgelieferten Sätze
WRITE: /.
WRITE: / 'Anzahl der Datensätze mit verfügbare Kurztexte: ', zaehlermaktx.
WRITE: /.
WRITE: / 'Anzahl der Datensätze: ', zaehler.
WRITE: /.
ENDIF.
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& Form ausgeben
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_TEXT text
* <--P_AUSGSTR text
*----------------------------------------------------------------------*
FORM ausgeben USING p_text
CHANGING p_ausgstr.
*Deklaration der Var. ausgabe_temp
DATA: ausgabe_temp(1000) TYPE c.
*Schreiben des Ausgabestrings
WRITE: p_text TO ausgabe_temp LEFT-JUSTIFIED.
*Die Felder nach CONCATENATE werden aneinandergehängt nach p_ausgstr gestellt
CONCATENATE p_ausgstr
ausgabe_temp
separator
INTO p_ausgstr.
ENDFORM. " ausgeben
*----------------------------------------------------------------------*
* MODULE PBO OUTPUT
*----------------------------------------------------------------------*
MODULE pbo OUTPUT.
SET PF-STATUS 'MAIN100'.
SET TITLEBAR 'MAIN100'.
g_repid = sy-repid.
IF g_custom_container IS INITIAL.
*Set a value for field LIGHT for each line of your output table.
*You do not necessarily need to define a field catalog if
*the rest of your output table is represented by a DDIC structure.
CREATE OBJECT g_custom_container
EXPORTING container_name = g_container
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
create_error = 3
lifetime_error = 4
lifetime_dynpro_dynpro_link = 5.
IF sy-subrc NE 0.
*add your handling, for example
CALL FUNCTION 'POPUP_TO_INFORM'
EXPORTING
titel = g_repid
txt2 = sy-subrc
txt1 = 'The control could not be created'(510).
ENDIF.
*create an instance of alv control
CREATE OBJECT grid1
EXPORTING i_parent = g_custom_container.
*..............................................
*set some layout-values (Structure LVC_S_LAYO)
*..............................................
*Set a titlebar for the grid control
gs_layout-grid_title = 'Materials'(100).
*Set field EXCP_FNAME of the structure of type LVC_S_LAYO
*with the name of your additional field.
gs_layout-excp_fname = g_lights_name.
*.............................
* show table on ALV Control
*.............................
*Provide your Layout-Structure when calling
*'set_table_for_first_display' (Parameter IS_LAYOUT).
CALL METHOD grid1->set_table_for_first_display
EXPORTING
* I_BUFFER_ACTIVE =
* I_BYPASSING_BUFFER =
* I_CONSISTENCY_CHECK =
i_structure_name = 'ZSSS_MMSTAMM_BL'
* IS_VARIANT =
* I_SAVE =
* I_DEFAULT = 'X'
is_layout = gs_layout
* IS_PRINT =
* IT_SPECIAL_GROUPS =
* IT_TOOLBAR_EXCLUDING =
* IT_HYPERLINK =
* IT_ALV_GRAPHICS =
* IT_EXCEPT_QINFO =
CHANGING
it_outtab = it_data
* it_outtab = it_data[].
* it_fieldcatalog = gt_field
* IT_SORT =
* IT_FILTER =
* EXCEPTIONS
* INVALID_PARAMETER_COMBINATION = 1
* PROGRAM_ERROR = 2
* TOO_MANY_LINES = 3
* others = 4
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDIF.
CALL METHOD cl_gui_control=>set_focus
EXPORTING
control = grid1.
*Control Framework flushes at the end of PBO automatically!
ENDMODULE. " PBO OUTPUT
*---------------------------------------------------------------------*
* MODULE PAI INPUT *
*---------------------------------------------------------------------*
MODULE pai INPUT.
* to react on oi_custom_events:
CALL METHOD cl_gui_cfw=>dispatch.
CASE ok_code.
WHEN 'EXIT'.
PERFORM exit_program.
WHEN OTHERS.
* do nothing
ENDCASE.
CLEAR ok_code.
ENDMODULE. "PAI INPUT
*---------------------------------------------------------------------*
* FORM EXIT_PROGRAM *
*---------------------------------------------------------------------*
FORM exit_program.
* CALL METHOD G_CUSTOM_CONTAINER->FREE.
* CALL METHOD CL_GUI_CFW=>FLUSH.
LEAVE PROGRAM.
ENDFORM. "EXIT_PROGRAM
Code: Alles auswählen.
...
LS_LAYOUT-EXCP_ROLLN = 'ALV_LIGHT'.
...Code: Alles auswählen.
...
LS_LAYOUT-EXCP_LED = 'X'.
...Code: Alles auswählen.
...
LOOP AT AT_ALV_LINE assigning <AT_ALV_LINE>.
MY_SET_LIGHTS( changing M_ALV_LINE = <AT_ALV_LINE> ).
ENDLOOP.
...