ALV aktualisieren nach dem Löschen der Zeile

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

ALV aktualisieren nach dem Löschen der Zeile

Beitrag von ManMan (ForumUser / 26 / 10 / 0 ) »
Hallo zusammen,

ich habe in ALV einen Delete-Button implementiert. Man selektiert die Zeile, klickt auf den Button und die Zeile ist gelöscht. Es funktioniert gut. Löschen tu ich direkt auf der Datenbanktabelle, keine interne Tabelle. Danach soll die gelöschte Zeile verschvinden. Hier passiert nichts. Ich habe so gemacht, aber es funktionieert nicht.
DATA lv_stable TYPE lvc_s_stbl.

lv_stable-row = 'X'.

CALL METHOD grid->refresh_table_display
EXPORTING
is_stable = lv_stable
* I_SOFT_REFRESH =
EXCEPTIONS
finished = 1
OTHERS = 2 .[/code]

aber so funktioniert nicht. Was soll man bei is_table stehen. Ich habe zuerst mit der DB-Tabelle probiert, dann mit der internen.Ich bekomme die Fehlermeldungen Dann habe ich auch gelesen, dass man dafür die Feldliste braucht. Kann mir jemand erklären Schritt für Schritt, wie man vorgeht. Die Hilfe habe ich gelesen, Forum auch. Es hat mir nicht viel gebracht.

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


Re: ALV aktualisieren nach dem Löschen der Zeile

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
Du solltest (normalerweise) die Zeile sowohl von der Datenbank als auch aus der internen Tabelle die du im ALV anzeigst entfernen.
Wenn du jedes mal (z.B. beim PBO) die Daten neu einliest und in deinem ALV zur Anzeige bringst, musst du darauf achten, dass du ALV Grid nicht mehrfach erzeugts (CREATE OBJECT)

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 aktualisieren nach dem Löschen der Zeile

Beitrag von ManMan (ForumUser / 26 / 10 / 0 ) »
Kannst Du mir bitte ein Beispel-Code zeigen. Ich habe wirklich keine Ahnung was ich machen muss. Ich beschäftige mich mit ABAP paar Monate. So lösche ich. Es funktioniert.

Code: Alles auswählen.

data: lr_selections type ref to cl_salv_selections.
      data: lt_rows type salv_t_row.
      data: lv_row type i.

      lr_selections = gr_table->get_selections( ).
      lt_rows       = lr_selections->get_selected_rows( ).
      read table lt_rows into lv_row index 1.
      read table gt_table into gs_tabel index lv_row.

* delete from DB
      delete from dbtab
        where lifnr = gs_tabel-lifnr
        and linam   = gs_tabel-linam
        and kunnr   = gs_tabel-kunnr
        and kunam   = gs_tabel-kunam.
* delete from ALV-Grid
      delete gt_table index lv_row.

Das funktioniert nicht.

Code: Alles auswählen.

DATA: lwa_ref TYPE lvc_s_stbl.

    call method gv_grid->refresh_table_display(
      EXPORTING
      is_stable = lwa_ref --> soll hier die interne Tabelle sein?
      EXCEPTIONS
      finished  = 1
      OTHERS    = 2 ).
      endcase.
    endmethod.

Re: ALV aktualisieren nach dem Löschen der Zeile

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
Okay... Du verwendest einen SALV.
Probier es doch mal mit der REFRESH Methode deines GR_TABLE. :wink:

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag (Insgesamt 2):
DeathAndPainManMan

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 aktualisieren nach dem Löschen der Zeile

Beitrag von ManMan (ForumUser / 26 / 10 / 0 ) »
Vilen Dank für die Antwort. Mit gr_table->refresh () funktioniert es gut. Die SALV wir aktualisiert. Aber nur dann wenn ich die erste Zeile lösche. Wenn ich die Zeile aus der Mitte lösche, führt es zum Absturz meines Programms. Wie kann ich Tabelle aktualisieren, wenn ich die Zeile aus der Mitte lösche?

Re: ALV aktualisieren nach dem Löschen der Zeile

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
Das sollte eigentlich nicht passieren. Wie lautet die Fehlermeldung? In welchem "Event" führst du das Löschen bzw. das Aktualisieren 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 aktualisieren nach dem Löschen der Zeile

