Strukturtyp ausbauen

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Getting started ... Alles für einen gelungenen Start.
23 Beiträge • Seite 1 von 2 (current) Nächste
23 Beiträge Seite 1 von 2 (current) Nächste

Strukturtyp ausbauen

Beitrag von 1337 (ForumUser / 99 / 33 / 0 ) »
Guten Tag,

ich habe eine Frage bzgl. eines Strukturtyps den ich "austauschen" möchte.

Für Tipps und Tricks wäre ich sehr dankbar.
Zuletzt geändert von 1337 am 09.12.2013 08:39, insgesamt 1-mal geändert.

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


Re: Strukturtyp ausbauen

Beitrag von a-dead-trousers (Top Expert / 4483 / 231 / 1205 ) »
Kann es sein, dass du MOVE-CORRESPONDING suchst?
Damit kannst du alle Felder die in Struktur 1 und Struktur 2 (per Name!) existieren, hin und her kopieren.
Bei APPEND/INSERT/UPDATE/MODIFY muss der Strukturtyp immer mit dem der Tabelle übereinstimmen.
Umgelegt auf dein Beispiel:

Code: Alles auswählen.

data: gt_1 type standard table of XYZ with default key,
      ls_1 type XYZ,
      ls_2 type ABC.
move-corresponding ls_2 to ls_1.
append ls_1 to gt_1.
lg ADT

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
1337

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: Strukturtyp ausbauen

Beitrag von 1337 (ForumUser / 99 / 33 / 0 ) »
Danke für die Antwort

mein Prolem ist aber, dass es keinen Strukturtyp gibt, der alle benötigten Felder enthält.

Ich habe beispielsweise einen Strukturtyp mit den Feldern Name und Alter - den möchte ich austauschen gegen einen anderen Strukturtyp.
Ich habe aber nur einen alternativen Strukturtyp mit Name und Wohnort.
Zuletzt geändert von 1337 am 09.12.2013 08:41, insgesamt 2-mal geändert.

Re: Strukturtyp ausbauen

Beitrag von 1337 (ForumUser / 99 / 33 / 0 ) »
Das verstehe ich nicht ganz. ls_1 wird an die Tabelle gt_1 angehängt. Wieso brauche ich da ein MOVE-CORRESPONDING? ls_1 hat doch den gleichen TYPE wie gt_1 ?
Zuletzt geändert von 1337 am 09.12.2013 08:42, insgesamt 1-mal geändert.

Re: Strukturtyp ausbauen

Beitrag von Thanatos82 (Expert / 699 / 32 / 123 ) »
1337 hat geschrieben:
a-dead-trousers hat geschrieben:Kann es sein, dass du MOVE-CORRESPONDING suchst?
Umgelegt auf dein Beispiel:

Code: Alles auswählen.

data: gt_1 type standard table of XYZ with default key,
      ls_1 type XYZ,
      ls_2 type ABC.
move-corresponding ls_2 to ls_1.
append ls_1 to gt_1.
lg ADT
Das verstehe ich nicht ganz. ls_1 wird an die Tabelle gt_1 angehängt. Wieso brauche ich da ein MOVE-CORRESPONDING? ls_1 hat doch den gleichen TYPE wie gt_1 ?

Das ganze würde für mich momentan nur Sinn machen, wenn es folgendermaßen aussieht:

Code: Alles auswählen.

data: gt_1 type standard table of XYZ with default key,
      ls_1 type ABC,
      ls_2 type XYZ.
move-corresponding ls_2 to ls_1.
append ls_1 to gt_1.
Du kannst eine Struktur vom Typ XYZ aber nicht an eine Tabelle vom Typ ABC anhängen! ;) daher ist ADT's Beispiel schon richtig. Das was du da durcheinander bringst ist der Sinn des Befehls "MOVE-CORRESPONDING". die SAP-Hilfe schafft hierbei Klarheit! :) Mit dem Befehl "bewegst" du "korrespondierende" (also sich verstehende und somit gleiche) Inhalte von Feldern.

Das eigentliche Problem von dir habe ich allerdings noch nicht so richtig verstanden.
Du hast eine Struktur, die du durch eine andere ersetzen willst. Und die zweite Struktur soll sowohl die Felder der ersten Struktur, also auch neue, nur in der zweiten Struktur vorkommende Felder enthalten?

Folgende Benutzer bedankten sich beim Autor Thanatos82 für den Beitrag:
1337

Gruß,
der Matze

Re: Strukturtyp ausbauen

Beitrag von 1337 (ForumUser / 99 / 33 / 0 ) »
Zu dem Beispiel von ADT: Wenn ich nur ls_1 an gt_1 anhängen möchte brauche ich doch aber kein MOVE-CORRESPONDING? Es haben sowieso beide den gleichen Strukturtyp (XYZ)?
Das Move-Corresponding wird doch nur dann benötigt, wenn ich jetzt zusätzlich zu den Feldern in ls_1 auch noch die (passenden) Daten aus ls_2 mit anhängen möchte?
Zuletzt geändert von 1337 am 09.12.2013 08:43, insgesamt 1-mal geändert.

