gelöst ALV Grid: Problem mit "Cellstyle" und "F4-Hilfe"


Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV

Moderatoren: Jan, Steff

gelöst ALV Grid: Problem mit "Cellstyle" und "F4-Hilfe"

Beitragvon Steffen » 25.07.2018, 09:56

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
Steffen
ForumUser
 
Beiträge: 14
Registriert: 25.07.2018, 09:23
Dank erhalten: 0 mal

Sponsor

Alte ABAP-Entwicklerweisheit: Weißt du weder aus noch ein, baust du einen BADI ein

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

Beitragvon Legxis » 25.07.2018, 11:01

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.
Ich bin dankbar für jede Hilfe, Kritik, diverse Programmverbesserungen/-optimierung und schöne Codebeispiele^^
( SAP ECC 6.0, NetWeaver 7.0, ohne unicode, ohne support/enhancement packages )
Legxis
Specialist
 
Beiträge: 130
Registriert: 12.01.2018, 08:59
Wohnort: Köln
Dank erhalten: 22 mal
Ich bin: Student/in

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

Beitragvon a-dead-trousers » 25.07.2018, 11:12

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.07
Basis: 7.40
a-dead-trousers
Top Expert
 
Beiträge: 3090
Registriert: 07.02.2011, 13:40
Dank erhalten: 762 mal
Ich bin: Entwickler/in

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

Beitragvon Steffen » 25.07.2018, 13:21

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
Steffen
ForumUser
 
Beiträge: 14
Registriert: 25.07.2018, 09:23
Dank erhalten: 0 mal

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

Beitragvon Steffen » 25.07.2018, 13:22

Hallo zusammen,

hier noch Auszüge aus dem Debugger.

Bester Grüße
Steffen
Steffen
ForumUser
 
Beiträge: 14
Registriert: 25.07.2018, 09:23
Dank erhalten: 0 mal

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

Beitragvon a-dead-trousers » 25.07.2018, 13:31

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.07
Basis: 7.40
a-dead-trousers
Top Expert
 
Beiträge: 3090
Registriert: 07.02.2011, 13:40
Dank erhalten: 762 mal
Ich bin: Entwickler/in

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

Beitragvon Steffen » 25.07.2018, 13:34

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
Steffen
ForumUser
 
Beiträge: 14
Registriert: 25.07.2018, 09:23
Dank erhalten: 0 mal

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

Beitragvon a-dead-trousers » 25.07.2018, 13:43

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.07
Basis: 7.40
a-dead-trousers
Top Expert
 
Beiträge: 3090
Registriert: 07.02.2011, 13:40
Dank erhalten: 762 mal
Ich bin: Entwickler/in

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

Beitragvon Steffen » 25.07.2018, 14:04

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
Steffen
ForumUser
 
Beiträge: 14
Registriert: 25.07.2018, 09:23
Dank erhalten: 0 mal

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

Beitragvon Legxis » 25.07.2018, 14:30

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.
Ich bin dankbar für jede Hilfe, Kritik, diverse Programmverbesserungen/-optimierung und schöne Codebeispiele^^
( SAP ECC 6.0, NetWeaver 7.0, ohne unicode, ohne support/enhancement packages )
Legxis
Specialist
 
Beiträge: 130
Registriert: 12.01.2018, 08:59
Wohnort: Köln
Dank erhalten: 22 mal
Ich bin: Student/in

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

Beitragvon Steffen » 25.07.2018, 14:54

Ich hatte mir die BCALV_EDIT Demos bereits im Vorfeld angeschaut und konnte leider nichts passendes finden.
Mein letzter Ausweg war jetzt ein Forumsbeitrag :)
Steffen
ForumUser
 
Beiträge: 14
Registriert: 25.07.2018, 09:23
Dank erhalten: 0 mal

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

Beitragvon Legxis » 25.07.2018, 16:29

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
Ich bin dankbar für jede Hilfe, Kritik, diverse Programmverbesserungen/-optimierung und schöne Codebeispiele^^
( SAP ECC 6.0, NetWeaver 7.0, ohne unicode, ohne support/enhancement packages )
Legxis
Specialist
 
Beiträge: 130
Registriert: 12.01.2018, 08:59
Wohnort: Köln
Dank erhalten: 22 mal
Ich bin: Student/in

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

Beitragvon Steffen » 26.07.2018, 07:45

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
Steffen
ForumUser
 
Beiträge: 14
Registriert: 25.07.2018, 09:23
Dank erhalten: 0 mal

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

Beitragvon Steffen » 26.07.2018, 10:07

@"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
Steffen
ForumUser
 
Beiträge: 14
Registriert: 25.07.2018, 09:23
Dank erhalten: 0 mal

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

Beitragvon a-dead-trousers » 26.07.2018, 10:37

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.07
Basis: 7.40
a-dead-trousers
Top Expert
 
Beiträge: 3090
Registriert: 07.02.2011, 13:40
Dank erhalten: 762 mal
Ich bin: Entwickler/in

Nächste

Zurück zu ABAP® Core

  Aktuelle Beiträge   
s4hana-cloud
vor 8 Stunden von sap_inchen 1 Antw.
500 Internal Server Error
vor 16 Stunden von zzcpak 1 Antw.
Dokumentinformationen lesen vom DVS
vor 18 Stunden von Tron 4 Antw.
Tabs innerhalb von Tabs
vor 19 Stunden von ewx 4 Antw.
Fakturierungsplan in Kontrakten ändern
vor 15 Stunden von DeathAndPain 1 Antw.

  Ähnliche Beiträge beta
Problem mit Feldkatalog zur Ausgabe im ALV-Grid
23.11.2004, 08:17 von Kowi 4 Antw.
Daten ändern mit dem ALV-Grid: Event-Problem
02.11.2006, 12:28 von Timo7 2 Antw.
Altes Problem - ALV Grid - Spalte nicht editierbar...
31.05.2007, 14:03 von TWP 26 Antw.
Ich hab mal ein Problem
19.08.2004, 16:53 von Gast 10 Antw.
RFC VB Problem
15.11.2004, 12:23 von mike81503 2 Antw.

 

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder