BAPI_SALESORDER_CREATEFROMDAT2 liefert keine VBELN

SAP R/3 Vertrieb: Auftragsverwaltung, Versand und Transport, Fakturierung, Kreditmanagement, Außenhandel/Zoll...
8 Beiträge • Seite 1 von 1
8 Beiträge Seite 1 von 1

BAPI_SALESORDER_CREATEFROMDAT2 liefert keine VBELN

Beitrag von Julian_Feige (ForumUser / 5 / 0 / 0 ) »
Hallo,

ich muss eine Anpassung an einem Z-Programm zur Auftragsschnellerfassung vornehmen, welches folgenden FuBa den BAPI_SALESORDER_CREATEFROMDAT2 aufruft.
Derzeit wird dieser über einen anderen FUBA IN BACKGROUND TASK aufgerufen. Zukünftig soll er aber sofort aufgerufen werden.

Problem ist nun, dass wenn ich diesen normal (statt in BACKGROUND TASK) aufrufe das Rückgabefeld für die Belegnummer nicht gefüllt wird (SALESDOCUMENT),
obwohl ein neuer Beleg angelegt wird, den ich mir auch anschauen kann. Zudem scheinen manche Felder im angelegten Beleg nicht korrekt befüllt zu werden (übergebene Texte: ORDER_TEXT).

Ich kann mir keinen Reim darauf machen, warum sich der FuBa anders verhält, wenn ich diesen nicht IN BACKGROUND TASK aufrufe und warum z.B. die Belegnummer nicht zurückgegeben wird.
Über eure Hilfe würde ich sehr freuen.

Freundliche Grüße
Julian Feige

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


Re: BAPI_SALESORDER_CREATEFROMDAT2 liefert keine VBELN

Beitrag von Unit605 (Expert / 975 / 37 / 93 ) »
Versuch es mal mit '

Code: Alles auswählen.

SET UPDATE TASK LOCAL.
'

http://help.sap.com/abapdocu_70/de/ABAP ... _LOCAL.htm

Also ganz einfach wie vorher aufrufen, als es funktionierte, aber diesmal setzt Du das 'SET UPDATE TASK LOCAL.' davor und hinter Deinem BAPIaufruf einen Commit Work absetzen.

Re: BAPI_SALESORDER_CREATEFROMDAT2 liefert keine VBELN

Beitrag von Julian_Feige (ForumUser / 5 / 0 / 0 ) »
Vielen Dank für die schnelle Antwort, funktioniert aber leider nicht, VBELN wird nach wie vor nicht zurückgegeben.

Re: BAPI_SALESORDER_CREATEFROMDAT2 liefert keine VBELN

Beitrag von Unit605 (Expert / 975 / 37 / 93 ) »
Ein bisschen wenig Infos/Coding, was Du lieferst.

Hast Du die Return Tabelle ausgewertet und sichergestellt, dass es keinen Fehler im BAPI gab?

Eigentlich sollte die VBELN gefuellt sein, auch wenn es noch nicht auf der Datenbank mit 'call function 'BAPI_TRANSACTION_COMMIT'' ist.

Noch etwas: Bist Du sicher, dass man diesen BAPI in BACKGROUND TASK aufruft??????

Lass mal dieses BACKGROUND TASK weg.

Re: BAPI_SALESORDER_CREATEFROMDAT2 liefert keine VBELN

Beitrag von Julian_Feige (ForumUser / 5 / 0 / 0 ) »
Zunächst wird folgender FuBa in Background Task aufgerufen

Code: Alles auswählen.

  CALL FUNCTION 'Z_AUFTRAGSAERFASSUNG' IN BACKGROUND TASK
    EXPORTING
      order_header_in    = b_head
      erfasser                 = sy-uname
      wunschdatum        = rv45a-ketdat
      datumstyp             = rv45a-kprgbz
    TABLES
      return                   = b_return
      order_items_in      = b_pos
      order_partners      = b_partn
      order_schedules_in  = b_sched
      order_conditions_in = b_rab
      order_text          = b_text.
In diesem findet dann unmittelbar der Aufruf des BAPIs statt mit anschließender Bearbeitung der Rückgabeparameter:

Code: Alles auswählen.

  CALL FUNCTION 'BAPI_SALESORDER_CREATEFROMDAT2'
       EXPORTING
            ORDER_HEADER_IN     = ORDER_HEADER_IN
       IMPORTING
            SALESDOCUMENT       = z_vbeln
       TABLES
            RETURN              = RETURN
            ORDER_ITEMS_IN      = ORDER_ITEMS_IN
            ORDER_PARTNERS      = ORDER_PARTNERS
            ORDER_SCHEDULES_IN  = ORDER_SCHEDULES_IN
            ORDER_CONDITIONS_IN = ORDER_CONDITIONS_IN
            ORDER_TEXT          = ORDER_TEXT
Das Feld Z_VBELN wird dabei nicht gefüllt, wenn der BAPI nicht im Background task aufgerufen wird.
Trotzdem wird ein beleg erstellt. RETURN sieht wie folgt aus:

