Wenn du das F3 abfängst, dann ruf mal als erstes die Methode check_changed_data deines Alv´s auf.Mrs. Hilflos hat geschrieben:Jetzt der Problemfall: Wenn ich im ALV die Änderung mache, NICHT Enter drücke und auch NICTH mit TAB in ein anderes Feld springe und jetzt mit F3 den ALV verlasse und auf dem Selektionsbild ankomme, wird keine Änderung festgestellt (Sollte doch eigentlich ).
Code: Alles auswählen.
case sy-ucomm.
when 'BACK'.
perform data_changed.
leave to screen 0.
when 'END' or 'CANC'.
leave to screen 0.
when 'SAVE'.
perform save_values.
endcase.
....
*&---------------------------------------------------------------------*
*& Form data_changed
*&---------------------------------------------------------------------*
form data_changed .
data: l_valid type c.
call method re_alv_reorg->check_changed_data
importing
e_valid = l_valid.
if l_valid is initial.
call function 'POPUP_TO_INFORM'
exporting
titel = text-t04 "Eingabefehler
txt1 = text-t05 "Die Eingaben sind noch nicht konsistent.
txt2 = text-t06 "Überprüfen Sie die Eingaben
txt3 = text-t07. "anhand des Fehlerprotokolls.
else.
data: lt_del type table of ty_reorg
, lt_add type table of ty_reorg
, lt_mod type table of ty_reorg
, l_flag type flag
.
call function 'CTVB_COMPARE_TABLES'
exporting
table_old = gt_reorg_alt[]
table_new = gt_reorg[]
key_length = 254
importing
table_del = lt_del[]
table_add = lt_add[]
table_mod = lt_mod[]
no_changes = l_flag.
if l_flag is initial.
* --> Daten wurden geändert
data: l_answer(1) type c.
call function 'POPUP_TO_CONFIRM'
exporting
text_question = 'veränderte Daten sichern?'
text_button_1 = 'Ja'(001)
text_button_2 = 'Nein'(002)
importing
answer = l_answer
exceptions
text_not_found = 1
others = 2
.
if sy-subrc <> 0.
message id sy-msgid type sy-msgty number sy-msgno
with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
endif.
if l_answer = '1'.
* Ja
perform save_values.
elseif l_answer = '2'.
* Nein
endif.
endif.
endif.
Code: Alles auswählen.
LEAVE TO SCREEN 0
Code: Alles auswählen.
LEAVE TO TRANSACTION 'XY'