Kundeneigene Fleder

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

Kundeneigene Fleder

Beitrag von jonas1996 (ForumUser / 24 / 7 / 0 ) »
Guten Tag Com

Ich heisse jonas und bin 17 jahra alt und arbeite in der Herbert Ospelt Anstalt in der SAP abteilung als Lehrling.
Ich habe bereits den SAP Kurs BC400 besucht.

Nun habe ich die Aufgabe ein Kundeneigenes Feld zu befüllen.
IST STAND
Im Fakturavorrat (transaktion VF04) soll ein neues Feld eingebaut werden, LIKP-WADAT.
Zunächst habe ich die Trägerstruktur VKDFIF um ein entsprechendes Feld für Warenausgangsdatum erweitert
Dazu habe ich im include VKDFIZ das Feld ZWADAT hinzufügen und den Typ WADAK zuweisen.

WAS MIR FEHLT
Versorgung dieses Feldes ZWADAT über Zuweisung des Wertes aus Tabelle LIKP, Feld WADAT.
EIGENER VERSUCH
Ich habe mir gedacht ich könnte es mit einem select befehl lösen :

Code: Alles auswählen.

*&---------------------------------------------------------------------*
*&  Include           ZXV6PU08
*&---------------------------------------------------------------------*
*"*"Lokale Schnittstelle:
*"       TABLES
*"              C_VKDFIF STRUCTURE  VKDFIF
* Autor: JOMA
* Datum: 13.12.2013
* KI23466
* Zu jeder Lieferung das entsprechende Planwarenausgangsdatum hinzulesen
break joma.

SELECT  Wadat
  FROM likp
  into C_VKDFIF-zwadat.
endselect.
Ich habe bereits einige nachforschungen angestellt und bin darauf gekommen das es wahrscheinlich mit einem Bapi funktionieren könnte. Ich weiss jedoch nicht welches :S.
Ich freue mich auf eine gute Antwort und freue mich wenn ihr eine Gute Lösung kennt.

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


Re: Kundeneigene Fleder

Beitrag von Barney (Specialist / 104 / 20 / 9 ) »
Also wenn ich das richtig sehe, bist Du doch schon im Exit für die Transaktion VF04. Die Struktur C_VKDFIF ist doch der Changing-Parameter der Customer-Funktion - Du bist also auf einen guten Weg. Es reicht also aus, wenn Du den Wert des Feldes ZWADAT im Exit änderst. Dein Select ist da aber nicht hilfreich, weil Du ohne Selektionsbedingungen die ganze Datenbank abfragst und doch die Select-Schleife wird das Feld x-mal innerhalb des Exits geändert, bevor der Exit verlassen wird. Und das Ergebnis ist nur zufällig, weil am Ende der letzte gefundene Eintrag genommen wird.

Überlegt Dir also nach welchen Kriterien Du die Lieferung finden willst und baue dies als WHERE-Bedingung in Deinen Select ein.

Tot ziens

Folgende Benutzer bedankten sich beim Autor Barney für den Beitrag:
jonas1996


Re: Kundeneigene Fleder

Beitrag von jonas1996 (ForumUser / 24 / 7 / 0 ) »
Barney hat geschrieben:Also wenn ich das richtig sehe, bist Du doch schon im Exit für die Transaktion VF04. Die Struktur C_VKDFIF ist doch der Changing-Parameter der Customer-Funktion - Du bist also auf einen guten Weg. Es reicht also aus, wenn Du den Wert des Feldes ZWADAT im Exit änderst. Dein Select ist da aber nicht hilfreich, weil Du ohne Selektionsbedingungen die ganze Datenbank abfragst und doch die Select-Schleife wird das Feld x-mal innerhalb des Exits geändert, bevor der Exit verlassen wird. Und das Ergebnis ist nur zufällig, weil am Ende der letzte gefundene Eintrag genommen wird.