Re: Strukturtyp ausbauen

Beitrag von a-dead-trousers (Top Expert / 4483 / 231 / 1205 ) »
Nochmal:
Ich dachte du willst den Inhalt aus "ls_2" an die Tabelle "gt_1" anhängen.
Das geht nur, wenn der Zeilentyp der Tabelle und die hinzuzufügende Struktur gleich aufgebaut sind.
Also zuerst MOVE-CORRESPONDNG auf den richtigen Strukturtyp und dann erst APPEND an die Tabelle.

Wenn also "ls_2" aus "Name" und "Wohnort" besteht und "ls_1" aus "Name" und "Alter" besteht, landet in der Tabelle "gt_1" nur der "Name" aus "ls_2.

So, nun zu deinem Problem:
Du willst eine Art "Verwendungsnachweis", welche Felder aus der Struktur "ls_subj" im Endeffekt in der Methode "lr_subj->Interfaceklasse~get_attributes" benötigt bzw. verwendet werden.

Das funktioniert meines Wissens nur dann, wenn du DDIC (SE11) Strukturen verwendest. Zu diesen kannst du je Feld einen Verwendungsnachweis durchführen.
Alles was per TYPES BEGIN OF/END OF direkt im Program definiert wurde, kann man nur durch eine manuelle Analyse des Codings prüfen.
Wenn also dein ABC eine Struktur ist die in der SE11 angelegt wurde, musst du dort den Verwendnungsnachweis mit dem betroffenen Feld durchführen, dann weißt du wo es überall verwendet wird.
Leider lassen sich so nicht ALLE tatsächlichen Verwendungen finden, es vermittelt aber zumindest mal einen recht guten Überblick.

Dinge die unter Anderem nicht gefunden werden:
- Generische Typisierung
- Suchindex ist nicht aktuell (wird normalerweise einmal täglich aufgebaut)

lg ADT

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
1337

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: Strukturtyp ausbauen

Beitrag von black_adept (Top Expert / 4159 / 136 / 960 ) »
Hallo 1337,

kann es sein dass du etwas so simples wie LIKE

Code: Alles auswählen.

DATA: ls_1 TPYE ABC.
DATA: ls_2 LIKE ls_1.
DATA: LT_WASWEISSICH LIKE STANDARD TABLE OF ls_1 WITH NON-UNIQUE DEFAULT KEY.
suchst?

Sobald du jetzt bei ls_1 die Struktur änderst ändern sich all deine anderen Strukturen/Tabellen mit, da du dich auf keinen festen Typ sondern auf den Typ von ls_1 beziehst.

Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
1337

live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Strukturtyp ausbauen

Beitrag von 1337 (ForumUser / 99 / 33 / 0 ) »
Ganz genau das habe ich schon getan. Ich weiß jetzt wo ABC überall verwendet wird - damit habe ich auch kein Problem. Das Problem liegt daran, dass in einer bestimmten Klasse eine Struktur vom Typ ABC deklariert wird (z.B. DATA: ls_subj TYPE ABC) - und diese Struktur später in der Klasse weiterverendet wird. (Siehe den Codeauszug aus meinem letzten Post).
Zuletzt geändert von 1337 am 09.12.2013 08:46, insgesamt 1-mal geändert.

Re: Strukturtyp ausbauen

Beitrag von a-dead-trousers (Top Expert / 4483 / 231 / 1205 ) »
1337 hat geschrieben:Ganz genau das habe ich schon getan. Ich weiß jetzt wo ABC überall verwendet wird - damit habe ich auch kein Problem. Das Problem liegt daran, dass in einer bestimmten Klasse eine Struktur vom Typ ABC deklariert wird (z.B. DATA: ls_subj TYPE ABC) - und diese Struktur später in der Klasse weiterverendet wird.
Du kannst in der SE11 auch nach der Verwendung der einzelnen Felder suchen.
Im Code selbst kannst du mit '/-FELD/' suchen. (Suchfunktion im GUI, globale Suche, das / wird gebraucht um das - am Anfang zu maskieren)
1337 hat geschrieben:Wenn ls_subj später an eine Tabelle angehängt wird weiß ich ja nicht, welche Felder vom Strukturtyp ABC verwendet werden.
Ich würd mal sagen, dass alle "verwendet" werden. Um eine Zeile einer Tabelle hinzuzufügen, muss die Struktur (und auch die Felder) übereinstimmen.
1337 hat geschrieben:Andere Frage die mich gerade beschäftigt:

Code: Alles auswählen.

Data: ls_1 TYPE XYZ.
*        ls_2 wird nicht typisiert.

