ALV und CHECKBOX

Getting started ... Alles für einen gelungenen Start.
14 Beiträge • Seite 1 von 1
14 Beiträge Seite 1 von 1

ALV und CHECKBOX

Beitrag von Nadine_2706 (ForumUser / 91 / 16 / 0 ) »
Hallo,

ein weiteres Problem.

Ich habe in meine ALV Checkbox und ein Paar if-Abfragen eingebaut.

Code: Alles auswählen.


        if <ALV_OUT>-TIM_BEG lt <ALV_OUT>-TRT_END or <ALV_OUT>-TIM_END lt <ALV_OUT>-TRT_BEG.
          perform  WARNUNG_ZEILE  using     'C'  'Reise- oder Arbeitszeiten überschneiden sich'
                                       changing  <ALV_OUT>  .

          <ALV_OUT>-CHECKBOX = 'X'.

        endif.
Jetzt ist es so, dass wenn eine Überschneidung der Zeiten vorkommt, kommt die Fehlermeldung bzw. Warnung und Checkbox ist gesetzt.

Wie könnte ich aber sowas realisieren:
Sobald ich checkbox abwähle, lösche mir die Fehlermeldung.

Danke schon Mal!!!!

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


Re: ALV und CHECKBOX

Beitrag von a-dead-trousers (Top Expert / 4281 / 214 / 1140 ) »
hi!

Du brauchst eine weitere Spalte in deiner Struktur der du im Feldkatalog des ALV zuweist eine Checkbox zu sein.
Ich bin mir jetzt nicht sicher, aber es sollte für die Änderungen an Checkboxen einen eigenen Event im ALV-Grid dafür geben
(oder testweise mal den LEFT_CLICK probieren).
In der Eventverarbeitung musst du dann nur noch den Wert in der richtigen Zeile der (globalen!) Tabelle löschen und das ALV wieder mit REFRESH aktualisieren.
Da SAP eigentlich auf Bildschirm-Masken (vgl. HTML-Formulare OHNE Javascript) aufbaut wirds bei der Überwachung von Änderungen an Einzelfeldern sehr spartanisch.

Wie Events funktionieren ist in der Hilfe ausführlich beschrieben. Stichwort: SET HANDLER

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 und CHECKBOX

Beitrag von Nadine_2706 (ForumUser / 91 / 16 / 0 ) »
Checkbox in der ALV habe ich eingebaut.

Code: Alles auswählen.

data:         LS_FCAT              type LVC_S_FCAT.

  call function 'LVC_FIELDCATALOG_MERGE'
    exporting
      I_STRUCTURE_NAME       = 'struktur'
    changing
      CT_FIELDCAT            = PT_FIELDCAT[]
    exceptions
      INCONSISTENT_INTERFACE = 1
      PROGRAM_ERROR          = 2
      others                 = 3.

  clear LS_FCAT.
  LS_FCAT-FIELDNAME = 'CHECKBOX'. 
  LS_FCAT-CHECKBOX = 'X'.
  LS_FCAT-EDIT = 'X'.
*  LS_FCAT-HOTSPOT = 'X'.
  LS_FCAT-EMPHASIZE = 'X'. 
  LS_FCAT-COLTEXT = TEXT-F01.
  LS_FCAT-OUTPUTLEN = 10. 

 append LS_FCAT to PT_FIELDCAT[].
Aber wie ich das mache, dass erst bei checkbox-deaktivierung fie Fehlermeldung gelöscht wird?

Re: ALV und CHECKBOX

Beitrag von km216 (Specialist / 151 / 6 / 11 ) »
Mal abgesehen von den Checkbocen, kannst du mir den Sinn folgender If-Abfrage erläutern:

Code: Alles auswählen.

if <ALV_OUT>-TIM_BEG lt <ALV_OUT>-TRT_END or <ALV_OUT>-TIM_END lt <ALV_OUT>-TRT_BEG.
Ohne jetzt den Hintergrund zu kennen würde ich tippen, dass statt dem zweiten lt ein gt hin muss...

Re: ALV und CHECKBOX

Beitrag von Nadine_2706 (ForumUser / 91 / 16 / 0 ) »
TIM_ = Arbeitszeit
TRT_ = Reisezeit

Z.B. Beg.Reisezeit Ende Reisezeit Beg.Arbeitszeit Ende Arbeitszeit
08:15 20:00 19:00 22:00

-> kann nicht sein!

Re: ALV und CHECKBOX