Beitrag von ManMan (ForumUser / 26 / 10 / 0 ) »
Ich habe heute noch einmal geprüft es funktioniert. Es funktioniert anderes nicht. Ich legefe die Daten auf dem Dynpro an. Durch den Button-Hinzufügen sie werden in der Tabelle gespeichert. Sie wird in SALV ausgegeben. Wenn ich in SALV springe, möchte ich dass die Daten aktualisiert werden. Es gab z.B. in der Tabelle zuerst 8 Lieferanten, ich füge neuen an, dann soll in SALV 9 sein. Aber es passiert nicht. Ich habe auch mit gr_table->refresh() gemacht. Auch so gr_table->refresh( refresh_mode = if_salv_c_refresh=>full ). Was fehlt noch?

Code: Alles auswählen.

CLASS lcl_handle_events DEFINITION.
  PUBLIC SECTION.
    METHODS:
      on_user_command FOR EVENT added_function OF cl_salv_events
        IMPORTING e_salv_function.
ENDCLASS.
DATA: gr_event_handler TYPE REF TO lcl_handle_events.

class lcl_handle_events implementation.
    method on_user_command.
      case e_salv_function.
        when 'EDIT'.
          call screen 8000. 
        when 'DELETE'.
          perform delete_data.
      endcase.
    endmethod.
  endclass.

form save_data.
      select single * from table where lifnr = gv_lifnr
        and kunnr = gv_kunnr.

        if sy-subrc = 4.
          table-lifnr = gv_lifnr.
          table-linam = p_linam.
          table-kunnr = gv_kunnr.
          table-kunam = p_kunam.
          modify table
          message text-005 type 'I'.
        else.
          message text-006 type 'I'.
        endif.

form delete_data.

*Set up selections for the selected rows
      data: lr_selections type ref to cl_salv_selections.
      data: lt_rows type salv_t_row.
      data: lv_row type i.

      lr_selections = gr_table->get_selections( ).
      lt_rows       = lr_selections->get_selected_rows( ).
      read table lt_rows into lv_row index 1.
      read table gt_form delete_data.

* delete from DB
      delete from table        
       where lifnr = gs_table-lifnr
        and linam   = gs_table-linam
        and kunnr   = gs_table-kunnr
        and kunam   = gs_table-kunam.
* delete from ALV-Grid
       delete table index lv_row.

       gr_table->refresh( ).

endform.      

MODULE zuser_command_8000 INPUT.

  case sy-ucomm."ok_code.
    when 'SAVE'.
       perform save_data.
    when 'CANCEL'.
      clear ok_code.
      leave to screen 0.
    when 'EXIT'.
      clear ok_code.
      leave to screen 0.
    when 'BACK'.
      clear ok_code.
      leave to screen 0.
 endcase.

ENDMODULE.


Re: ALV aktualisieren nach dem Löschen der Zeile

Beitrag von black_adept (Top Expert / 3943 / 105 / 886 ) »
2 weitere Möglichkeiten:
  • Du löscht gar nicht in der Tabelle die angezeigt wird. Ausprobieren indem man die Tabelle anders sortiert und dann im Debugger schaut, ob man beim Markieren der obersten Zeile auch das zurück gegeben bekommt was sichtbar ist
  • Du löscht zwar in der richtigen Tabelle - aber erzeugst dir danach eine neue Ausgabeliste und wir sind beim Standardproblem "Mehrere GUI-controls in einem Container"
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: ALV aktualisieren nach dem Löschen der Zeile

Beitrag von ManMan (ForumUser / 26 / 10 / 0 ) »
Aber Löschen funktioniert doch ganz gut, die Zeile wird gelöscht, die Tabelle wird aktualisiert. Wenn ich die Daten hinzufügen, funktioniert das Aktualisieren nicht.

Re: ALV aktualisieren nach dem Löschen der Zeile

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
Wie schauen deine PBO Module 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 aktualisieren nach dem Löschen der Zeile

Beitrag von ManMan (ForumUser / 26 / 10 / 0 ) »
Ich habe nur ein PBO-Modul und es enthält nur 2 Zeilen:

Code: Alles auswählen.

MODULE zstatus_8000 OUTPUT.
set pf-status '8000'
set titlebar '8000'
endmodule.
Was muss hier noch stehen?

Re: ALV aktualisieren nach dem Löschen der Zeile

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
Hehe... Okay... Dann doch anders:
Zeig mal die Stelle an der du das SALV aufbaust UND wird der Code mehrmals oder nur einmal (z.B. beim Starten) deines Programms durchlaufen (debuggen?).
Worauf ich hinaus will: Die Methode zum Erzeugen (FACTORY) darf nur EINMAL ausgeführt werden.
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 aktualisieren nach dem Löschen der Zeile

Beitrag von ManMan (ForumUser / 26 / 10 / 0 ) »
Hier ist die factory-methode

Code: Alles auswählen.

form display_data.

* ALV-Instanz  erzeugen
try.
cl_salv_table=>factory(
  importing r_salv_table = gr_table
  changing t_table = gt_table ).
catch cx_salv_msg.
endtry.

* GUI-Status SALV_STANDARD setzen
gr_table->set_screen_status(
  pfstatus = 'SALV_STANDARD'
  report = sy-repid
  set_functions = gr_table->c_functions_all ).

* Instanz für Spalten holen
gr_columns = gr_table->get_columns( ).
* Spaltenbreite optimieren
gr_columns->set_optimize( abap_true ).

* Register to the events of cl_salv_table
      gr_events = gr_table->get_event( ).
      CREATE OBJECT gr_event_handler.

* Register to the event USER_COMMAND
      SET HANDLER gr_event_handler->on_user_command FOR gr_events.

**** Selection-Mode aktivieren ****
* Instanz des Selection-Objektes holen
*  gr_selections = gr_salv->get_selections( ).
* Selektionsmodus setzen
*  gr_selections->set_selection_mode( if_salv_c_selection_mode=>row_column ).


* Titel und/oder Streifenmuster
gr_display = gr_table->get_display_settings( ).
gr_display->set_list_header( value = 'Daten anlegen in table' ).
gr_display->set_striped_pattern( abap_true ).

try.
* Spalte "Mandant" holen
  gr_column ?= gr_columns->get_column( 'MANDT' ).
* Spalte "Mandant" ausblenden
  gr_column->set_visible( abap_false ).

* Den Namen für die Spalte LIFNR vergeben
  gr_columns = gr_table->get_columns( ).
  gr_column ?= gr_columns->get_column( 'LIFNR' ).
  gr_column->set_long_text( 'Lieferant/Kunde' ).
  gr_column->set_medium_text( '' ).
  gr_column->set_short_text( '' ).

* Den Namen für die Spalte LINAM vergeben
  gr_columns = gr_table->get_columns( ).
  gr_column ?= gr_columns->get_column( 'LINAM' ).
  gr_column->set_long_text( 'Lieferantenname' ).
  gr_column->set_medium_text( '' ).
  gr_column->set_short_text( '' ).

* Den Namen für die Spalte KUNNR vergeben
  gr_columns = gr_table->get_columns( ).
  gr_column ?= gr_columns->get_column( 'KUNNR' ).
  gr_column->set_long_text( 'Lieferant/Kunde' ).
  gr_column->set_medium_text( '' ).
  gr_column->set_short_text( '' ).

* Den Namen für die Spalte KUNAM vergeben
  gr_columns = gr_table->get_columns( ).
  gr_column ?= gr_columns->get_column( 'KUNAM' ).
  gr_column->set_long_text( 'Kundenname' ).
  gr_column->set_medium_text( '' ).
  gr_column->set_short_text( '' ).

  catch cx_salv_not_found.
endtry.

* Liste anzeigen
gr_table->display( ).

endform.
Hier rufe ich display_table auf

Code: Alles auswählen.

START-OF-SELECTION.

* Call subroutine select_data
  PERFORM select_data.

END-OF-SELECTION.

* Call subroutine select_data
  PERFORM display_data.
Es läuft einmal durch, habe Debugging gemacht.

Seite 1 von 1

Vergleichbare Themen

6
Antw.
2708
Views
Nur aktuelle Zeile im GRID aktualisieren
von Kojak » 30.01.2006 13:02 • Verfasst in ABAP® Core
1
Antw.
612
Views
Zeile in Struktur löschen
von Geny » 27.01.2021 12:09 • Verfasst in ABAP® für Anfänger
3
Antw.
3298
Views
einzelne Zeile aus Tabelle einer Struktur löschen
von uibig » 16.03.2017 09:28 • Verfasst in ABAP® für Anfänger
10
Antw.
5084
Views
Selektierte Zeile im View nach Aktion löschen
von d4n » 06.01.2006 14:15 • Verfasst in Web-Dynpro, BSP + BHTML
7
Antw.
3933
Views
Markierte Zeile in ALV Grid mittels Button in DB löschen
von Miss » 15.04.2014 21:57 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


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

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 Tagen von Lucyalison 1 / 71
Group Items auf einer Filterbar
vor einer Woche von Bright4.5 1 / 111
tRFC Transaktionen SM58
vor 4 Wochen von A6272 1 / 141