TYPE ID NUMBER MESSAGE
S V4 233 SALES_HEADER_IN erfolgreich verarbeitet
S V4 233 SALES_ITEM_IN erfolgreich verarbeitet
S V4 311 wurde gesichert

Vor "wurde gesichert" sollte m.E. die Belegnummer stehen.

Das BACKGROUND TASK würde ich ja gerne weglassen (ist ja genau die Anforderung). Nur wenn ich das weglasse, funktioniert es nicht mehr
[Z_VBELN wird bei IN BACKGROUND TASK gefüllt, bleibt aber leer, wenn IN BACKGROUND TASK weggelassen wird].

Re: BAPI_SALESORDER_CREATEFROMDAT2 liefert keine VBELN

Beitrag von JHM (Top Expert / 1189 / 1 / 196 ) »
Julian_Feige hat geschrieben:Das BACKGROUND TASK würde ich ja gerne weglassen (ist ja genau die Anforderung). Nur wenn ich das weglasse, funktioniert es nicht mehr
[Z_VBELN wird bei IN BACKGROUND TASK gefüllt, bleibt aber leer, wenn IN BACKGROUND TASK weggelassen wird].
Du rufst also den 'Z_AUFTRAGSAERFASSUNG' jetzt ohne den Zusatz in BACKGROUND TASK auf?

Wenn ja, wie wird dann Z_VBELN an den Aufrufer des 'Z_AUFTRAGSAERFASSUNG' zurückgegeben? Es gibt dafür ja keinen Parameter.
Oder wird Z_VBELN bereits im 'Z_AUFTRAGSAERFASSUNG' beim BAPI-CALL nicht zurück gegeben?
Gruß Hendrik

Re: BAPI_SALESORDER_CREATEFROMDAT2 liefert keine VBELN

Beitrag von Julian_Feige (ForumUser / 5 / 0 / 0 ) »
Z_VBELN wird nach Aufruf des BAPI_SALESORDER_CREATEFROMDAT2 weiter verarbeitet, muss aber nicht an Z_AUFTRAGSAERFASSUNG zurückgegeben werden.

Problem ist aber, dass Z_VBELN nach Aufruf von BAPI_SALESORDER_CREATEFROMDAT2 nicht gefüllt wird.

Re: BAPI_SALESORDER_CREATEFROMDAT2 liefert keine VBELN

Beitrag von Julian_Feige (ForumUser / 5 / 0 / 0 ) »
Ich habe nun den Baustein mit und ohne IN BACKGROUND TASK im Debugger genau verfolgt.
Am Ende des Aufrufs von SD_SALES_DOCUMENT_SAVE bzw. unmittelbar nach dem Verlassen der Form-Routine Beleg-Sichern
tritt ein unterschiedliches Verhalten auf.

Code: Alles auswählen.

* Save the document
* Then clear and refresh all workareas
ENHANCEMENT-POINT SD_SALES_DOCUMENT_SAVE_03 SPOTS ES_SAPLV45A.
  PERFORM BELEG_SICHERN(SAPMV45A) USING SYNCHRON
                                        SY-SUBRC.
ENHANCEMENT-POINT SD_SALES_DOCUMENT_SAVE_04 SPOTS ES_SAPLV45A.
  EVBAK = OVBAK.
  EFXVBEP = FXVBEP.
  efxvbap = fxvbap.
  efxvbpa = fxvbpa.
  STATUS_BUFF_INIT = CHARX.
  CLEAR CALL_BAPI_SAVE.

ENDFUNCTION.
Es ist hierbei zu beachten, dass in der letzten Zeile der Form-Routine Beleg_Sichern
in beiden Fällen die Struktur OVBAK gefüllt und die Struktur VBAK leer ist.

Bei mit Background-Task bleibt dies so, OVBAK ist gefüllt und wird an EVBAK übergeben, welches die Belegnummer
zurück an den BAPI-Aufruf gibt

Bei ohne Background-Task wird aus irgendeinem Grund nach der letzten Zeilen der Form-Routine Beleg_Sichern
die inhalte der Strukturen OVBAK und VBAK vertauscht. Folge: EVBAK wird mit der leeren Struktur gefüllt.
Belegnummer wird nicht an den Aufruf zurückgegeben.

Gibt es irgendeine Erklärung für dieses Verhalten?

Viele Grüße
Stefan

Seite 1 von 1

Vergleichbare Themen

0
Antw.
3198
Views
BAPI SalesOrder CreateFromDat2 - Konditionen gesperrt?
von juvi123 » 15.07.2009 12:41 • Verfasst in Java & SAP®
0
Antw.
3745
Views
BAPI SalesOrder CreateFromDat2 - ExtensionIn Parameter
von juvi123 » 15.07.2009 12:48 • Verfasst in Java & SAP®
2
Antw.
3639
Views
1
Antw.
211
Views
0
Antw.
843
Views
RPTCORTMAIL liefert falsche Zeiterfassungsfehler
von Dyrdek » 30.11.2016 08:58 • Verfasst in ABAP® Core

Über diesen Beitrag


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.