Beitrag von a-dead-trousers (Top Expert / 4281 / 214 / 1140 ) »
hi!
Nadine_2706 hat geschrieben:Aber wie ich das mache, dass erst bei checkbox-deaktivierung fie Fehlermeldung gelöscht wird?
--> SET HANDLER
Ich würde dir auch empfehlen die Control-Beispiele durchzusehen, die mit SAP ausgeliefert werden.
SE38->Umfeld->Beispiele

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 und CHECKBOX

Beitrag von a-dead-trousers (Top Expert / 4281 / 214 / 1140 ) »
km216 hat geschrieben:Ohne jetzt den Hintergrund zu kennen würde ich tippen, dass statt dem zweiten lt ein gt hin muss...
Es gibt noch einen anderen Thread, der dieses Problem bereits geklärt hatte ;)
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 und CHECKBOX

Beitrag von km216 (Specialist / 151 / 6 / 11 ) »
Ja, da hab ich mich grad etwas vertan... :-)

Re: ALV und CHECKBOX

Beitrag von Nadine_2706 (ForumUser / 91 / 16 / 0 ) »
d.h. ich muss einen button reinbasteln. Sobald ich Checkbox abwähle und auf den Button klicke, wird die Fehler gelöscht.
Es gibt aber schon in ALV so ein Refresh-Button. Kann man den benutzen? Falls ja, wie kann ich den ansprechen?

Wie ist überhaupt die Vorgehensweise???

Re: ALV und CHECKBOX

Beitrag von a-dead-trousers (Top Expert / 4281 / 214 / 1140 ) »
Schau dir mal die Event-Liste des ALV-Grids durch.
se24->"cl_gui_alv_grid"->Anzeigen->Karteireiter Events
Alle Schritte um Events zu verwenden (Event-Receiver erstellen, registrieren, verarbeiten) würden hier den Rahmen sprengen.
Schau dir dazu BITTE wirklich die Hilfe durch.
Oder kopier dir eines der Beispiel-Programme damit du die entsprechenden "Hüllen" hast und tob dich dann darin mit den verschiedenen Events aus.
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 und CHECKBOX

Beitrag von Nadine_2706 (ForumUser / 91 / 16 / 0 ) »
Erstmal vielen Dank für Eure Tipps!

Nun habe ich alles durchgeschaut und einigermaßen verstanden.

Ich fange mal klein an und dazu brauche ich Eure Unterstützung!

Ich habe meine ALV mit Checkbox:

Code: Alles auswählen.

form GET_FIELDCAT  changing  PT_FIELDCAT  type  LVC_T_FCAT.

  data: LV_KEY               type CHAR4,
        LS_FCAT              type LVC_S_FCAT.

  field-symbols:
      <FIELDCAT>             type line of LVC_T_FCAT.

  call function 'LVC_FIELDCATALOG_MERGE'
    exporting
      I_STRUCTURE_NAME       = 'ZHCM_AZB_MONTAGE_ALV'
    changing
      CT_FIELDCAT            = PT_FIELDCAT[]
    exceptions
      INCONSISTENT_INTERFACE = 1
      PROGRAM_ERROR          = 2
      others                 = 3.

  clear LS_FCAT.
  LS_FCAT-FIELDNAME = 'CHECKBOX'.
  LS_FCAT-CHECKBOX = 'X'.
  LS_FCAT-EDIT = 'X'.
  LS_FCAT-HOTSPOT = 'X'.
  LS_FCAT-EMPHASIZE = 'X'.
  LS_FCAT-COLTEXT = TEXT-F01.
  LS_FCAT-OUTPUTLEN = 10.    

  append LS_FCAT to PT_FIELDCAT[].
endform.
Dann habe ich eine Klasse mit event HOTSPOT_CLICK definiert und implementiert. In der Klasse rufe ich die Methode HOTSPOT_CLICK und HANDLE_DATA_CHANGED auf:

Code: Alles auswählen.

class LCL_EVENT_RECEIVER definition.

  public section.

    methods:
*     Hotspot clicking
      HOTSPOT_CLICK
           for event HOTSPOT_CLICK of CL_GUI_ALV_GRID
             importing E_ROW_ID
                       E_COLUMN_ID
                       ES_ROW_NO,

*     Data changed (such as checkbox clicking)
      HANDLE_DATA_CHANGED
        for event DATA_CHANGED of CL_GUI_ALV_GRID
            importing ER_DATA_CHANGED.
endclass.  


