ALV Grid: Problem mit "Cellstyle" und "F4-Hilfe"

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
17 Beiträge • Seite 1 von 2 (current) Nächste
17 Beiträge Seite 1 von 2 (current) Nächste

ALV Grid: Problem mit "Cellstyle" und "F4-Hilfe"

Beitrag von Steffen (ForumUser / 28 / 1 / 0 ) »
Hallo zusammen,

ich habe aktuell ein Problem mit dem "Cellstyle" in Verbindung mit der F4-Hilfe innerhalb des ALV Grid.

Problembeschreibung:

Eine Spalte der Ausgabetabelle ist im Feldkatalog auf "Editierbar" gestellt. Wird an diesem Feld eine Änderung vorgenommen, wird das Event "HANDLE_DATA_CHANGED" ausgelöst, welches ein zweites Feld auf "Editierbar" setzt. Dies wird durch setzen der "Cellstyle"-Informationen erreicht. Das Problem ist nun, dass die Werte des zweiten Feldes über die F4-Hilfe nicht auswählbar sind, obwohl das Feld "Editierbar" ist. In den Screenshots sind die relevanten Stellen abgebildet.

Informationen:

Verwendete Klasse: cl_gui_alv_grid
Setzen der Style-Informationen: Event: "handle_data_changed"
Style: cl_gui_alv_grid=>mc_style_enabled

Hat jemand eine Idee, wie das Problem behoben werden könnte? Vielen Dank im Voraus für Eure Unterstützung.

Beste Grüße
Steffen

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


Re: ALV Grid: Problem mit "Cellstyle" und "F4-Hilfe"

Beitrag von Legxis (Specialist / 160 / 90 / 28 ) »
Wie erstellst du denn deinen fieldcat, automatisch mit FuBa oder manuell?
Wie sieht deine Tabellendeklaration aus, hast du da den DATA: cellstyle TYPE lvc_t_styl. drin?
Statt mc_style_enabled könntest du auch mal im fieldcat edit = 'X' probieren.

Du könntest dir auch die BCALV_EDIT* Demoprogramme anschauen, insbesondere 02, 03, 08 (manuell) und 09.
( SAP ECC 6.0, NetWeaver 7.0, ohne unicode, ohne support/enhancement packages )

Re: ALV Grid: Problem mit "Cellstyle" und "F4-Hilfe"

Beitrag von a-dead-trousers (Top Expert / 4276 / 213 / 1140 ) »
Mach es umgekehrt:
Die Spalte im Feldkatalog auf "Eingabebereit" und "mit F4-Hilfe" setzen.
Über den CELLSTYLE auf "nicht eingabebereit" und "ohne F4-Hilfe" (MC_STYLE_F4_NO) ändern.
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: ALV Grid: Problem mit "Cellstyle" und "F4-Hilfe"

Beitrag von Steffen (ForumUser / 28 / 1 / 0 ) »
Hallo zusammen,

vielen Dank für Eure Rückmeldung. Ich habe nun die Anmerkung von "a-dead-trousers" versucht umzusetzen.

Folgender Ablauf:

1. Im Feldkatalog wird das Flag "Edit=X" gesetzt
2. Das "Edit"-Flag wird bei der Aktion "Insert_New_Row" wieder deaktiviert über den "Cellstyle"
3. Bei Änderung des ersten Feldes, wird die "Editierbarkeit" des zweiten Feldes über den "Cellstyle" gesetzt
Siehe hierzu auch Screenshots.

Fazit: Das Problem besteht leider weiterhin, dass die Werte aus der F4-Hilfe nicht ausgewählt werden können.

Beste Grüße
Steffen

Re: ALV Grid: Problem mit "Cellstyle" und "F4-Hilfe"

Beitrag von Steffen (ForumUser / 28 / 1 / 0 ) »
Hallo zusammen,

hier noch Auszüge aus dem Debugger.

Bester Grüße
Steffen

Re: ALV Grid: Problem mit "Cellstyle" und "F4-Hilfe"

