Export/Import from Memory

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
13 Beiträge • Seite 1 von 1
13 Beiträge Seite 1 von 1

Export/Import from Memory

Beitrag von Steffi221185 (Specialist / 132 / 0 / 0 ) »
Hallo zusammen,

ich exportiere aus einer Methode eine Itab in den Memory. Dann ruf ich mit Submit einen Report auf und importiere die Tabelle wieder. Sobald ich einen Breakpoint vor dem Export gesetzt habe, funktioniert das auch. Aber nehm ich dem Breakpoint weg, dumpt mir mein komplettes Programm. Folgende Aufrufhierarchie liegt vor: Rahmenprogramm->Aufruf einer Methode1 Klasse1->Aufruf einer Methode1 Klasse2->Aufruf eines Reports1 mit Submit.

Ich hab zu Testzwecken ein anderes Rahmenprogramm verwendet.

Wenn ich den Dump nicht anfangen, bekomm ich auch noch eine detailierte Beschreibung des Fehlers. Der Import kann nicht statt finden, da das Zielfeld kleiner ist als das exportierte Feld. Da ich das ganze nun mehrmals mache, kann ich mir nur vorstellen, dass der Memory nicht richtig leer gemacht wird. Aber ich initialisiere ich nach jedem Durchlauf meine lokalen Variablen. Außerdem mach ich nach jedem Import ein Delete from Memory.

Kann mir jemand helfen. Bitte es ist dringend. :cry:

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


Re: Export/Import from Memory

Beitrag von ralf.wenzel (Top Expert / 3924 / 200 / 280 ) »
Steffi221185 hat geschrieben:ich exportiere aus einer Methode eine Itab in den Memory. Dann ruf ich mit Submit einen Report auf und importiere die Tabelle wieder. Sobald ich einen Breakpoint vor dem Export gesetzt habe, funktioniert das auch. Aber nehm ich dem Breakpoint weg, dumpt mir mein komplettes Programm.
Setz mal einen commit work statt des breakpoints.

Ralf
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Beitrag von Steffi221185 (Specialist / 132 / 0 / 0 ) »
danke für den Tipp. Funktioniert nur leider nicht.

Kann das nicht nen generelles Speicherproblem sein? Es werden ja auch PBO und PAI-Module in den Speicher geladen.

Beitrag von ralf.wenzel (Top Expert / 3924 / 200 / 280 ) »
Steffi221185 hat geschrieben:danke für den Tipp. Funktioniert nur leider nicht.
Hm, doof. Das ist immer der Standardtipp wenn etwas mit BP läuft aber ohne nicht - viele wissen nicht dass ein BP einen commit auslöst.

Einen weiteren Tipp hab ich grad nicht, leider :(

Ralf
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Beitrag von Steffi221185 (Specialist / 132 / 0 / 0 ) »
dein Tipp war ja auch gut. Das der BP einen Commit auslöst hab ich mir fast gedacht nur leider läufts nicht wenn ich den Commit selbst setzte.

Komisch ist ja auch, wenn ich ein Programm ohne PBO und PAI - Module habe und dann das ganze aufrufe, laufen meine Methoden einwandfrei auch ohne BP.

Beitrag von Steffi221185 (Specialist / 132 / 0 / 0 ) »
So..also das es in nen Zweiten Rahmenprogramm funktioniert hat, war nen Fehler meinerseits. Hatte vergessen was zu kopieren. Jetzt funktioniert es da auch nicht. Nun hab ich in einer Hilfe gelesen, dass zur Laufzeit vorgenommene Änderungen in Programmen nur funktionieren wenn kein Unterprogramm oder Include-Programm verändert wird.

Da ich vorher ein generate Subroutine Pool gemacht habe, dacht ich es liege daran. Nun habe ich meine ganze Methode umgestellt und ruf nur noch ein einfaches programm auf, welches ein SQL-Statement enthält und nach füllen der Tabelle die Tabelle in den Speicher exportiert. Das funktioniert auch bis zum 4 Mal ab dann bekomm ich wieder einen Dump, dass die Tabelle nicht importiert werden kann.

Hat vielleicht noch jemand einen Tipp für mich, woran es liegen könnte? Ach ja beim Debuggen funktioniert mein Programm immer noch.

Auszug aus meinem Quellcode:

Code: Alles auswählen.


 INSERT REPORT 'YEGR_SUBMIT_PROG' FROM l_it_report.

* Programm, von der der Quellcode erzeugt wurde, ausführen
  SUBMIT yegr_submit_prog and return.

   IMPORT str1 to l_is_failure FROM MEMORY ID 'FAL'.
   DELETE FROM MEMORY ID 'FAL'.
    DELETE FROM MEMORY ID l_chr_id.
    COMMIT WORK.

* gefüllte Itab aus dem Speicher auslesen
      IMPORT str1 = <l_fs_it_blank_table> FROM MEMORY ID l_chr_id2.
      DELETE FROM MEMORY ID l_chr_id2.
      COMMIT WORK.

Beitrag von Waldemar (ForumUser / 6 / 0 / 0 ) »
Hallo steffi,

Probiere es mit CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
statt mit COMMIT WORK. Vielleich geht´s.

Gruß Waldemar
Jeder fängt mal klein an!

Beitrag von black_adept (Top Expert / 4089 / 127 / 940 ) »
Hallo Steffi,

1.) Poste den Codeblock, der den EXPORT TO MEMORY beinhaltet.
2.) Poste den Codeblock, der den Assign des Feldsymbols <l_fs_it_blank_table> beinhaltet
3.) Poste die Zuordnungen der Variablen l_chr_id, l_chr_id2
4.) Poste bei welchem der von dir angezeigten IMPORTS denn nun der Dump auftritt.

