alv grid interne tabelle mit transparenter tabelle abgleiche

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

alv grid interne tabelle mit transparenter tabelle abgleiche

Beitrag von hadde85 (ForumUser / 17 / 0 / 0 ) »
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

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


Beitrag von uh (Specialist / 158 / 0 / 1 ) »
Hallo Hadde,

hast du dir z.B. das schon durchgelesen:

http://www.abapforum.com/forum/viewtopic.php?t=13680

Grüße

Udo

Beitrag von DeathGuardian (Expert / 759 / 0 / 3 ) »
EDIT-EVENT REGISTRIEREN!!!!!!

Kurz vor dem set_table_for...

Code: Alles auswählen.

grid->register_edit_event( EXPORTING i_event_id = 18 ) .
Dadurch werden alle Änderung wo du am GRID machst auch in die ITAB zurückgeschrieben!

Denn Rest wirst selber hinbekommen.

Beitrag von hadde85 (ForumUser / 17 / 0 / 0 ) »
@udo
ich habs mir schon angschaud, aber es muss doch von sap aus eine methode geben die das für einen übernimmt.
und so ganz kann ich mir die realiserung auch ned vorstellen....
bin halt doch noch ein anfänger!

@DeathGuardian
ich habe deinen coder eingefügt, wo muss ich deiner meinung nach nun weiter machen!?
passt meine modul 'save'?
habs mir im debugger angeschaud, und es stehen meiner meinung nach keine werte in der internen tabelle...

Beitrag von hadde85 (ForumUser / 17 / 0 / 0 ) »
hi leute,

schade dass keine einträge mehr kommen....
hat wirklich keiner eine idee wie ich das problem lösen könnte!?

Beitrag von JHM (Top Expert / 1188 / 1 / 195 ) »
hadde85 hat geschrieben:hat wirklich keiner eine idee wie ich das problem lösen könnte!?
Welches Problem hast du denn genau? Werden die Änderungen nicht aus dem ALV zurückgegeben? Funktioniert die DB-Änderung nicht?

Es wurden schon einige Hinweise gegeben, die dich zu einer Lösung bringen könnten.

Auf gelöschte Zeilen reagierst du mit dem Modify garnicht. Es werden die Daten so wie sie in der itab stehen auf die DB geschreiben. Also nur Änderungen und Neuanlagen. Udo hat dir zu diesem Problem eine Link zur Lösung geposted.
Gruß Hendrik

Beitrag von hadde85 (ForumUser / 17 / 0 / 0 ) »
hallo zusammen,

ja über insert, delete usw. bekomm ich's jetzt schon hin das ich die änderungen auf dem alv grid in die datenbank schreibe.
findes es nur kommisch, dass es keine methode im alv_grid gibt
die solche änderungen automatisch übernimmt...

Beitrag von DeathGuardian (Expert / 759 / 0 / 3 ) »
hadde85 hat geschrieben:hallo zusammen,

ja über insert, delete usw. bekomm ich's jetzt schon hin das ich die änderungen auf dem alv grid in die datenbank schreibe.
findes es nur kommisch, dass es keine methode im alv_grid gibt
die solche änderungen automatisch übernimmt...
Das hat mehrere Gründe:
1. der Grid hat meist nicht die gleiche Struktur wie die DB
2. man könnte ihn sonst zu leicht für DIRTY-UPDATES missbrauchen
-- z.B. ein harter UPDATE auf eine Bestellmenge
3. ist der Grid eigentlich nur zur REINEN Anzeige gemacht worden
4. die EDIT-Funktionalität hätte eigentlich niemand ausserhalb des eingeweihten Kreises erfahren dürfen
5. die EDIT-Funktion ist "Ofiziel" noch nicht Freigegeben
usw. usf.


Aber mal was anderes:
Eigentlich würde bei dir ein popeliger Plegedialog per SM30 reichen.

Beitrag von hadde85 (ForumUser / 17 / 0 / 0 ) »
okay, dass ergibt sinn!

ja kann man mit der 'sm30' auch die selection
wie beim den 'select-options' vornehmen!?
beim meinem programm muss es auch möglich sein,
die selectionsbedingungen aus einer externen quelle zu importieren.
(also textdatei und zwischensablage)

mfg hadde

Beitrag von ewx (Top Expert / 4784 / 294 / 628 ) »
Hi hadde,

knips doch mal in der SM30 "Bedingungen eingeben" an, bevor du auf [_Pflegen_] klickst...
Und wenn du das nutzen willst, um den Dialog aus einem anderen Programm aufzurufen (wegen der "Select-Options") denn mach bittebitte keinen Batchinput auf die SM30 sondern nimm den Baustein VIEW_MAINTENANCE_CALL!! :wink:

Beitrag von hadde85 (ForumUser / 17 / 0 / 0 ) »
glaub nicht das es funktioniert,
es besteht bereits ein programm, welches die sm30 benutzt und wo diese mehrfachselektion nicht funktioniert hat.
das war auch der grund, weshalb ich es neu programmieren muss.

nun habe ich nur noch ein Problem, wie bekomm ich den langtext, den is in der sm30 gibt, auch in mein programm!?
hab mir die entsprechenden froms schon angeschaud, aber so richtig schlau bin ich daraus nicht geworden...
hab auch etwas von einem textmemory und textdatenbank gelesen...

möcht mich jetzt schon mal für das gute feedback bedanken!

Seite 1 von 1

Vergleichbare Themen

2
Antw.
1548
Views
Select mit Cluster und transparenter Tabelle
von kaufmann123 » 27.03.2018 09:07 • Verfasst in ABAP® für Anfänger
4
Antw.
8709
Views
interne Tabelle auf Dynpro und ALV Grid
von bohne » 27.11.2006 14:20 • Verfasst in ABAP® für Anfänger
2
Antw.
4390
Views
F4 Auswahl interne Tabelle im GRID als POPUP
von Dele » 19.05.2015 10:32 • Verfasst in Tips + Tricks & FAQs
4
Antw.
227
Views

Über diesen Beitrag


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

Aktuelle Forenbeiträge

Zugriff auf Daten via Webdav
vor einer Stunde von msfox 2 / 36
Interne Tabelle
vor 18 Stunden von sap_enthusiast 3 / 163
Zwischensumme Adobe Forms
vor 3 Tagen von Lucyalison 1 / 71

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.

Aktuelle Forenbeiträge

Zugriff auf Daten via Webdav
vor einer Stunde von msfox 2 / 36
Interne Tabelle
vor 18 Stunden von sap_enthusiast 3 / 163
Zwischensumme Adobe Forms
vor 3 Tagen von Lucyalison 1 / 71

Unbeantwortete Forenbeiträge

Zwischensumme Adobe Forms
vor 3 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