Beitrag von a-dead-trousers (Top Expert / 4276 / 213 / 1140 ) »
Ok, die F4 Hilfe funktioniert nicht, aber ist das Feld dann nach deinen Änderungen "eingabebereit" oder nicht? Das sieht man in den Screenshots leider nicht so gut.
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: ALV Grid: Problem mit "Cellstyle" und "F4-Hilfe"

Beitrag von Steffen (ForumUser / 28 / 1 / 0 ) »
Hallo,

also "eingabebereit" des Feldes hat die ganze Zeit schon funktioniert, aber die F4-Hilfe kann nicht ausgewählt werden.
Sorry, wenn ich das nicht verdeutlichen konnte.

Beste Grüße

Re: ALV Grid: Problem mit "Cellstyle" und "F4-Hilfe"

Beitrag von a-dead-trousers (Top Expert / 4276 / 213 / 1140 ) »
Ne, ist mir schon klar. Ich wollte nur sichergehen, dass die Zelle auch wirklich den richtigen "Zustand" hat.
So und jetzt die schlechte Nachricht:
Ich vermute, dass das ALV-Grid, da es eigentlich nicht als "editierbar" vorgesehen war, die Standard F4-Hilfe ohne Berücksichtigung eines Styles oder der Spalten-Einstellung immer im Modus "Display" ausführt.
Debugge mal den F4-Hilfe Dialog und schau die Aufrufstelle aus dem ALV-Grid heraus näher an. Ich vermute, dass da der Wert von "Display" hardcoded auf 'X' gesetzt wird.
Aber keine Panik: Du kannst für das ALV-Grid auch einen eigenen Event-Handler schreiben der die Verarbeitung der F4-Hilfe übernimmt und diese dort dann mit "Display" ungleich 'X' aufrufen.

lg ADT
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: ALV Grid: Problem mit "Cellstyle" und "F4-Hilfe"

Beitrag von Steffen (ForumUser / 28 / 1 / 0 ) »
Ich bin gerade auf der Suche nach der konkreten Stelle. Kannst Du mir evtl. sagen, an welcher Stelle ich prüfen sollen/könnte?

Beste Grüße

Re: ALV Grid: Problem mit "Cellstyle" und "F4-Hilfe"

Beitrag von Legxis (Specialist / 160 / 90 / 28 ) »
Das geht definitiv, ich habe es schon mal gemacht, ich verweise nochmal auf die BCALC_EDIT Demos. Aber du könntest aus dem Feld doch auch einen Dropdown machen, da kann man die Werte auch auswählen. Wäre vielleicht sogar schöner.
( SAP ECC 6.0, NetWeaver 7.0, ohne unicode, ohne support/enhancement packages )

Re: ALV Grid: Problem mit "Cellstyle" und "F4-Hilfe"

Beitrag von Steffen (ForumUser / 28 / 1 / 0 ) »
Ich hatte mir die BCALV_EDIT Demos bereits im Vorfeld angeschaut und konnte leider nichts passendes finden.
Mein letzter Ausweg war jetzt ein Forumsbeitrag :)

Re: ALV Grid: Problem mit "Cellstyle" und "F4-Hilfe"

Beitrag von Legxis (Specialist / 160 / 90 / 28 ) »
So funktioniert das bei mir:

Um das auszuführen musst du einen Dynpro 0100 mit einem Custom Container CONT1_0100 und dem OK_CODE erstellen. Und den GUI Status von irgendeinem anderem Programm rüberkopieren und STAT_0100 benennen.

Code: Alles auswählen.

*        ------------------------------------------------------------------
*       |                                                                  |
*       |                  Report Y_CL_GUI_ALV_GRID                        |
*       |                                                                  |
*       |------------------------------------------------------------------
*       |                                                                  |
*       |   Dieses Programm ist eine DEMO für CL_GUI_ALV_GRID Benutzung.   |
*       |                                                                  |
*       |------------------------------------------------------------------
*       |   Anforderer: XXX                                                |
*       |------------------------------------------------------------------
*       |   Programmierer, Datum - Änderungen Datum                        |
*        ------------------------------------------------------------------