Überlegt Dir also nach welchen Kriterien Du die Lieferung finden willst und baue dies als WHERE-Bedingung in Deinen Select ein.

Tot ziens
Hallo Barney

Also muss ich eine where bedingung zu meinem select hinzufügen der es Eindeutig macht.
Heisst das ich muss im where auf die übereinstimmung der primärschlüsse achten ?
wie zum Beispiel so

Code: Alles auswählen.

*&---------------------------------------------------------------------*
*&  Include           ZXV6PU08
*&---------------------------------------------------------------------*
*"*"Lokale Schnittstelle:
*"       TABLES
*"              C_VKDFIF STRUCTURE  VKDFIF
* Autor: JOMA
* Datum: 13.12.2013
* KI23466
* Zu jeder Lieferung das entsprechende Planwarenausgangsdatum hinzulesen
break joma.

SELECT  Wadat
  FROM likp
  into C_VKDFIF-zwadat
  where likp-vbeln = C_VKDFIF-vbeln.
endselect.
wenn ich es aber so lösen würde gibt er mir den Fehler likp-vbeln ist unbekannt zurück.
Darum habe ich mir gedacht ich könnte die likp in eine interne tabelle loopen, jedoch hat das auch nicht funktioniert.

Re: Kundeneigene Fleder

Beitrag von black_adept (Top Expert / 4099 / 128 / 941 ) »
jonas1996 hat geschrieben:

Code: Alles auswählen.

SELECT  Wadat
  FROM likp
  into C_VKDFIF-zwadat
  where likp-vbeln = C_VKDFIF-vbeln.
endselect.

Code: Alles auswählen.

SELECT SINGLE Wadat
  FROM likp
  into C_VKDFIF-zwadat
  where vbeln = C_VKDFIF-vbeln.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Kundeneigene Fleder

Beitrag von jonas1996 (ForumUser / 24 / 7 / 0 ) »
black_adept hat geschrieben:
jonas1996 hat geschrieben:

Code: Alles auswählen.

SELECT  Wadat
  FROM likp
  into C_VKDFIF-zwadat
  where likp-vbeln = C_VKDFIF-vbeln.
endselect.

Code: Alles auswählen.

SELECT SINGLE Wadat
  FROM likp
  into C_VKDFIF-zwadat
  where vbeln = C_VKDFIF-vbeln.
Ich habe jetzt den code angepasst nun findet er keine Syntaxfehler mehr und im debugger ist auch ersichtlich das ein datum in die variable C_VKDFIF-zwadat gespeichert wird.
Aber wen ich dann über die transaction vf04 einsteige und es teste bleibt die ganze spalte leer.

Re: Kundeneigene Fleder

Beitrag von black_adept (Top Expert / 4099 / 128 / 941 ) »
Hallo Jonas,

beachte, dass der Übergabeparameter eine Tabelle (mit Kopfzeile) ist! Momentan änderst du Letztere - was du aber schlussendlich möchtest ist eine Änderung an der Tabelle selber.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Kundeneigene Fleder

Beitrag von jonas1996 (ForumUser / 24 / 7 / 0 ) »
black_adept hat geschrieben:Hallo Jonas,

beachte, dass der Übergabeparameter eine Tabelle (mit Kopfzeile) ist! Momentan änderst du Letztere - was du aber schlussendlich möchtest ist eine Änderung an der Tabelle selber.
Hallo Stefan

Ich habe mir jetzt nochmal Gedanken drüber gemacht. Ich habe eig gedacht das die erwartete änderung durch den select befehl durchgeführt wird.
Weil der into zusatz sollte es meiner meinung nach in diese Tabelle hinein speichern oder nicht ?
Wie soll ich den dies bewerkstelligen?

Code: Alles auswählen.

