hallo zusammen,
ich habe mir ein alv_grid gebastelt welches die daten aus einer bestimmten tabelle anzeigt. ich kann die werte der tabelle ändern, löschen und soweit.
meine frage ist nun, wie man diese änderungen im alv_grid (interne tabelle) auf die transparente tabelle (im abap dictionary) übertragen kann.
ich habe dabei schon viel über check_changed_data als mögliche lösung gelesen nur wurde ich nicht wirklich schlau daraus.
hier mein report.
hoffe ihr könnt mir weiter helfen.
*&---------------------------------------------------------------------*
*& Report Z_AHARTL_7
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT z_ahartl_7.
TABLES zlo_ec_lock.
" Data Definition
DATA: "Instanz auf das AVL Grid Control
grid TYPE REF TO cl_gui_alv_grid,
"Instanz auf den ALV Grid Container
gc_container TYPE REF TO cl_gui_custom_container,
"Name des AVL Grid Containers auf dem Dympro
gn_container TYPE scrfname VALUE 'ALV_CONTAINER',
"Interne Tabelle für die Daten der T-Tabelle
gt_zlo_ec_lock TYPE TABLE OF zlo_ec_lock WITH HEADER LINE,
"Dynpro Code Übergabefeld
ok_code LIKE sy-ucomm,
ok_save LIKE sy-ucomm,
"Tabellen Layout
gs_layout TYPE lvc_s_layo.
"Titelfelder
DATA: title TYPE string VALUE 'MAIN_100',
p1 TYPE string VALUE 'anzeigen',
p2 TYPE string VALUE 'ändern'.
* Paramter Variablen
"für Parameter I_SAVE ( A = Laden und Speichern des Layouts erlaubt)
DATA: x_save VALUE 'A',
" Für Parmeter IS_VARIANT
gs_variant TYPE disvariant.
"Definiton des Selection-Screens
SELECTION-SCREEN BEGIN OF SCREEN 500
AS WINDOW TITLE text-010.
SELECTION-SCREEN: SKIP,
BEGIN OF BLOCK b1
WITH FRAME TITLE text-020.
SELECT-OPTIONS:
so_matnr FOR zlo_ec_lock-matnr, "NO-EXTENSION,
so_werks FOR zlo_ec_lock-werks, "NO-EXTENSION,
so_ecnr FOR zlo_ec_lock-ecnr, "NO-EXTENSION,
so_kunwe FOR zlo_ec_lock-kunwe, "NO-EXTENSION,
so_datab FOR zlo_ec_lock-datab, "NO-EXTENSION,
so_zgst FOR zlo_ec_lock-zgstnd. "NO-EXTENSION. "M001
SELECTION-SCREEN: END OF BLOCK b1,
END OF SCREEN 500 .
"Das Ereigniss START-OF-SELECTION
START-OF-SELECTION.
"Aufruf des Dynpros mit der Nummer 500
CALL SELECTION-SCREEN 500 STARTING AT 10 10.
"Aufruf des Dynpros 100
CALL SCREEN 100.
*----------------------------------------------------------------------*
* MODULE status_0100 OUTPUT
*----------------------------------------------------------------------*
* Process Before Output
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
"Festlegen des Status für das Dynpro
SET PF-STATUS 'SCREEN_100'.
"Festlegen des Titels für das Dynpro
"SET TITLEBAR title OF PROGRAM prog WITH p1.
SET TITLEBAR title WITH p1 p2.
"Überprüfen ob eine Instanz des Custom Containers besteht
IF gc_container IS INITIAL.
"Neuer Instanz der Custom Containers wird erstellt
CREATE OBJECT gc_container " Containers auf dem Dympro
EXPORTING
container_name = gn_container. "Eingabe Parameter ist der Name des
CREATE OBJECT grid "Neue Instanz des ALV Grid Controls wird erstellt
EXPORTING "Bezug auf den 'Parent' Container
i_parent = gc_container.
ENDIF.
"Die Spaltenbreite wird optimiert
gs_layout-cwidth_opt = 'X'.
"Füllen der Internen Tabelle
SELECT *
FROM zlo_ec_lock
INTO TABLE gt_zlo_ec_lock
WHERE matnr IN so_matnr AND
werks IN so_werks AND
ecnr IN so_ecnr AND
kunwe IN so_kunwe AND
datab IN so_datab AND
zgstnd IN so_zgst.
"Layout-Eigenschaften definieren
gs_variant-report = sy-repid.
"Darstellung der Tabelle für den Start-Bildschirm
CALL METHOD grid->set_table_for_first_display
"Übergabe der Tabellen Struktur
EXPORTING i_structure_name = 'zlo_ec_lock'
is_variant = gs_variant " Legt die Variante Fest
i_save = x_save " Legt die Speicherung fest
is_layout = gs_layout
"Übergabe der Tabellenwerte
CHANGING it_outtab = gt_zlo_ec_lock[].
IF grid->is_ready_for_input( ) EQ 0.
set TITLEBAR title WITH p2.
ELSE.
set TITLEBAR title WITH p2.
ENDIF.
ENDMODULE. "STATUS_0100 OUTPUT
*----------------------------------------------------------------------*
* MODULE user_command_0100 INPUT
*----------------------------------------------------------------------*
* Process After Input
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
"Code Übergabe prüfen.
CASE ok_code.
"Fall EXIT
WHEN 'EXIT'.
"Ruft das Modul 'exit' auf
PERFORM exit.
"FALL SWITCH
WHEN 'EDIT'.
"Ruft das Modul 'edit' auf
PERFORM edit.
WHEN 'CHANGE'.
CALL SELECTION-SCREEN 500 STARTING AT 10 10.
WHEN 'SAVE'.
PERFORM save.
WHEN OTHERS.
ENDCASE.
ENDMODULE. "user_command_0100 INPUT
*&---------------------------------------------------------------------*
*& Form exit
*&---------------------------------------------------------------------*
* beendet das akutelle Dympro
*----------------------------------------------------------------------*
FORM exit.
LEAVE PROGRAM.
ENDFORM. "exit
*&---------------------------------------------------------------------*
*& Form edit
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM edit.
DATA: v_string TYPE string VALUE 'Anzeigen <-> Ändern'.
*§3.Use IS_READY_FOR_INPUT to fetch current substate of editable cells.
IF grid->is_ready_for_input( ) EQ 0.
*§4.Use SET_READY_FOR_INPUT to switch between the substates.
"Setzt den Status auf Editirbar
CALL METHOD grid->set_ready_for_input
EXPORTING
i_ready_for_input = 1.
gs_layout-edit = 'X'.
set TITLEBAR title WITH p2.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
text = v_string.
ELSE.
CALL METHOD grid->set_ready_for_input
EXPORTING
i_ready_for_input = 0.
gs_layout-edit = ''.
SET TITLEBAR title WITH p1.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
text = v_string.
ENDIF.
ENDFORM. " SWITCH_EDIT_MODE
*&---------------------------------------------------------------------*
*& Form save
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM save.
CALL METHOD grid->check_changed_data.
MODIFY zlo_ec_lock FROM TABLE gt_zlo_ec_lock.
MESSAGE s782(/BEV2/EDMESS1).
CALL METHOD grid->refresh_table_display.
ENDFORM. "save