MOVE-CORRESPONDING ls_1 TO ls_2.
ls_2 = ls_1.
Bei ersterem müssen beide ("ls_1" und "ls_2") strukturiert sein.
Bei zweiterem müssen beide ("ls_1" und "ls_2") entweder ident oder zumindest zeichenartig (strukturiert) sein.

lg ADT

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
1337

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: Strukturtyp ausbauen

Beitrag von 1337 (ForumUser / 99 / 33 / 0 ) »
Vielen Dank, für die Antworten :)
Zuletzt geändert von 1337 am 09.12.2013 08:47, insgesamt 1-mal geändert.

Re: Strukturtyp ausbauen

Beitrag von JHM (Top Expert / 1225 / 2 / 204 ) »
1337 hat geschrieben:Aber ich sehe hier ja nicht welche Felder cs_struc von ABC wirklich verwendet.
Es gibt auch einen Verwendungsnachweis für Strukturfelder in der SE11. Oder du musst die ganze Klasse manuell durchsuchen.


Was mir bei der ganzen Aufgabenstellung fehlt ist der Grund für den Strukturtausch. Anscheinend ändert sich ja nicht nur der Name der Struktur, sondern auch die enthaltenen Felder sollen getauscht werden bzw. Feldnamen angepasst werden.

Folgende Benutzer bedankten sich beim Autor JHM für den Beitrag:
1337

Gruß Hendrik

Re: Strukturtyp ausbauen

Beitrag von 1337 (ForumUser / 99 / 33 / 0 ) »
JHM hat geschrieben:
1337 hat geschrieben:Aber ich sehe hier ja nicht welche Felder cs_struc von ABC wirklich verwendet.
Es gibt auch einen Verwendungsnachweis für Strukturfelder in der SE11. Oder du musst die ganze Klasse manuell durchsuchen.


Was mir bei der ganzen Aufgabenstellung fehlt ist der Grund für den Strukturtausch. Anscheinend ändert sich ja nicht nur der Name der Struktur, sondern auch die enthaltenen Felder sollen getauscht werden bzw. Feldnamen angepasst werden.
cs_struc wird in dieser Klasse ausschließlich in diesem Zusammenhang verwendet.

Was der Strukturtausch genau bringen soll weiß ich auch nicht..... hier wird lediglich eine Struktur gegen eine andere getauscht(die letztendlich ja genau die gleichen Felder benötigt wie die Struktur, die bereits verwendet wird).
An anderen Stellen wird aber auch "aktiv" ins Geschehen eingegriffen.

Re: Strukturtyp ausbauen

Beitrag von 1337 (ForumUser / 99 / 33 / 0 ) »
Kann mir niemand helfen?

Im einfachsten Fall steht ja da:

Code: Alles auswählen.

Data: ls_1 TYPE ABC.

ls_1-name = XYZ.
somit weiß ich genau, dass ABC das Feld "name" besitzt.



Wenn das Ganze jetzt aber folgendermaßen aussieht komme ich nicht weiter:

Code: Alles auswählen.

Data: ls_1 TYPE ABC,
         lt_1 TYPE ABC.

  If <aaa_data> is initial.
    CALL METHOD
      lr_bbb->klassenname~get_attributes
      CHANGING
        cs_struc = ls_1.

    APPEND ls_1 TO lt_1.

Ich habe in diesem Fall ABC einfach mal durch eine andere Struktur getauscht. Der Syntaxcheck wirft keinen Fehler... obs später wirklich durchlaufen würde weiß ich aber nicht.

Re: Strukturtyp ausbauen

Beitrag von Thanatos82 (Expert / 699 / 32 / 123 ) »
Hi,

meines Wissens nach dürfte dein Methodenaufruf nur dann funktionieren, wenn ls_1 den richtigen Strukturtypen hat. Wenn nicht, müsste eigentlich ein subrc zurückkommen.
Demzufolge bleibt dein ls_1 leer und du machst einen APPEND mit einer leeren Struktur. Das wirft zwar keinen Fehler, bringt dich aber auch nicht weiter. Also würde ich nach dem Methodenaufruf zumindest mal das subrc abfragen.

Es wäre sicherlich auch hilfreicher wenn wir hier nicht von ABC, aaa, usw. reden würden, sondern du die Klasse aus der du die Methode get_attributes genauer benennst. Da ich mal davon ausgehe, dass du da auf eine SAP-Klasse zugreifst hat bestimmt irgend jemand schonmal damit gearbeitet und kann dir gezielter weiterhelfen.

Folgende Benutzer bedankten sich beim Autor Thanatos82 für den Beitrag:
1337

Gruß,
der Matze

Vergleichbare Themen

6
Antw.
4198
Views
Strukturtyp in adobe Forms
von L0w-RiDer » 21.02.2022 11:21 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

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.