ralf.wenzel hat geschrieben:...
viele wissen nicht dass ein BP einen commit auslöst
...
Diese Aussage kann man so nicht stehen lassen, da sie einfach falsch ist.
Somit
5.) kannst du die Commits auch wieder löschen.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Beitrag von Steffi221185 (Specialist / 132 / 0 / 0 ) »
Hallo,

ich habe die einzelnen Codeblöcke mal zusammengeschnitten.
Wie gesagt, die Report SUBMIT_PROG wird dynamisch generiert.
Die TYPES deklaration ändert sich also jedes mal.
Den Quellcode hab ich ein wenig verändert-> aus diesem Grund nicht das SQL-Statement beachten.

i_ptr_it_table ist der input-Parameter der Methode und enthält die strucktur der übergebenen Tabelle.



1.) Poste den Codeblock, der den EXPORT TO MEMORY beinhaltet.


REPORT SUBMIT_PROG.

TYPES: BEGIN OF STRUC_NEW_TABLE,
Name(100) TYPE C,
Vorname(50) TYPE C,
Strasse(100) TYPE C,
End OF STRUC_NEW_TABLE.

DATA: g_IT_TABLE TYPE STANDARD table of STRUC_NEW_TABLE,
g_chr_iden(3) type c value 'xyz',
g_chr_iden2(3) type c value 'abc',
g_it_code type table of string,
g_ptr_table type ref to data,
l_int_lines type i,
g_chr_prog(8) type c.

get reference of g_it_table into g_ptr_table.

FIELD-SYMBOLS: <wa_it1> TYPE standard table,
<wa_it> type any.

DATA: l_ptr_line type ref to data.

ASSIGN g_ptr_table->* TO <wa_it1>.
create data l_ptr_line like line of <wa_it1>.
assign l_ptr_line->* to <wa_it>.

EXEC SQL.
open c for
select name,vorname,strasse
from test
where name like ?M%?
order by plz
endexec.

DO.
EXEC SQL.
fetch next c into structure :<wa_it>
ENDEXEC.

IF SY-SUBRC <> 0.
EXIT.
Else.
append <wa_it> to g_it_table.
Endif.
ENDDO.

EXEC SQL.
close c
ENDEXEC.

GET REFERENCE OF g_it_table INTO g_ptr_table.
describe table g_it_table lines l_int_lines.

if l_int_lines = 0.
export str1 from 'X' to memory id 'LEE' COMPRESSION ON.
else.
export str1 = g_it_table to memory id g_chr_iden2 COMPRESSION ON.
endif.







2.) Poste den Codeblock, der den Assign des Feldsymbols <l_fs_it_blank_table> beinhaltet

Method dynamic_code

*Dereferenzieren der leeren ITAB
ASSIGN i_ptr_it_table->* TO <l_fs_it_blank_table>.

SUBMIT submit_prog and return.

* gefüllte Itab aus dem Speicher auslesen
IMPORT str1 = <l_fs_it_blank_table> FROM MEMORY ID l_chr_id2 ACCEPTING PADDING ACCEPTING TRUNCATION.
DELETE FROM MEMORY ID l_chr_id2.
COMMIT WORK.


3.) Poste die Zuordnungen der Variablen l_chr_id, l_chr_id2

Method dynamic_code
*Lokale Variabeln
DATA: l_chr_id(3) TYPE c VALUE 'xyz',
l_chr_id2(3) TYPE c VALUE 'abc'.

* Lokale Feldsymbole
FIELD-SYMBOLS: <l_fs_it_blank_table> TYPE ANY TABLE.




4.) Poste bei welchem der von dir angezeigten IMPORTS denn nun der Dump auftritt.

