Eine bestimmte Zelle in einem ALV Grid eingabebereit machen

Die Objektorientierung mit ABAP®: Vererbung, Dynamische Programmierung, GUI Controls (u.a. ALV im OO).
5 Beiträge • Seite 1 von 1
5 Beiträge Seite 1 von 1

Eine bestimmte Zelle in einem ALV Grid eingabebereit machen

Beitrag von bechi (ForumUser / 22 / 0 / 1 ) »
Hallo Forummitglieder,

ich sthe vor dem Problem, dass ich eine bestimmte Zelle im ALV Grid (Instanz der Klasse CL_GUI_ALV_GRID) eingabebereit machen möchte.

Ich habe dazu in der SAP Library einen Beitrag zum Erstellen von Push-Buttons pro Zeile oder Zelle gelesen. Den habe ich auf mein Problem umgeschrieben, aber es klappt nicht. Er akzeptiert meine interne Datentabelle nicht.

Hier mal meine Schritte im Coding:

Code: Alles auswählen.

* erstellen einer internen tabelle mit Datenstruktur & Style-Tabelle
DATA: BEGIN OF gt_pricing_cond_alv OCCURS 0.
        INCLUDE STRUCTURE  /bshs/ci_s_conditions.
DATA: input_style        TYPE lvc_t_styl.
DATA: END OF gt_pricing_cond_alv.

data: gt_pricing_cond     type standard table of /bshs/ci_s_conditions.

* layout struktur
lwa_layout             TYPE lvc_s_layo

...


* interne Tabelle mit daten füllen
LOOP AT gt_pricing_cond INTO lwa_pricing_cond.
    
    MOVE-CORRESPONDING lwa_pricing_cond TO lwa_pricing_cond_alv.

    IF lwa_pricing_cond-kmanu <> 'D'.
      lwa_input_style-fieldname = 'KBETR'.
      lwa_input_style-style = alv_grid_3->mc_style_enabled.
      APPEND lwa_input_style TO lwa_pricing_cond_alv-input_style.
    ENDIF.

    APPEND lwa_pricing_cond_alv TO gt_pricing_cond_alv.
  ENDLOOP.

* parameter setzen & alv grid aufrufen
lwa_layout-stylefname = 'INPUT_STYLE'.

  CALL METHOD alv_grid_3->set_table_for_first_display
    EXPORTING
      i_structure_name = '/BSHS/CI_S_CONDITIONS'
      is_variant       = gs_variant
      is_layout        = lwa_layout
      i_save           = g_save
    CHANGING
      it_outtab        = gt_pricing_cond_alv.

Vieleicht hat ja jemand eine Idee bzw. stand schon vor dem selben Problem. Hier nochmal der Text der Hilfe (englisch). Vielleicht habe ich etwas übersehen: Displaying Cells as Pushbuttons

Purpose

If you assign the style mc_style_button to cells, rows or columns, the ALV Grid Control displays the associated cells as pushbuttons. Users know immediately that they can obtain further information about the cell by clicking on the pushbutton. The ALV Grid Control then triggers the event button_click.

Process Flow



To display all cells of a column as pushbuttons, you use the field STYLE of the field catalog.

To display rows or individual cells as pushbuttons, proceed as follows:

1. Define the layout structure of type LVC_S_LAYO .

2. Add a row table of type LVC_T_STYL to your output, table, as shown in the following example:
DATA: BEGIN OF GT_OUTTAB OCCURS 0.
INCLUDE STRUCTURE <DDIC structure> .

DATA: CT TYPE LVC_T_STYL. "Table buttons

DATA: END OF GT_OUTTAB.

3. Select your data and copy it into the output table.

4. Read one output table row at a time in a loop. One row of the row table has the fields FIELDNAME and STYLE . Assign values to these fields as follows:
If you want to display all cells of a row as pushbuttons, assign the attribute cl_gui_alv_grid=>mc_style_button to the field style . In this case, field fieldname remains empty.
If you want to display only specific columns of the row as pushbuttons, append one row for each column to the cell table. Assign the name of the desired column to the field fieldname , and assign the attribute cl_gui_alv_grid=>mc_style_button to the field style .

5. Assign the name of the internal table to the field stylefname of the layout structure (in our case 'CT', see step 2).

6. Pass the layout structure and the output table using method set_table_for_first_display.


Result

The ALV Grid Control displays all cells to which the attribute has been assigned as pushbuttons.

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


Beitrag von Kowi (ForumUser / 28 / 0 / 0 ) »
Hallo bechi,

hast du nach "set_table_for_first_display" die Methode SET_READY_FOR_INPUT aufgerufen?

Gruß,
Kowi

Beitrag von RiffRaff (Specialist / 379 / 0 / 1 ) »
Hallo,

ist zwar mit dem REUSE ALV gemacht, aber vieleicht ist es ein Ansatz. Beim Reuse muß man alles eingabebereit setzen und dann die Felder die man NICHT eingabebereit haben will sperren ( wa_style-style = cl_gui_alv_grid=>mc_style_disabled ).

mfg
Richard

Beitrag von bechi (ForumUser / 22 / 0 / 1 ) »
Hallo Leute,

danke für eure Antworten :D . Ich habe es schon mit der Methode SET_READY_FOR_INPUT versucht. Bis auf das, dass ich mehr Funktionen in der Toolbar habe, ist nichts passiert.

Mein Problem ist es aber, dass ich die nicht mehr flache Struktur GT_PRICING_COND_ALV der Methode SET_TABLE_FOR_FIRST_DISPLAY übergeben kann, da hier der Syntax Check was dagegen hat. Aber lt. SAP sollte es so funktionieren (siehe Text der Hilfe) :?: .

Vielleicht hat jemand schon dieses Problem gelöst.

Gruß
bechi

Lösung gefunden

Beitrag von bechi (ForumUser / 22 / 0 / 1 ) »
Hallo Forummitglieder,

ich habe die Lösung mit Hilfe eines Kollegen gefunden:
  • - Die Datendeklaration war soweit ok.
    - Es fehlte aber bei der Layoutstruktur ein kleiner Parameter:

    Code: Alles auswählen.

     lwa_layout-edit = 'X'.
    
    - die Datentabelle für die Methode SET_TABLE_FOR_FIRST_DISPLAY muss mit '[]' enden (siehe Coding unten)
    - es müssen in der Tabelle INPUT_STYLE alle Felder der Datentabellestruktur beschrieben werden (siehe Betrag von RiffRaff)
    - desweitern muss nach der Methode SET_TABLE_FOR_FIRST_DISPLAY, wie von Kowi richtig bemerkt, die Methode SET_READY_FOR_INPUT aufgerufen werden.
Hier nochmals das Coding komplett& richtig:

Code: Alles auswählen.

* Datendeklaration
DATA: BEGIN OF gt_outtab_alv OCCURS 0.
        INCLUDE STRUCTURE <DDIC-Struktur>.
DATA:   input_style       TYPE lvc_t_styl.
DATA: END OF gt_outtab_alv.

DATA: lwa_input_style       TYPE lvc_s_styl
     ,lwa_layout            TYPE lvc_s_layo
     ,lwa_fieldinfo         TYPE DFIES
     . 

* Erstellen der internen Tabelle GT_OUTTAB_ALV
PERFORM CREATE_OUTTAB.

* Vorbereiten der relevanten Strukturen fürs ALV-Grid
lwa_layout-stylefname = 'INPUT_STYLE'.
lwa_layout-edit       = 'X'.   " wichtiges Flag

* Aufruf Methode SET_TABLE_FIRST_DISPLAY & SET_READY_FOR_INPUT

CALL METHOD alv_grid_3->set_table_for_first_display
    EXPORTING
      i_structure_name = '<DDIC-Struktur>'
      is_variant       = gs_variant
      is_layout        = lwa_layout
      i_save           = g_save
    CHANGING
      it_outtab        = gt_outtab_alv[].

  CALL METHOD alv_grid_3->set_ready_for_input
    EXPORTING
      i_ready_for_input = 1.


* Form CREATE_OUTTAB
FORM create_outtab

 DATA: lv_index      TYPE c,
        lt_cellstyle  TYPE lvc_t_styl.

  LOOP AT gt_outtab INTO lwa_outtab.
    MOVE-CORRESPONDING lwa_outtab TO lwa_outtab_alv.
    APPEND  lwa_outtab_alv TO gt_outtab_alv.
  ENDLOOP.

  LOOP AT gt_outtab_alv INTO lwa_outtab_alv.
    lv_index = sy-tabix.

