ALV mit Ampel

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
10 Beiträge • Seite 1 von 1
10 Beiträge Seite 1 von 1

ALV mit Ampel

Beitrag von KleinerEisbaer (Specialist / 123 / 3 / 0 ) »
Hallo,

ich möchte in einem ALV-Grid eine Spalte einbauen, welche ein Ampel-Icon enthält. Dieses soll unter bestimmten Bedingungen grün bzw. rot sein.

Ich habe schon nach diesem Thema gesucht, aber noch nicht so den richtigen Weg gefunden. 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.

Mein ALV-Grid habe ich mit dem FuBau REUSE_ALV_GRID_DISPLAY unter Verwendung des Layouttypen slis_layout_alv erstellt.

Kann mir da jemand einen Tip geben, in welche Richtung das bei mir gehen könnte? Hat jemand mit der Ampelanzeige (oder ähnlichen Ikonen) im ALV-Grid gearbeitet?
Nimm die Menschen wie sie sind, es gibt keine anderen.

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Beitrag von edwin (Specialist / 306 / 12 / 68 ) »
Hi,
ist eigentlich ganz einfach:

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
Gruss Edwin

Re: ALV mit Ampel

Beitrag von ewx (Top Expert / 4918 / 332 / 655 ) »
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.
das hört sich doch schon mal gut an...
Report BCALV_GRID_04

Beitrag von KleinerEisbaer (Specialist / 123 / 3 / 0 ) »
Hallo,

danke schon mal für die prima Infos!!

Da mein FuBau REUSE_ALV_GRID_DISPLAY nur Layouts vom Typ slis_layout_alv versteht (also mit dem lvc_s_layo nicht klarkommt) habe ich es nun so gemacht:

Code: Alles auswählen.

gs_layout-lights_fieldname = 'LIGHT'.
Ich erhalte nun automatisch eine Exception-Spalte mit einem grauen Ampelkorpus, der Felder für 3 Farben bereitstellt.

Meine nächste Aufgabe wird also sein, der Ampel 'Licht' zu geben.

Vorher wollte ich aber noch fragen, ob ich auch durch Parameterübergabe eine Ampel mit nur 2 Farbflächen erzeugen kann? Ich habe dokumentationsmäßig bisher wenig gefunden zum Thema. Was kann ich noch für Werte anstelle von 'LIGHT' dem lights_fieldname-Parameter übergeben?
Und wofür sind eigentlich diese Parameter gut, die es noch im slis_layout_alv-typisierten Layout gibt:
lights_tabname type slis_tabname
lights_rollname like dfies-rollname
lights_condense(1) type c
?
Nimm die Menschen wie sie sind, es gibt keine anderen.

Beitrag von KleinerEisbaer (Specialist / 123 / 3 / 0 ) »
Hallo Edwin,

habe mir Dein Programm jetzt noch mal genauer angeschaut und gesehen, dass es ja im Prinzip meine Fragen aus meinem Posting hier drüber beantworten sollte... :oops:

Ich versteh' zwar noch nicht alles ganz, aber ich bleib' dran.

Danke!
Nimm die Menschen wie sie sind, es gibt keine anderen.

Wie bringe ich die Ampel zum "leuchten"?

Beitrag von BabsiCSC (ForumUser / 86 / 0 / 0 ) »
Hallo,

1) Danke, die bisherigen Antworten waren zum Thema ALV mit Ampel schon eine gute Hilfe...

2) Ich habe mein ALV mit einem Dynpro angelegt und möchte auch eine Ampel einbauen.
Nun habe ich das bis jetzt so gemacht, dass ich eine eigene zusätzliche Spalte dafür angelegt habe. (siehe screenshot)

Die Frage lautet nun: Wie bringe ich meine Ampel zum "leuchten" ?

So dass sie , die dementsprechenden Bedingungen muss ich noch mit einem if einbauen, entweder rot, gelb oder grün "aufleuchtet" ?

Mit der Bitte um Hilfe!
Danke!!
lg

- hab' ich was vergessen?
Mein bisheriger Code sieht so aus ... - ->

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

Beitrag von uh (Specialist / 158 / 0 / 1 ) »
Hi,

es sollten den Werte 3, 2, 1 sein.

Beitrag von babap (Expert / 681 / 1 / 1 ) »
Hallo,

Beim OO-Grid benötigt man ein Characterfeld der Länge 1 in der ALV-Struktur (hier ALV_LIGHT).

Dann muß man ein paar Felder in der Layout-Struktur füllen:

Das Ampelfeld macht man bekannt, es muß später die Werte 1, 2 oder 3 enthalten. (Ich weiß aber gerade nicht, ob 1 oder 3 Rot ist).

Code: Alles auswählen.

...
  LS_LAYOUT-EXCP_ROLLN = 'ALV_LIGHT'.
...
EXCP_LED schaltet von 3-Licht auf eine "1-Licht-Anzeige" (2 geht wohl nicht).

Code: Alles auswählen.

...
  LS_LAYOUT-EXCP_LED   = 'X'.
...
Dann lasse ich eine Unterroutine entscheiden, ob Rot oder Grün angezeigt werden soll. (Dort werden das Feld ALV_LIGHT und andere Statusfelder und Ikonen gefüllt.)

Code: Alles auswählen.

...
LOOP AT AT_ALV_LINE assigning <AT_ALV_LINE>.
    MY_SET_LIGHTS( changing M_ALV_LINE = <AT_ALV_LINE> ).
ENDLOOP.
...
Jetzt nur noch die fertig aufgepeppte Tabelle anzeigen lassen ...

Gruß
babap
P.S.Habe ich aus der SAP-Dokumentation ...

Re: ALV mit Ampel

Beitrag von Knirpsi (ForumUser / 17 / 0 / 0 ) »
Hallo,

bei mir kommt immer die Fehlermeldung "Das Datenobjekt "LV_IS_LAYOUT" besitzt keine Komponente mit Namen "EXCP_ROLLN".".
Was mache ich falsch?

Re: ALV mit Ampel

Beitrag von Knirpsi (ForumUser / 17 / 0 / 0 ) »
Hat sich erledigt :)

Seite 1 von 1

Vergleichbare Themen

4
Antw.
5246
Views
Ampel in Selektionsdypro einbinden
von axxter » 19.01.2007 10:04 • Verfasst in Dialogprogrammierung
7
Antw.
25246
Views
ALV Grid zusätzliche Spalte für Ampel
von Adri:an » 13.11.2012 10:21 • Verfasst in ABAP® für Anfänger

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.