Code: Alles auswählen.
*---------------------------------------------------------------------*
* FORM U901
*---------------------------------------------------------------------*
* Populate Item Text (BSEG-SGTXT)
*---------------------------------------------------------------------*
FORM U901.
DATA: l_vtweg TYPE vtweg,
lv_vbeln TYPE vbrk-vbeln.
IF BSEG-SGTXT IS INITIAL.
SELECT SINGLE vtweg FROM vbrk
INTO l_vtweg
WHERE vbeln = lv_vbeln.
IF sy-subrc = 0.
IF l_vtweg = '30' OR l_vtweg = '40'.
BSEG-SGTXT = 'Test'.
ENDIF.
ENDIF.
ENDIF.
ENDFORM.
Oh stimmt. Danke!black_adept hat geschrieben:Weil du keinen Beleg in lv_vbeln mitgibst
Code: Alles auswählen.
lv_vbeln = bseg-vbeln.
IF BSEG-SGTXT IS INITIAL.
SELECT SINGLE vtweg FROM vbrk
INTO l_vtweg
WHERE vbeln = lv_vbeln.
Code: Alles auswählen.
FORM u901 CHANGING b_result.
b_result = hier kommt dann die Berechnung
ENDFORM.
Ich habe als Exit Type "C_EXIT_PARAM_FIELD" gewählt. Ist das überhaupt richtig?black_adept hat geschrieben:Hmm - ich glaube den Problem sitzt tiefer.
Wenn ich mir meine Substitution auf der Belegzeile so anschaue stelle ich fest, dass ich für Substitutionen auf Belegzeile die Userexitroutine mit Übergabeparameter definiert habe, in den ich den geänderten Wert reinstelleDie BSEG direkt zu ändern sollte man eigentlich auch nicht machen - die Userexitschnittstelle ist ja nicht ohne Grund da sondern um das Coding hier vom Rest der Verarbeitung abzugrenzen.Code: Alles auswählen.
FORM u901 CHANGING b_result. b_result = hier kommt dann die Berechnung ENDFORM.
Hallo Wolfgang,wreichelt hat geschrieben:Hallo,
schau mal ob das Dir weiter hilft:
http://sapmandoo.over-blog.de/article-w ... 93040.html
Gruß Wolfgang
DAUAbap hat geschrieben:Ich habe als Exit Type "C_EXIT_PARAM_FIELD" gewählt. Ist das überhaupt richtig?
Wäre es bezüglich der direkten Änderung von BSEG besser ein MOVE..TO.. zu verwenden?
Sobald ich im Debugger an der Stelle des Selects SELECT SINGLE vtweg FROM vbrk angekommen bin, gibt es schon den subr-c 4. Das ist es, was mich stutzig macht..
Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
DAUAbap
Ich habe im Netz nach Beispielen gesucht und mein Coding danach orientiert. Aber leider wird in den Beispielen die BSEG immer direkt verändert.black_adept hat geschrieben:Nein - gar nicht an der BSEG rumfummeln sondern den Rückgabewert verändern. Darum hast du ja C_EXIT_PARAM_FIELD gesetzt
Oder immer gern genommen: Führende Nullen bzw. fehlende führende Nullen.black_adept hat geschrieben:.......
Wenn du einen SY-Subrc von 4 erhältst dann ist deine Selektion falsch. Mach doch mal parallel eine SE16 auf und kopiere die Daten die dein Selekt da machen soll in die SelMaske und schau, ob du hier überhaupt etwas selektiert bekommst. Tipp: Falscher Mandant oder Felder wurden nicht sauber übertragen und beim Select wird mit "leer" selektiert [/list]
Jetzt weiß ich, wo der Fehler liegt!black_adept hat geschrieben:
- Wenn du einen SY-Subrc von 4 erhältst dann ist deine Selektion falsch. Mach doch mal parallel eine SE16 auf und kopiere die Daten die dein Selekt da machen soll in die SelMaske und schau, ob du hier überhaupt etwas selektiert bekommst. Tipp: Falscher Mandant oder Felder wurden nicht sauber übertragen und beim Select wird mit "leer" selektiert
Sorry, nun weiß ich, dass dies eine relevante Information warblack_adept hat geschrieben:Aha - so langsam rückst du also mit den wesentlichen Informationen raus.
In diesem Fall solltest du keine Substitution machen sondern die SMOD-Erweiterung SDVFX002 ( = Userexit Debitorenzeile bei Übergabe an das Rechnungswesen ) verwenden. Da ist in den Übergabeparametern die VBRK drin ( auch wenn die zu dem Zeitpunkt noch nicht auf der DB ist ) und gerade der von dir zu ändernde Langtext ist in der Struktur XACCIT mit den änderbaren Feldern drin.
Code: Alles auswählen.
IF XACCIT-vtweg = '30' OR XACCIT-vtweg = '40'.
XACCIT-SGTXT = 'Test'.
ENDIF.