Code: Alles auswählen.
TYPES: BEGIN OF lin_output_alv,
lifnr TYPE ekko-lifnr, " Kontonummer des Lieferanten
ekorg TYPE ekko-ekorg, " Einkaufsorganisation
ebeln TYPE eket-ebeln, " Belegnummer des Einkaufsbelegs
ebelp TYPE eket-ebelp, " Positionsnummer des Einkaufsbelegs
etenr TYPE eket-etenr, " Einteilungszähler
eindt TYPE eket-eindt, " Lieferdatum der Position
bukrs TYPE ekko-bukrs, " Buchungskreis
werks TYPE ekpo-werks, " Einkaufsorganisation
punkte TYPE i, " Bewertungsnote
meldu TYPE qmel-qmnum, " Meldungsnummer
anzahl TYPE i, " Anzahl der Datensätze in Summe
END OF lin_output_alv.
Code: Alles auswählen.
* Tabelle, Workarea und Variablen für ALV
DATA: it_output_alv TYPE STANDARD TABLE OF lin_output_alv,
wa_output_alv TYPE lin_output_alv,
it_fieldcat TYPE slis_t_fieldcat_alv, " Feldkatalog für ALV
wa_layout TYPE slis_layout_alv, " Layout für ALV
wa_variant TYPE disvariant, " Variante für ALV
it_sort TYPE slis_t_sortinfo_alv, " Sort und ZW-Summen: ALV
h_repid TYPE sy-repid.
* Tabelle, Workarea für ALV mit Zellenfärbung
DATA: BEGIN OF it_output_alv_col OCCURS 0.
INCLUDE type lin_output_alv.
DATA: color TYPE slis_t_specialcol_alv, "Table for colors
END OF it_output_alv_col.
DATA: wa_output_alv_col LIKE LINE OF it_output_alv_col.
DATA: wa_color TYPE LINE OF slis_t_specialcol_alv.
DATA: it_color TYPE slis_t_specialcol_alv.
Code: Alles auswählen.
* ALV-Tabelle in 'Tiefe'-ALV-Tabelle übergeben
* Daten mussten zuerst in flache Struc. selectiert werden -> da:
* "SELECT ... INTO TABLE itab"
* mit tiefem Zeilentyp nicht unterstützt.
LOOP AT it_output_alv INTO wa_output_alv.
MOVE-CORRESPONDING wa_output_alv TO wa_output_alv_col.
APPEND wa_output_alv_col TO it_output_alv_col.
ENDLOOP.
* 'Tiefe'-ALV-Tabelle mit Farbwerten befüllen
LOOP AT it_output_alv_col INTO wa_output_alv_col WHERE meldu <> ''.
wa_color-fieldname = 'MELDU'.
wa_color-color-col = '6'.
APPEND wa_color TO it_color.
wa_output_alv_col-color = it_color.
MODIFY it_output_alv_col FROM wa_output_alv_col transporting color.
ENDLOOP.
Code: Alles auswählen.
* ALV-Layout einstellen
wa_layout-no_input = 'X'. " only display fields
wa_layout-colwidth_optimize = 'X'.
wa_layout-zebra = 'X'. " striped pattern
wa_layout-coltab_fieldname = 'COLOR'.
Code: Alles auswählen.
* Typ mit der gewünschten Struktur vereinbaren
TYPES:
BEGIN OF ts_outtab.
INCLUDE STRUCTURE f_z9labpo.
TYPES:
color TYPE lvc_t_scol, "Table for colors
END OF ts_outtab,
* damit kann man den TabTyp z.B. auch in Schnittstellen von Funktionen und Routinen benutzen
tt_outtab TYPE TABLE OF ts_outtab.
DATA:
gt_outtab TYPE tt_outtab, "Tabelle über Tabellentyp
gs_outtab LIKE LINE OF gt_outtab. "Feldleiste
Hier mal mein Test-/Spiel-ALV:Gast hat geschrieben:Aber anscheinend hat echt niemand n komplettes Codestripping wie man durch ne interne Tabelle (wird für das sammeln der Daten benötigt) eine Ausgabetabelle befüllt und die Felder durch abhähngikeiten färbt!
Code: Alles auswählen.
************************************************************************
* *
* Report: Z_ALV_OO *
* *
* Funktion: Beispielprogramm zum OO - ALV *
* *
* *
************************************************************************
REPORT z_alv_oo .
************************************************************************
* DATEN-DEFINITION
************************************************************************
TYPES:
* Type für Datentabelle
BEGIN OF t_data,
matnr TYPE makt-matnr,
maktx TYPE makt-maktx,
spras TYPE makt-spras,
END OF t_data,
* Type für ALV-Ausgabetabelle
BEGIN OF t_alv,
matnr TYPE makt-matnr,
maktx TYPE makt-maktx,
spras TYPE makt-spras,
cellcolor TYPE lvc_t_scol,
END OF t_alv.
DATA:
* Objektrefernzen für den ALV
gr_alv_grid TYPE REF TO cl_gui_alv_grid,
gr_custom_container TYPE REF TO cl_gui_custom_container,
* Variante des ALV-Grids
gw_variant TYPE disvariant,
* Tabelle/Arbeitsbreich für den Feldkatalog des ALV
gt_fieldcatalog TYPE lvc_t_fcat,
gw_fieldcatalog TYPE lvc_s_fcat,
* Tabelle/Arbeitsbereich für die Sortiereigenschaften des ALV
gt_sort TYPE lvc_t_sort,
gw_sort TYPE lvc_s_sort,
* Tabelle/Arbeitsbereich für die Filtereigenschaften des ALV
gt_filter TYPE lvc_t_filt,
gw_filter TYPE lvc_s_filt,
* Arbeitsbereich für Layoutangaben des ALV
gw_layout TYPE lvc_s_layo,
* Tabelle/Arbeitsbereich für ausgeblendete Funktionscaodes
gt_toolbar_excluding TYPE ui_functions,
gw_toolbar_excluding TYPE ui_func,
* Tabelle/Arbeitsbereich für ALV-Ausgabe-Tabelle
gt_alv TYPE TABLE OF t_alv,
gw_alv TYPE t_alv,
* Tabelle/Arbeitsbereich für Daten
gt_data TYPE TABLE OF t_data,
gw_data TYPE t_data,
* Hilfsfelder
g_rc,
ok_code TYPE sy-ucomm,
* Ende der Daten
end_of_data.
************************************************************************
* INITIALIZATION *
************************************************************************
INITIALIZATION.
*** F4-Hilfe für Variante vorbereiten
gw_variant-report = sy-repid.
gw_variant-username = sy-uname.
************************************************************************
* SELECTION SCREEN *
************************************************************************
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECT-OPTIONS: s_matnr FOR gw_data-matnr
DEFAULT '4700' TO '4800'.
PARAMETERS: p_vari TYPE slis_vari
DEFAULT '/DEFAULT'.
SELECTION-SCREEN END OF BLOCK b1.
************************************************************************
* AT SELECTION-SCREEN *
************************************************************************
AT SELECTION-SCREEN.
* Werthilfe für Variante
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_vari.
CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
EXPORTING
i_save = 'A'
is_variant = gw_variant
i_display_via_grid = 'X'
IMPORTING
e_exit = g_rc
es_variant = gw_variant
EXCEPTIONS
not_found = 1
program_error = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
IF g_rc NE 'X'.
p_vari = gw_variant-variant.
ENDIF.
************************************************************************
* START-OF-SELECTION *
************************************************************************
START-OF-SELECTION.
* Daten beschaffen
SELECT matnr maktx spras
INTO TABLE gt_data
FROM makt
WHERE matnr IN s_matnr.
* Daten übernehemen
LOOP AT gt_data INTO gw_data.
MOVE-CORRESPONDING gw_data TO gw_alv.
APPEND gw_alv TO gt_alv.
ENDLOOP.
************************************************************************
* END-OF-SELECTION *
************************************************************************
END-OF-SELECTION.
CALL SCREEN 100.
************************************************************************
* FORMS *
************************************************************************
*---------------------------------------------------------------------*
* Form variant_check
*---------------------------------------------------------------------*
FORM variant_check.
CLEAR: gw_variant.
gw_variant-report = sy-repid.
gw_variant-username = sy-uname.
gw_variant-variant = p_vari.
CALL FUNCTION 'REUSE_ALV_VARIANT_EXISTENCE'
EXPORTING
i_save = 'A'
CHANGING
cs_variant = gw_variant
EXCEPTIONS
wrong_input = 1
not_found = 2
program_error = 3
OTHERS = 4.
IF sy-subrc <> 0.
CLEAR: gw_variant.
* Um ein neues Varinate speichern zu können muss die repid mit gegeben
* sonst erscheint die Schaltfläche nicht.
gw_variant-report = sy-repid.
ENDIF.
ENDFORM. " variant_check
*---------------------------------------------------------------------*
* Form creat_fieldcat
*---------------------------------------------------------------------*
FORM creat_fieldcat.
CLEAR gw_fieldcatalog.
gw_fieldcatalog-fieldname = 'MATNR'.
gw_fieldcatalog-ref_field = 'MATNR'.
gw_fieldcatalog-ref_table = 'MAKT'.
APPEND gw_fieldcatalog TO gt_fieldcatalog.
CLEAR gw_fieldcatalog.
gw_fieldcatalog-fieldname = 'MAKTX'.
gw_fieldcatalog-ref_field = 'MAKTX'.
gw_fieldcatalog-ref_table = 'MAKT'.
APPEND gw_fieldcatalog TO gt_fieldcatalog.
CLEAR gw_fieldcatalog.
gw_fieldcatalog-fieldname = 'SPRAS'.
gw_fieldcatalog-dd_outlen = '2'.
gw_fieldcatalog-intlen = '2'.
gw_fieldcatalog-inttype = 'C'.
gw_fieldcatalog-coltext = 'Sprache'.
gw_fieldcatalog-tooltip = 'Sprache'.
gw_fieldcatalog-seltext = 'Sprache'.
APPEND gw_fieldcatalog TO gt_fieldcatalog.
ENDFORM. " creat_fieldcat
*---------------------------------------------------------------------*
* Form creat_sortinfo
*---------------------------------------------------------------------*
FORM creat_sortinfo.
CLEAR gw_sort.
ENDFORM. " creat_sortinfo
*---------------------------------------------------------------------*
* Form creat_layout
*---------------------------------------------------------------------*
FORM creat_layout.
CLEAR gw_layout.
* Grid Title setzen
gw_layout-grid_title = 'Das ist ein OO-ALV '.
* Optimale Splatenbreite
gw_layout-cwidth_opt = 'X'.
* Selektionsmodus
gw_layout-sel_mode = 'A'.
* Farbinfo
gw_layout-ctab_fname = 'CELLCOLOR' .
ENDFORM. " creat_layout
*---------------------------------------------------------------------*
* Form creat_filter
*---------------------------------------------------------------------*
FORM creat_filter.
CLEAR gw_filter.
ENDFORM. " creat_filter
*---------------------------------------------------------------------*
* Form creat_toolbar_excluding
*---------------------------------------------------------------------*
FORM creat_toolbar_excluding.
* Alle ausblendbaren Funktionscodes sind in der Klasse CL_GUI_ALV_GRID
* als Attribute des Types UI_FUNC definiert und beginnen mit MC_FC_
CLEAR gw_toolbar_excluding.
gw_toolbar_excluding = gr_alv_grid->mc_fc_print.
APPEND gw_toolbar_excluding TO gt_toolbar_excluding.
ENDFORM. " creat_toolbar_excluding
*---------------------------------------------------------------------*
* FORM coloring_invidual_cell *
*---------------------------------------------------------------------*
* einzelne Zellen einfärben *
*---------------------------------------------------------------------*
FORM coloring_invidual_cell.
DATA: l_rest TYPE i,
lw_cellcolor TYPE lvc_s_scol .
* Die Zellen MAKT und SPRAS werden abwechelnd eingefärbt.
LOOP AT gt_alv INTO gw_alv.
COMPUTE: l_rest = sy-tabix MOD 2.
CASE l_rest.
WHEN 0.
* Farbinformation für Zelle aufbauen
CLEAR lw_cellcolor.
lw_cellcolor-fname = 'SPRAS' .
lw_cellcolor-color-col = '5' .
lw_cellcolor-color-int = '1' .
lw_cellcolor-nokeycol = 'X'.
WHEN OTHERS.
CLEAR lw_cellcolor.
lw_cellcolor-fname = 'MAKTX' .
lw_cellcolor-color-col = '6' .
lw_cellcolor-color-int = '0' .
lw_cellcolor-nokeycol = 'X'.
ENDCASE.
* Farbinformation in ALV Tabelle bringen
* Zu erst in ALV-Arbeitsbereich die Zeile an die Tabelle anhängen
APPEND lw_cellcolor TO gw_alv-cellcolor.
* Dann die geänderte ALV-Arbeitsbereich an die ALV-Tabelle anhängen
MODIFY gt_alv FROM gw_alv.
ENDLOOP.
ENDFORM.
************************************************************************
* MODULE *
************************************************************************
*---------------------------------------------------------------------*
* Module initialise_alv_grid OUTPUT
*---------------------------------------------------------------------*
* Beim ersten Aufruf:
* Referenz auf CustomerContainer erzeugen
* Referenz auf ALVGrid erzeugen
*----------------------------------------------------------------------*
MODULE initialise_alv_grid OUTPUT.
* Wenn noch keine Referenzen erzeugt wurden
IF gr_custom_container IS INITIAL.
* Referenz auf CustomerContainer erzeugen
CREATE OBJECT gr_custom_container
EXPORTING container_name = 'CUSTOMERCONTAINER'.
* Referenz auf ALV-Grid erzeugen
CREATE OBJECT gr_alv_grid
EXPORTING i_parent = gr_custom_container.
* Zellen einfärben
PERFORM coloring_invidual_cell.
* Feldkatalog erstellen
PERFORM creat_fieldcat.
* Variante prüfen
PERFORM variant_check.
* Sortiereigenschaften festlegen
PERFORM creat_sortinfo.
* Layout festlegen
PERFORM creat_layout.
* Filter festlegen
PERFORM creat_filter.
* Funktionscodes ausblenden
PERFORM creat_toolbar_excluding.
* ALV-Grid aufbauen
CALL METHOD gr_alv_grid->set_table_for_first_display
EXPORTING
is_variant = gw_variant
i_save = 'A'
i_default = 'X'
is_layout = gw_layout
it_toolbar_excluding = gt_toolbar_excluding
CHANGING
it_outtab = gt_alv
it_fieldcatalog = gt_fieldcatalog
it_sort = gt_sort
it_filter = gt_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.
ENDMODULE. " initialise_alv_grid OUTPUT
*---------------------------------------------------------------------*
* Module status OUTPUT
*---------------------------------------------------------------------*
MODULE status OUTPUT.
SET PF-STATUS 'MAIN'.
ENDMODULE. " status OUTPUT
*---------------------------------------------------------------------*
* Module USER_COMMAND INPUT
*---------------------------------------------------------------------*
MODULE user_command INPUT.
CASE ok_code.
WHEN 'BACK'.
LEAVE TO SCREEN 0.
WHEN 'ABORT'.
LEAVE TO SCREEN 0.
WHEN 'CANCEL'.
LEAVE TO SCREEN 0.
ENDCASE.
ENDMODULE. " USER_COMMAND INPUT
************************************************************************
* END OF SCOURCE *
***********************************************************************