class LCL_EVENT_RECEIVER implementation.
  method HOTSPOT_CLICK.
    perform EVENT_HOTSPOT_CLICK
                  using E_ROW_ID
                        E_COLUMN_ID.
  endmethod.                    "hotspot_click

 method HANDLE_DATA_CHANGED.

    data: LV_CHANGED type LVC_S_MODI.

    loop at ER_DATA_CHANGED->MT_GOOD_CELLS into LV_CHANGED
      where FIELDNAME = 'CHECKBOX'.

      read table i_alv_data into v_alv_data index LV_CHANGED-ROW_ID.

      if SY-SUBRC = 0.
        move LV_CHANGED-VALUE to V_ALV_DATA-CHECKBOX.
        modify I_ALV_DATA from V_ALV_DATA index LV_CHANGED-ROW_ID.
      endif.

    endloop.

  endmethod.                    "handle_data_changed

endclass.    
Und die Form dazu:

Code: Alles auswählen.


FORM EVENT_HOTSPOT_CLICK
                USING   p_row    TYPE lvc_s_row
                        p_column TYPE lvc_s_col.

  READ TABLE i_alv_data INTO v_alv_data INDEX p_row-index.

  IF p_column = 'CHECKBOX'.
*   call a transaction when the cust_id is clicked
    MESSAGE i012.
  ENDIF.
ENDFORM.                    " EVENT_HOTSPOT_CLICK
Ist dies richtig???

Es sieht jetzt so aus, dass meine Checkbox gar nicht editierbar ist, d.h. ich kann da gar nichts anklicken, weil hotspot gesetzt ist!

Re: ALV und CHECKBOX

Beitrag von a-dead-trousers (Top Expert / 4281 / 214 / 1140 ) »
hi!

Hast du das ALV auf "Editierbar" gesetzt? (LVC_S_LAYO-EDIT)
Hast du das Feld im Feldcatalog auf "Editierbar" gesetzt? (LVC_S_FCAT-EDIT)
Und das DATA_CHANGED ist einer der wenige Events die meines Wissens speziell registriert werden müssen:
REGISTER_EDIT_EVENT( cl_gui_alv_grid=>mc_evt_modified )
Eben die bereits erwähnte Geschichte von wegen Bildschirm- vs. Feld-Verarbeitung
Den HOTSPOT_CLICK würde ich für den Anfang mal weglassen, kann wirklich sein, dass der die Checkbox unbrauchbar macht.

Oder du baust alles auf einen Button auf, sprich du lässt die Checkbox/Hotspot weg und fügst einen Button mit einem ICON ein.
Das ist aber etwas schwieriger: Siehe dazu die ALV-Hilfe zum Thema "Ausgabeoptionen einer Spalte" und das Feld "Style"

lg ADT

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
Nadine_2706

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 und CHECKBOX

Beitrag von Tron (Top Expert / 1327 / 35 / 331 ) »
Moin,
hier eine ALV Variante mit Checkbox OHNE Editierbare Zellen auf OO-Basis:

Code: Alles auswählen.

*&---------------------------------------------------------------------*
*& Report  ALV WITH CHECKBOX                                           *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*&                                                                     *
*&---------------------------------------------------------------------*

REPORT  yalv_mit_checkbox2.

INCLUDE <icon>.

DATA: BEGIN OF it_data OCCURS 0,
      cb(1).
        INCLUDE STRUCTURE sflight.
DATA  END OF it_data.


* Grid Parameter
DATA: ok_code LIKE sy-ucomm,
      g_container TYPE scrfname VALUE 'BCALV_CONTAINER',
      grid1  TYPE REF TO cl_gui_alv_grid,
      g_custom_container TYPE REF TO cl_gui_custom_container.

*--- Field catalog table
DATA gt_fieldcat TYPE lvc_t_fcat WITH HEADER LINE.
*--- Layout structure
DATA gs_layout TYPE lvc_s_layo .

* LT_EXCLUDE => Tabelle zum Ausschliessen von Funktionen innerhalb
* der Toolbar des ALV-Grid
DATA: lt_exclude TYPE ui_functions,
      ls_exclude TYPE ui_func.
*---------------------------------------------------------------------*
*       MAIN                                                          *
*---------------------------------------------------------------------*
INITIALIZATION.
*---------------------------------------------------------------------*
*       CLASS lcl_event_handler DEFINITION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS lcl_event_handler DEFINITION .
  PUBLIC SECTION .
    METHODS:

*--hotspot-click control
handle_hotspot_click
FOR EVENT hotspot_click OF cl_gui_alv_grid
IMPORTING e_row_id e_column_id es_row_no.


  PRIVATE SECTION.
ENDCLASS.                    "lcl_event_handler DEFINITION


*---------------------------------------------------------------------*
*       CLASS lcl_event_handler IMPLEMENTATION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS lcl_event_handler IMPLEMENTATION .

*--Handle Double Click
  METHOD handle_hotspot_click .
    PERFORM handle_hotspot_click USING e_row_id e_column_id es_row_no .
  ENDMETHOD .                    "handle_double_click


ENDCLASS.                    "lcl_event_handler IMPLEMENTATION

DATA gr_event_handler TYPE REF TO lcl_event_handler .
* Eingabe und Auswertung ---------------------------------------------*

START-OF-SELECTION.

  SELECT * FROM sflight INTO CORRESPONDING FIELDS OF TABLE it_data.



  CALL SCREEN 100.

  EXIT.
*&---------------------------------------------------------------------*
*&      Module  PBO  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE pbo OUTPUT.
  IF g_custom_container IS INITIAL.
    CREATE OBJECT g_custom_container
           EXPORTING container_name = g_container.
    CREATE OBJECT grid1
           EXPORTING i_parent = g_custom_container.

*--Creating an instance for the event handler
    CREATE OBJECT gr_event_handler .

*----Preparing field catalog.
    PERFORM prepare_field_catalog TABLES gt_fieldcat[] .
*----Preparing layout structure
    PERFORM prepare_layout CHANGING gs_layout .
*----Preparing Disable Toolbar Buttons
    PERFORM change_buttons .


    CALL METHOD grid1->set_table_for_first_display
      EXPORTING
*       i_save               = ' '
        is_layout            = gs_layout
        it_toolbar_excluding = lt_exclude
      CHANGING
        it_outtab            = it_data[]
        it_fieldcatalog      = gt_fieldcat[].


*--Registering handler methods to handle ALV Grid events JG

    SET HANDLER gr_event_handler->handle_hotspot_click FOR grid1.


    IF sy-subrc <> 0.
    ENDIF.


  ENDIF.

  SET PF-STATUS 'MAIN100'.
  SET TITLEBAR 'AUSW' WITH text-001.

ENDMODULE.                 " PBO  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  PAI  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE pai INPUT.
*   to react on oi_custom_events:
  CALL METHOD cl_gui_cfw=>dispatch.
  CASE ok_code.
    WHEN 'EXIT'.
      LEAVE TO SCREEN 0.
    WHEN OTHERS.
*     do nothing
  ENDCASE.
  CLEAR ok_code.

ENDMODULE.                 " PAI  INPUT
*&--------------------------------------------------------------------*
*&      Form  prepare_field_catalog
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
*      -->PT_FIELDCATtext
*---------------------------------------------------------------------*
FORM prepare_field_catalog TABLES pt_fieldcat TYPE lvc_t_fcat .

  DATA ls_fcat TYPE lvc_s_fcat .
*  DATA lv_depth TYPE i.

  CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
    EXPORTING
      i_structure_name       = 'SFLIGHT'
    CHANGING
      ct_fieldcat            = pt_fieldcat[]
    EXCEPTIONS
      inconsistent_interface = 1
      program_error          = 2
      OTHERS                 = 3.

  CLEAR ls_fcat.
  READ TABLE pt_fieldcat INTO ls_fcat WITH KEY fieldname = 'CARRID'.
  ls_fcat-fieldname = 'CB'.
  ls_fcat-hotspot = 'X'.
  ls_fcat-domname = 'FLAG'.
  ls_fcat-dd_outlen = '1'.
  ls_fcat-intlen = '1'.
  ls_fcat-coltext = 'Select'.
  ls_fcat-reptext = 'Select'.
  ls_fcat-checkbox = 'X'.
  ls_fcat-scrtext_l = 'Auswahl'.
  ls_fcat-scrtext_m = 'Auswahl'.
  ls_fcat-scrtext_s = 'Auswahl'.
  ls_fcat-ref_table  = 'KAEP_COAC'.
  ls_fcat-tabname = '1'.

  INSERT ls_fcat INTO pt_fieldcat INDEX 1.


  LOOP AT pt_fieldcat INTO ls_fcat .
    ls_fcat-col_pos = sy-tabix.
    ls_fcat-key = space.
    ls_fcat-emphasize = space.
    MODIFY pt_fieldcat FROM ls_fcat .
  ENDLOOP.