REPORT y_cl_gui_alv_grid.

TABLES: makt.

*------------------------*
*     Deklarationen      *
*------------------------*

TYPES: BEGIN OF ty_auswertung,

  matnr TYPE makt-matnr,
  spras TYPE makt-spras,
  maktx TYPE makt-maktx,

END OF ty_auswertung.

CLASS cl_event_handler DEFINITION DEFERRED.

DATA: gt_auswertung    TYPE STANDARD TABLE OF ty_auswertung,
      wa_auswertung    TYPE TABLE OF ty_auswertung WITH HEADER LINE,
      go_grid          TYPE REF TO cl_gui_alv_grid,
      go_cont          TYPE REF TO cl_gui_custom_container,
      gt_fcat          TYPE lvc_t_fcat,
      ok_code          TYPE sy-ucomm,
      go_event_handler TYPE REF TO cl_event_handler.

*----------------------------------------------------------------------*
*       CLASS cl_event_handler DEFINITION
*----------------------------------------------------------------------*

CLASS cl_event_handler DEFINITION.

  PUBLIC SECTION.

    METHODS on_f4
    FOR EVENT onf4 OF cl_gui_alv_grid
    IMPORTING e_fieldname
      es_row_no
      er_event_data
      et_bad_cells
      e_display.

ENDCLASS.                    "cl_event_handler DEFINITION

*------------------------*
*     Programmstart      *
*------------------------*

*-----------------------------Selection-Screen-----------------------------*

SELECTION-SCREEN: BEGIN OF BLOCK param WITH FRAME TITLE text-001.
SELECT-OPTIONS: s_matnr FOR makt-matnr.
SELECTION-SCREEN: END OF BLOCK param.


*-----------------------------Datenverarbeitung-----------------------------*

START-OF-SELECTION.

  SELECT matnr spras maktx
    FROM makt
    INTO CORRESPONDING FIELDS OF TABLE gt_auswertung
  WHERE matnr IN s_matnr.

  PERFORM fieldcat_create CHANGING gt_fcat.

  IF gt_auswertung IS NOT INITIAL.
    CALL SCREEN 0100.
  ELSE.
    LEAVE TO LIST-PROCESSING.
    MESSAGE 'Keine Daten gefunden!' TYPE 'I'.
  ENDIF.

*---------------------------------------------------------------------*
*      Form  fieldcat_create
*---------------------------------------------------------------------*

FORM fieldcat_create CHANGING pt_fcat TYPE lvc_t_fcat.

  FIELD-SYMBOLS: <fs_fcat> TYPE lvc_s_fcat.

  CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
    EXPORTING
      i_structure_name = 'MAKT'
    CHANGING
      ct_fieldcat      = gt_fcat.

* Key-Felder, Editierbare Felder, Spaltenüberschriften
  LOOP AT gt_fcat ASSIGNING <fs_fcat>.

    CASE <fs_fcat>-fieldname.
      WHEN 'MATNR'.
        <fs_fcat>-key = 'X'.
        <fs_fcat>-emphasize = 'X'.
      WHEN 'SPRAS'.
        <fs_fcat>-edit = 'X'.
        <fs_fcat>-f4availabl = '1'.
    ENDCASE.

  ENDLOOP.

ENDFORM.                    "fieldcat_create

*---------------------------------------------------------------------*
*      Form  on_f4_help
*---------------------------------------------------------------------*

FORM on_f4_help USING p_e_fieldname row_id p_er_event_data TYPE REF TO cl_alv_event_data p_et_bad_cells p_e_display.

  DATA: wa_spras TYPE STANDARD TABLE OF spras,
        line TYPE char10,
        return_tab TYPE TABLE OF ddshretval WITH HEADER LINE.

  CLEAR wa_spras.

  SELECT DISTINCT spras FROM makt INTO line.
    APPEND line TO wa_spras.
  ENDSELECT.

  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
      retfield        = 'SPRAS'
      value_org       = 'S'
      dynpprog        = sy-repid
      dynpnr          = sy-dynnr
    TABLES
      value_tab       = wa_spras
      return_tab      = return_tab
    EXCEPTIONS
      parameter_error = 1
      no_values_found = 2
      OTHERS          = 3.

  READ TABLE gt_auswertung INTO wa_auswertung INDEX row_id.

  IF return_tab-fieldval IS NOT INITIAL.
    wa_auswertung-spras = return_tab-fieldval.
  ENDIF.

  MODIFY gt_auswertung FROM wa_auswertung.
  CALL METHOD go_grid->refresh_table_display.

ENDFORM.                    "ON_F4_HELP

*---------------------------------------------------------------------*
*      Form  data_save
*---------------------------------------------------------------------*

FORM data_save.

* save data

ENDFORM.                    "data_save

*---------------------------------------------------------------------*
*      Form  alv_init
*---------------------------------------------------------------------*

FORM alv_init.

  DATA: ls_layout  TYPE lvc_s_layo,
        lt_exclude TYPE ui_functions,
        ls_exclude TYPE ui_func,
        ls_sort    TYPE lvc_s_sort,
        it_sort    TYPE lvc_t_sort,
        ls_variant TYPE disvariant.

  IF go_cont IS INITIAL.

*   Dynpro Status zuordnen
    SET PF-STATUS 'STAT_0100'.

*   Custom Container erstellen
    CREATE OBJECT go_cont
      EXPORTING
        container_name = 'CONT1_0100'.

*   Grid dem Container zuordnen
    CREATE OBJECT go_grid
      EXPORTING
        i_parent = go_cont.

*   Event Handlers erstellen
    CREATE OBJECT go_event_handler.
    SET HANDLER go_event_handler->on_f4 FOR go_grid.

*   Titel
    ls_layout-grid_title = 'Materialart'.

*   Layout: Spaltenoptimierung
    ls_layout-cwidth_opt = 'X'.

*   Sortierung
    ls_sort-spos = '1'.
    ls_sort-fieldname = 'MATNR'.
    ls_sort-up = 'X'.
    ls_sort-down = space.
    ls_sort-group = 'X'.
    ls_sort-comp = 'X'.
    APPEND ls_sort TO it_sort.

*   Mehrfachselektionen
    ls_layout-sel_mode = 'A'.

*   Layout-Variante des Users laden
    ls_variant-report   = sy-repid.
    ls_variant-username = sy-uname.

*   Grid erstellen
    CALL METHOD go_grid->set_table_for_first_display
      EXPORTING
        is_layout       = ls_layout
        is_variant      = ls_variant
        i_save          = 'A'
      CHANGING
        it_fieldcatalog = gt_fcat
        it_outtab       = gt_auswertung
        it_sort         = it_sort.

  ELSE.

  ENDIF.
ENDFORM.                    "alv_init

*---------------------------------------------------------------------*
*      Form  user_command
*---------------------------------------------------------------------*

FORM user_command.

  CALL METHOD cl_gui_cfw=>dispatch.

  CASE ok_code.

    WHEN 'BACK'.
      LEAVE TO LIST-PROCESSING AND RETURN TO SCREEN 0.

    WHEN 'EXIT'.
      LEAVE PROGRAM.

    WHEN 'SAVE'.
      PERFORM data_save.

  ENDCASE.

  CLEAR ok_code.

ENDFORM.                    "user_command

*----------------------------------------------------------------------*
*  MODULE pbo_0100 OUTPUT
*----------------------------------------------------------------------*

MODULE pbo_0100 OUTPUT.

  PERFORM alv_init.

ENDMODULE.                    "pbo_0100 OUTPUT

*----------------------------------------------------------------------*
*  MODULE pai_0100 INPUT
*----------------------------------------------------------------------*

MODULE pai_0100 INPUT.

  PERFORM user_command.

ENDMODULE.                    "pai_0100 INPUT

*----------------------------------------------------------------------*
*       CLASS cl_event_handler IMPLEMENTATION
*----------------------------------------------------------------------*