Method dynamic_code
* gefüllte Itab aus dem Speicher auslesen
IMPORT str1 = <l_fs_it_blank_table> FROM MEMORY ID l_chr_id2 ACCEPTING PADDING ACCEPTING TRUNCATION.
DELETE FROM MEMORY ID l_chr_id2.
COMMIT WORK.

Beitrag von black_adept (Top Expert / 4089 / 127 / 940 ) »
Hi Steffi,

sieht eigentlich ganz ok aus.


Versuch doch mal im Debugger einen Breakpoint auf alle EXPORT und IMPORT-Anweisungen zu setzen. Die sollten m.W. auch in dem generierten Teil halten. Und dann schau dir an, ob tatsächlich das exportiert was du erwartest und ob das Feldsymbol beim Import tatsächlich dieselbe Tabellenstruktur aufweist wie das , welches du beim Export verwendest.

Wahrscheinlich nimmst du in irgendeinem Fall ( ich sehe da z.B., dass du bei leerer Tabelle in ein anderes Memory schreibst ) die falsche Memoryid. Oder einer deiner Assigns bricht mit Subrc <> 0 ab und du hast noch die alte Struktur jetzt im Feldsymbol referenziert. Aber das siehst du wirklich am Besten im Debugger.
Normalerweise sollten sich ja die EXPORTS und IMPORTS abwechseln bei für diese beiden Befehle gleicher memory-id
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Beitrag von Steffi221185 (Specialist / 132 / 0 / 0 ) »
danke für die schnelle antwort.

das problem ist aber, dass ich soviele haltepunkte setzen kann wie ich will im Debugg-Modus bricht mir mein Programm auch nicht ab udn ich kann auch keinen Fehler finden. Erst wenn die Debugg-Punkte weg sind knallt es.

Beitrag von black_adept (Top Expert / 4089 / 127 / 940 ) »
Hi Steffi,

das ist ja wirklich seltsam.

Probier doch noch mal folgende Sachen, welche davon dumpen und welche nicht

1a) Breakpoint vor EXPORT
1b) Breakpoint nach EXPORT
1c) Breakpoint vor IMPORT
1d) Breakpoint nach IMPORT

2.) Statt

Code: Alles auswählen.

export str1 = g_it_table to memory id g_chr_iden2 COMPRESSION ON.
probier mal zur Sicherheit

Code: Alles auswählen.

export str1 = g_it_table[] to memory id g_chr_iden2 COMPRESSION ON.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Beitrag von Steffi221185 (Specialist / 132 / 0 / 0 ) »
Ich habs warum es nicht funktioniert hat :lol:

Und zwar ist es so, wenn man ein Programm mit der Anweisung

Code: Alles auswählen.

INSERT REPORT prog FROM itab 
wird das Programm, wenn es denn schon besteht, nur beim ersten Aufruf kompiliert. Da ich es mehrmals aufrufe, hat er meine Änderungen noch nicht realisiert.
Aus diesem Lösch ich das Programm jetzt immer mit

Code: Alles auswählen.

DELETE REPORT prog.
Nur bin ich mir nicht so sicher ob ich diese Anweisung benutzten sollte. Besser wäre wahrscheinlich der Fuba RS_DELETE_PROGRAM.

Seite 1 von 1

Vergleichbare Themen

8
Antw.
3246
Views
Import/Export to Memory
von LostDarkness » 21.02.2019 09:09 • Verfasst in ABAP® für Anfänger
4
Antw.
16903
Views
EXPORT/IMPORT itab FROM MEMORY ID
von miru77 » 06.08.2012 14:54 • Verfasst in ABAP® für Anfänger
1
Antw.
1037
Views
Drucken von Spool IMPORT und Memory ID
von kaim77 » 27.08.2020 12:26 • Verfasst in ABAP® Core
2
Antw.
2578
Views
IMPORT FROM MEMORY mit Field-Symbol
von Somani » 09.09.2013 17:14 • Verfasst in ABAP® Core
21
Antw.
4957
Views
export to Memory ID
von A6272 » 19.04.2018 12:02 • Verfasst in ABAP® für Anfänger

Aktuelle Forenbeiträge

Dialog-Container mit Toolbar/Status
vor 6 Stunden von DeathAndPain gelöst 22 / 2801
Daten an Tabelle binden
vor 11 Stunden von Lukas Sanders 2 / 877
Zeilenumbrüche ersetzen
vor 2 Tagen von ralf.wenzel 6 / 431

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

Dialog-Container mit Toolbar/Status
vor 6 Stunden von DeathAndPain gelöst 22 / 2801
Daten an Tabelle binden
vor 11 Stunden von Lukas Sanders 2 / 877
Zeilenumbrüche ersetzen
vor 2 Tagen von ralf.wenzel 6 / 431

Unbeantwortete Forenbeiträge

aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2468
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9050