ENDFORM .                    "prepare_field_catalog
*&--------------------------------------------------------------------*
*&      Form  prepare_layout
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
*      -->PS_LAYOUT  text
*---------------------------------------------------------------------*
FORM prepare_layout CHANGING ps_layout TYPE lvc_s_layo.
  ps_layout-zebra = 'X' .
  ps_layout-cwidth_opt ='X'.
  ps_layout-numc_total = ' '.
  ps_layout-no_merging = 'X'.
  ps_layout-no_rowmark = 'X'.
  ps_layout-sel_mode = 'A'.
  ps_layout-no_toolbar = ' '.

ENDFORM.                    "prepare_layout

*&--------------------------------------------------------------------*
*&      Form  Change_buttons
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
FORM change_buttons .
* Kein Symbol für Drucken / Graphik / Info
  ls_exclude = cl_gui_alv_grid=>mc_fc_print_back.
  APPEND ls_exclude TO lt_exclude.
  ls_exclude = cl_gui_alv_grid=>mc_fc_graph.
  APPEND ls_exclude TO lt_exclude.
  ls_exclude = cl_gui_alv_grid=>mc_fc_info.
  APPEND ls_exclude TO lt_exclude.
  ls_exclude = cl_gui_alv_grid=>mc_mb_subtot.
  APPEND ls_exclude TO lt_exclude.
  ls_exclude = cl_gui_alv_grid=>mc_mb_sum.
  APPEND ls_exclude TO lt_exclude.
  ls_exclude = cl_gui_alv_grid=>mc_mb_view.
  APPEND ls_exclude TO lt_exclude.
  ls_exclude = cl_gui_alv_grid=>mc_fc_detail.
  APPEND ls_exclude TO lt_exclude.
  ls_exclude = cl_gui_alv_grid=>mc_fc_find.
  APPEND ls_exclude TO lt_exclude.

ENDFORM.                    "Change_buttons


*&---------------------------------------------------------------------*
*&      Form  handle_hotspot_click
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->E_ROW_ID     text
*      -->E_COLUMN_ID  text
*      -->ES_ROW_NO    text
*----------------------------------------------------------------------*
FORM handle_hotspot_click USING e_row_id e_column_id es_row_no .
*E_ROW_ID     Type   LVC_S_ROW
*E_COLUMN_ID  Type   LVC_S_COL
*ES_ROW_NO    Type   LVC_S_ROID

  DATA stable TYPE lvc_s_stbl .

  CHECK e_column_id = 'CB'.

  READ TABLE it_data INDEX e_row_id.

  IF NOT it_data-cb IS INITIAL.
    CLEAR it_data-cb.
  ELSE.
    it_data-cb = 'X'.
  ENDIF.

  MODIFY it_data INDEX e_row_id.

  IF sy-subrc = 0.

    stable-row = 'X'.
    CALL METHOD grid1->refresh_table_display
      EXPORTING
        is_stable = stable
      EXCEPTIONS
        finished  = 1
        OTHERS    = 2.

  ENDIF.

ENDFORM.                    "handle_hotspot_click
Man muß ein Dynpro 100 anlegen,
Feld OK_CODE
Name des Kastenkontaminator ...ähh Customcontainer : BCALV_CONTAINER
gruß Jens

Folgende Benutzer bedankten sich beim Autor Tron für den Beitrag:
Nadine_2706

<:: XING-Gruppe Tricktresor::>
Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen –
Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

Re: ALV und CHECKBOX

Beitrag von Nadine_2706 (ForumUser / 91 / 16 / 0 ) »
Danke!!!

Seite 1 von 1

Vergleichbare Themen

4
Antw.
1988
Views
Checkbox
von lisa » 12.09.2008 13:41 • Verfasst in ABAP® für Anfänger
3
Antw.
2178
Views
Checkbox
von MG1993 » 04.08.2014 16:08 • Verfasst in ABAP® für Anfänger
4
Antw.
4994
Views
ALV Grid mit Checkbox
von lisa » 15.09.2008 10:42 • Verfasst in ABAP® für Anfänger
3
Antw.
3074
Views
Event für CheckBox im OO-ALV
von GreatEMU » 14.07.2011 09:25 • Verfasst in ABAP® Core
4
Antw.
4558
Views
Checkbox im ALV-Grid
von izibizi666 » 23.08.2006 09:21 • Verfasst in Dialogprogrammierung

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.

Unbeantwortete Forenbeiträge

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