CLASS cl_event_handler IMPLEMENTATION.

  METHOD on_f4.
    PERFORM on_f4_help USING e_fieldname
            es_row_no-row_id
            er_event_data
            et_bad_cells
            e_display.
    er_event_data->m_event_handled = 'X'.

  ENDMETHOD.                    "ON_F4

ENDCLASS.                    "cl_event_handler IMPLEMENTATION
( SAP ECC 6.0, NetWeaver 7.0, ohne unicode, ohne support/enhancement packages )

Re: ALV Grid: Problem mit "Cellstyle" und "F4-Hilfe"

Beitrag von Steffen (ForumUser / 28 / 1 / 0 ) »
Vielen Dank für Dein Beispiel. Ich habe mir diese angeschaut.

Die Idee von "a-dead-trousers" hatte ich ja versucht umzusetzen. Hierbei, habe ich im Feldkatalog auch schon von Beginn an die beiden Flags "edit" und "f4availabl"gesetzt (wie in Deinem Beispiel).
Dann hat das mit der F4-Hilfe im ersten Moment funktioniert. Das Problem ist, dass sobald das Feld zu Beginn "Nicht Editierbar" ist und dann zu einem späteren Zeitpunkt über den Cellstyle auf "Editierbar" gesetzt wird, kann über die F4-Hilfe keine Werte ausgewählt werden.

Beste Grüße
Steffen

Re: ALV Grid: Problem mit "Cellstyle" und "F4-Hilfe"

Beitrag von Steffen (ForumUser / 28 / 1 / 0 ) »
@"a-dead-trousers": Kannst Du mir evtl. Tipps geben, an welcher Stelle sich dieses "Display" Attribut innerhalb des ALV Grid befindet?

Danke Dir.

Beste Grüße
Steffen

Re: ALV Grid: Problem mit "Cellstyle" und "F4-Hilfe"

Beitrag von a-dead-trousers (Top Expert / 4276 / 213 / 1140 ) »
Heute hast du echt einen guten Tag bei mir erwischt:
Methode CL_GUI_ALV_GRID=>F4
Da wird der Standardbaustein für die F4-Hilfe (F4IF_FIELD_VALUE_REQUEST) aufgerufen.
Die Variable L_DISPLAY wird dabei über die Methode IS_READY_FOR_INPUT versorgt.
Den Rest bitte selber debuggen.
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Vergleichbare Themen

8
Antw.
6292
Views
SALV - Problem mit der F4-Hilfe
von einar46 » 25.02.2014 11:58 • Verfasst in ABAP Objects®
7
Antw.
4165
Views
Problem mit eigener F4-Hilfe
von ralf.wenzel » 28.03.2006 09:10 • Verfasst in ABAP® Core
2
Antw.
1131
Views
SAP Netweaver 7.0 Installation PROBLEM HILFE
von beterman » 07.11.2011 15:43 • Verfasst in ABAP® für Anfänger
7
Antw.
5878
Views
SAP Netweaver 7.0 Installation PROBLEM HILFE
von beterman » 04.08.2011 14:11 • Verfasst in ABAP® für Anfänger
1
Antw.
4425
Views
ALV GRID (OO) F4-Hilfe auf Zellenebene
von Cysco » 06.03.2006 10:07 • Verfasst in ABAP Objects®

Über diesen Beitrag


Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

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

Aktuelle Forenbeiträge

E-Mail versenden mit GroupWise 18
vor einer Stunde von a-dead-trousers 3 / 288
PDF-Anzeige unter EDGE
vor 5 Tagen von jocoder 2 / 73

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

E-Mail versenden mit GroupWise 18
vor einer Stunde von a-dead-trousers 3 / 288
PDF-Anzeige unter EDGE
vor 5 Tagen von jocoder 2 / 73

Unbeantwortete Forenbeiträge

Zwischensumme Adobe Forms
vor 4 Wochen von Lucyalison 1 / 132
Group Items auf einer Filterbar
vor 4 Wochen von Bright4.5 1 / 166