*&---------------------------------------------------------------------*
*&  Include           ZXV6PU08
*&---------------------------------------------------------------------*
*"*"Lokale Schnittstelle:
*"       TABLES
*"              C_VKDFIF STRUCTURE  VKDFIF
* Autor: JOMA
* Datum: 13.12.2013
* KI23466
* Zu jeder Lieferung das entsprechende Planwarenausgangsdatum hinzulesen
break joma.

SELECT Wadat
  FROM likp
  into C_VKDFIF-zwadat
  where vbeln = C_VKDFIF-vbeln. 
ENDSELECT.

Re: Kundeneigene Fleder

Beitrag von JHM (Top Expert / 1197 / 1 / 197 ) »
jonas1996 hat geschrieben:Weil der into zusatz sollte es meiner meinung nach in diese Tabelle hinein speichern oder nicht ?
Schau dir mal die Hilfe zum INTO und INTO TABLE an. Ansich machst du es schon richtig mit dem INTO.
jonas1996 hat geschrieben: Wie soll ich den dies bewerkstelligen?
C_VKDFIF ist eine interne Tabelle mit Kopfzeile. Es handelt sich also eigentlich um zwei Variablen, die unter dem selben Namen angesprochen werden. Dein Select liest das WADAT in die Kopfzeile C_VKDFIF. Du mußt diese Änderung wahrscheinlich noch in die interne Tabelle übernehmen (MODIFY ....).

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

Gruß Hendrik

Re: Kundeneigene Fleder

Beitrag von jonas1996 (ForumUser / 24 / 7 / 0 ) »
JHM hat geschrieben:
jonas1996 hat geschrieben:Weil der into zusatz sollte es meiner meinung nach in diese Tabelle hinein speichern oder nicht ?
Schau dir mal die Hilfe zum INTO und INTO TABLE an. Ansich machst du es schon richtig mit dem INTO.
jonas1996 hat geschrieben: Wie soll ich den dies bewerkstelligen?
C_VKDFIF ist eine interne Tabelle mit Kopfzeile. Es handelt sich also eigentlich um zwei Variablen, die unter dem selben Namen angesprochen werden. Dein Select liest das WADAT in die Kopfzeile C_VKDFIF. Du mußt diese Änderung wahrscheinlich noch in die interne Tabelle übernehmen (MODIFY ....).
Hallo

Ich habe jetzt 2 stunden an diesem modify befehl rum gebastelt komme aber auf keine Lösung. Das verständniss habe ich nur fehlt es an der umsetztung ich weiss das mein select befehl aus likp WADAT liest und in C_VKDFIF-zwadat speichert (interne tabelle) nun sollte ich nur noch das ganze in den arbeitsbereich speichern der C_VKDFIF[] heisst also gleich wie die interne tabelle. aber genau da liegt mein problem.
Hier meine Lösung auf die ich zum schluss gekommen bin. (funktionirt nicht)
Fehler: "ZWADAT" ist keine interne tabelle

Code: Alles auswählen.

*&---------------------------------------------------------------------*
*&  Include           ZXV6PU08
*&---------------------------------------------------------------------*
*"*"Lokale Schnittstelle:
*"       TABLES
*"              C_VKDFIF STRUCTURE  VKDFIF
* Autor: JOMA
* Datum: 13.12.2013
* KI23466
* Zu jeder Lieferung das entsprechende Planwarenausgangsdatum hinzulesen
break joma.

SELECT Wadat
  FROM likp
  into C_VKDFIF-zwadat
  where vbeln = C_VKDFIF-vbeln.
ENDSELECT.


MODIFY C_VKDFIF-zwadat[] from C_VKDFIF-zwadat.

Re: Kundeneigene Fleder

Beitrag von Unit605 (Expert / 975 / 37 / 93 ) »
jonas1996 hat geschrieben: Fehler: "ZWADAT" ist keine interne tabelle
ZWADAT ist ja auch keine interne Tabelle, sondern nur ein FELD in einer internen Tabelle mit dem Namen C_VKDFIF.

Re: Kundeneigene Fleder

Beitrag von ewx (Top Expert / 4849 / 313 / 642 ) »
Du musst die interne Tabelle mit einem Loop bearbeiten.
Am besten mittels LOOP ... ASSIGNING, dann sparst du nämlich den MODIFY.
Also entweder:

Code: Alles auswählen.

LOOP AT c_vkdfif. 
SELECT ... INTO c_vkdfif-zwadat.
MODIFY c_vkdfif.
oder

Code: Alles auswählen.

LOOP AT c_vkdfif ASSIGNING <c_vkdfif>.
SELECT ... INTO <c_vkdfif>-zwadat.

Re: Kundeneigene Fleder

Beitrag von Somani (ForumUser / 81 / 12 / 20 ) »
Hallo Jonas

Ich hab mir den Thread von oben nach unten durchgelesen. Ein paar Dinge die hier mal geschrieben aber nicht weiter erklärt wurden möchte ich an der Stelle noch mal nachholen :)

1.) Benutze wenn möglich 'select single' anstelle von select-endselect. Das dient der Performance des ganzen - zumal du ja den kompletten Key abfrägst (LIKP hat nur vbeln).
2.) Mein Vorredner redet von LOOP ... ASSIGNING und MODIFY - Je nachdem aus welcher Ecke der Programmierung du kommst ist das komplett neuland.

LOOP ist ja noch klar. Ein "klassischer" LOOP INTO funktioniert so wie in den meisten Programmiersprachen. Du Loopst über den tiefen Array in einen flachen und machst irgendwas damit. Wenn du willst, dass die geänderten Daten vom flachen in den den tiefen Array zurück übertragen werden musst du das mittels Modify machen. Bei Tabellen mit Kopfzeile kannst das into wa weglassen - die Funktionsweise beliebt bestehen. Beispiel:

Code: Alles auswählen.

* Entries: 100 (outer table), 20 (inner table)
* The entries to be modified: 50
* Actually, only the component FLAG is updated.
* However, the complete lines are moved.

LOOP AT ITAB INTO WA.
  I = SY-TABIX MOD 2.
  IF I = 0.
    WA-FLAG = 'X'.
    MODIFY ITAB FROM WA.
  ENDIF.
ENDLOOP.
Das schöne an ABAP ist, dass es sogenannte FIELD-SYMBOLS gibt (bitte die ABAP Hilfe dazu befragen). Kurz zusammengefasst kannst du dir ein Field-Symbol vorstellen wie einen Pointer in C. Anstelle dass du hier während des Loops die Daten in eine neue Struktur "kopierst" wird lediglich der "Zeiger" auf die aktuelle Zeile deiner itab gelegt. Änderst du jetzt ein Feld aus dem FS (Field-Symbol) dann ändert sich auch unmittelbar der Wert in der Loop-Tabelle. Das selbe Beispiel:

Code: Alles auswählen.

* Entries: 100 (outer table), 20 (inner table)
* Entries to be modified: 50
* The component FLAG is updated directly.

LOOP AT ITAB ASSIGNING <WA>.
  I = SY-TABIX MOD 2.
  IF I = 0.
    <WA>-FLAG = 'X'.
  ENDIF.
ENDLOOP.
Wann immer du einen Loop machst mit dem klaren Ziel darin die Daten anzupassen/anzureichern empfiehlt sich ein Field-Symbol (spart dir das modify und bringt Performance). SAP schreibt dazu offiziell:
Accessing the table entries directly in a "LOOP ... ASSIGNING ..."
accelerates the task of updating a set of lines of an internal table
considerably. Especially if inner tables must not be moved the
speed-up is high.
Freundliche Grüsse
Reto

Re: Kundeneigene Fleder

Beitrag von ralf.wenzel (Top Expert / 3935 / 200 / 281 ) »
Man sollte aber wenigstens dazuschreiben, dass Tabellen mit Kopfzeilen obsolet sind.
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Kundeneigene Fleder

Beitrag von jonas1996 (ForumUser / 24 / 7 / 0 ) »
Ich habe das ganze nun zum lösen gebracht.

Code: Alles auswählen.

*&---------------------------------------------------------------------*
*&  Include           ZXV6PU08
*&---------------------------------------------------------------------*
*"*"Lokale Schnittstelle:
*"       TABLES
*"              C_VKDFIF STRUCTURE  VKDFIF
* Autor: JOMA
* Datum: 13.12.2013
* KI23466
* Zu jeder Lieferung das entsprechende Planwarenausgangsdatum hinzulesen
break joma.
FIELD-SYMBOLS: <fs> type vkdfif.
ASSIGN C_vKDFIF TO <FS>.
LOOP AT c_VKDFIF
into <fs>.
SELECT SINGLE WADAT
  from likp
  into <fs>-zwadat
  WHERE VBELN = <FS>-VBELN.
  MODIFY c_vkdfif from <fs> INDEX sy-tabix.
ENDLOOP.
Weiss jamand gerade wie ich das neue Feld immer anzeige und nicht immer unter Anzeigevariante dies einstellen muss ?
Ich bedanke mich für eure Hilfe

Liebe Grüsse
Jonas

Re: Kundeneigene Fleder

Beitrag von Alexander D. (Expert / 682 / 30 / 84 ) »
hallo Jonas,

dein Code könnte noch ein wenig schlanker sein. Das Zuweisen des Feldsymbols kannst du direkt beim LOOP machen und ein MODIFY ist bei der Arbeit mit Feldsymbolen ebenfalls überflüssig - die Änderungen schlagen sofort durch. Probier mal ob dieser Code hier es genau so tut:

Code: Alles auswählen.

FIELD-SYMBOLS: <fs> TYPE vkdfif.
LOOP AT c_VKDFIF ASSIGNING <fs>.
SELECT SINGLE WADAT
  FROM likp
  INTO <fs>-zwadat
  WHERE VBELN = <FS>-VBELN.
ENDLOOP.
ich weiss jetzt nicht aus dem Kopf wie VF04 aussieht, wird da ein ALV-Grid verwendet? Falls ja, dann könntest du das Feld in eine Anzeigevariante aufnehmen und diese als Standard speichern. Die Variante wird dann automatisch beim Ausgeben des ALV´s gewählt
schöne Grüße
Alexander

ECC 6.0 EHP 7

Seite 1 von 1

Vergleichbare Themen

3
Antw.
652
Views
Kundeneigene Felder
von Rabea1103 » 03.06.2021 08:41 • Verfasst in ABAP® für Anfänger
17
Antw.
1890
Views
Best Pratices: Kundeneigene Pakethierarchie
von ralf.wenzel » 03.03.2021 14:43 • Verfasst in ABAP® Core
3
Antw.
6436
Views
kundeneigene Benutzerparameter anlegen
von meddok » 27.02.2006 12:51 • Verfasst in SAP - Allgemeines
2
Antw.
4384
Views
Kundeneigene Felder in Kostenstellen-Stammdaten
von Walhalla » 06.04.2017 16:19 • Verfasst in Financials
4
Antw.
2574
Views
Versionsmanagement für (kundeneigene) Customizing-Tabellen
von m.andreschak » 20.04.2020 14:35 • Verfasst in ABAP® Core

Aktuelle Forenbeiträge

Regex in where
vor einer Stunde von edwin 7 / 162
Daten an Tabelle binden
vor 15 Stunden von Bright4.5 3 / 1485

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

Regex in where
vor einer Stunde von edwin 7 / 162
Daten an Tabelle binden
vor 15 Stunden von Bright4.5 3 / 1485

Unbeantwortete Forenbeiträge

aRFC im OO-Kontext
vor 5 Wochen von ralf.wenzel 1 / 3261
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9821