* IF-Bedingung nur Beispiel
    IF lwa_outtab_alv-kmanu <> 'D'.
      PERFORM set_input_alv_grid USING 'RW'
                                   CHANGING lt_cellstyle.
    ELSE.
      PERFORM set_input_alv_grid USING 'RO'
                                    CHANGING lt_cellstyle.
    ENDIF.

    INSERT LINES OF lt_cellstyle INTO TABLE
        lwa_outtab_alv-input_style.
    MODIFY gt_outtab_alv FROM lwa_outtab_alv INDEX lv_index.
    CLEAR lt_cellstyle.
  ENDLOOP.
ENDFORM.



* Form INPUT_ALV_GRID
FORM set_input_alv_grid_3 USING value(pa_mode)
                          CHANGING pt_celltab TYPE lvc_t_styl.

  DATA: lwa_celltab TYPE lvc_s_styl,
        lv_mode TYPE raw4.

  IF pa_mode = 'RW'.
    lv_mode = cl_gui_alv_grid=>mc_style_enabled.
  ELSE.
    lv_mode = cl_gui_alv_grid=>mc_style_disabled.
  ENDIF.

* flexibler als hart codieren (Änderungen Struktur usw.)
  IF gt_fieldinfo IS INITIAL.
    CALL FUNCTION 'DDIF_FIELDINFO_GET'
      EXPORTING
        tabname   = '<DDIC-Struktur>'
      TABLES
        dfies_tab = gt_fieldinfo.
  ENDIF.

  LOOP AT gt_fieldinfo INTO lwa_fieldinfo.

*IF-Bedingung nur Beispiel für ein eingabebereites Feld
    IF lwa_fieldinfo-fieldname = 'KBETR'.
      lwa_input_style-fieldname = lwa_fieldinfo-fieldname.
      lwa_input_style-style = lv_mode.
    ELSE.
      lwa_input_style-fieldname = lwa_fieldinfo-fieldname.
      lwa_input_style-style = cl_gui_alv_grid=>mc_style_disabled.
    ENDIF.
    INSERT lwa_input_style INTO TABLE pt_celltab.
  ENDLOOP.

ENDFORM.      

Weitere Beispiele zur Editierbarkeit von ALV-Grids bieten die Reports:
  • BCALV_EDIT_01
    BCALV_EDIT_02
    BCALV_EDIT_03
    BCALV_EDIT_04
    BCALV_GRID_EDIT
Ich hoffe, ich kann mit diesen Beitrag einigen bei Ihren Problemen weiterhelfen.

Gruß aus München

Bechi

Folgende Benutzer bedankten sich beim Autor bechi für den Beitrag:
warup


Seite 1 von 1

Vergleichbare Themen

11
Antw.
14037
Views
ALV-GRID: Zeilenweise eingabebereit
von vwaadenm » 15.05.2007 10:22 • Verfasst in ABAP® Core
1
Antw.
1529
Views
ALV-Grid eingabebereit und Problem mit der Entertaste
von Gast » 06.11.2005 10:26 • Verfasst in ABAP Objects®
-1
Antw.
7
Views
ALV Grid nach Refresh nicht mehr eingabebereit
von Dorough » 15.11.2024 10:44 • Verfasst in Dialogprogrammierung
15
Antw.
11833
Views
F4 in ALV Grid Zelle
von the-FoX » 12.01.2005 11:24 • Verfasst in ABAP Objects®
4
Antw.
3423
Views
ZELLE IM ALV GRID
von XGER » 17.05.2005 08:32 • Verfasst in ABAP® Core

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Aktuelle Forenbeiträge

Regex in where
vor einer Stunde von edwin 7 / 160
Daten an Tabelle binden
vor 14 Stunden von Bright4.5 3 / 1485

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.

Aktuelle Forenbeiträge

Regex in where
vor einer Stunde von edwin 7 / 160
Daten an Tabelle binden
vor 14 Stunden von Bright4.5 3 / 1485

Unbeantwortete Forenbeiträge

aRFC im OO-Kontext
vor 5 Wochen von ralf.wenzel 1 / 3261
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9821