BAPI_PO_CREATE1; Bestellung anlegen; Kurzdump

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

BAPI_PO_CREATE1; Bestellung anlegen; Kurzdump

Beitrag von PBO (ForumUser / 6 / 0 / 0 ) »
Hallo zusammen,
in der Hoffnung das mir jemand helfen kann poste ich folgendes.
In unserem Haus soll nach dem Prozess PlanenBuchenBezahlen (PBB) folgender Teilschritt integriert werden: Beim anlegen einer Bestellung (ME21n) im Werk 100 soll ebenfalls, per USER-EXIT (über das BAPI_PO_CREATE1) eine Bestellung im Werk 200 angelegt werden. Im vorliegenden Fall funktioniert dies auch hervorragend wenn die Bestellung keine Meldung als Rückgabewerte enthält. Sind aber doch Meldungen vorhanden, z.B. Lieferdatum kann nicht eingehalten werden, dann öffnet ein Dialog zur Auswahl ob man sichern, bearbeiten oder abbrechen möchte. Nach Auswahl eines der drei Punkte erfolgt ein Kurzdump. An dieser Stelle scheitern alle Versuche die ursprüngliche Bestellung zu sichern oder zu bearbeiten.
Hat jemand eine Idee wie man dieses verhalten beeinflussen kann?

* Beginn Bestellung
DATA: POHEADER LIKE BAPIMEPOHEADER,
POHEADERX LIKE BAPIMEPOHEADERX,
POADDRVENDOR LIKE BAPIMEPOADDRVENDOR,
TESTRUN LIKE BAPIFLAG-BAPIFLAG,
MEMORY_UNCOMPLETE LIKE BAPIFLAG-BAPIFLAG,
MEMORY_COMPLETE LIKE BAPIFLAG-BAPIFLAG,
POEXPIMPHEADER LIKE BAPIEIKP,
POEXPIMPHEADERX LIKE BAPIEIKPX,
VERSIONS LIKE BAPIMEDCM ,
NO_MESSAGING LIKE BAPIFLAG-BAPIFLAG,
NO_MESSAGE_REQ LIKE BAPIFLAG-BAPIFLAG,
NO_AUTHORITY LIKE BAPIFLAG-BAPIFLAG,
NO_PRICE_FROM_PO LIKE BAPIFLAG-BAPIFLAG.
DATA: T_RETURN LIKE TABLE OF BAPIRET2 WITH HEADER LINE,
POITEM LIKE TABLE OF BAPIMEPOITEM WITH HEADER LINE,
POITEMX LIKE TABLE OF BAPIMEPOITEMX WITH HEADER LINE,
POSCHEDULE LIKE TABLE OF BAPIMEPOSCHEDULE WITH HEADER LINE,
POSCHEDULEX LIKE TABLE OF BAPIMEPOSCHEDULX WITH HEADER LINE,
POACCOUNT LIKE TABLE OF BAPIMEPOACCOUNT WITH HEADER LINE,
POACCOUNTX LIKE TABLE OF BAPIMEPOACCOUNTX WITH HEADER LINE.
DATA: EXPPURCHASEORDER LIKE BAPIMEPOHEADER-PO_NUMBER,
EXPHEADER LIKE BAPIMEPOHEADER,
EXPPOEXPIMPHEADER LIKE BAPIEIKP.

DATA: I_SYST LIKE SYST.

DATA: I_KNTTP LIKE EKPO-KNTTP VALUE '',
I_RETURN LIKE BAPIRET2-MESSAGE..

* 1. Eine externe Bestellung erkennt man am Kontierungstyp (F oder K)
LOOP AT TEKPO.
IF TEKPO-KNTTP EQ 'K' OR TEKPO-KNTTP EQ 'F'.
I_KNTTP = TEKPO-KNTTP.
ENDIF.
ENDLOOP.

IF I_KNTTP EQ 'K' AND I_EKKO-BSART EQ 'NB'.
* PURCHASEORDER.
" Kopfdaten übernehmen
POHEADER-COMP_CODE = '1000'.
POHEADER-DOC_TYPE = 'NEBP'.
* POHEADER-VENDOR = I_EKKO-LIFNR.
POHEADER-VENDOR = '0080453100'.
POHEADER-PURCH_ORG = '200'.
POHEADER-PUR_GROUP = '910'.

POHEADERX-COMP_CODE = 'X'.
POHEADERX-DOC_TYPE = 'X'.
POHEADERX-ITEM_INTVL = 'X'.
POHEADERX-VENDOR = 'X'.
POHEADERX-PMNTTRMS = 'X'.
POHEADERX-PURCH_ORG = 'X'.
POHEADERX-PUR_GROUP = 'X'.

" Positionsdaten
LOOP AT TEKPO.
POITEM-PO_ITEM = TEKPO-EBELP.
POITEM-MATERIAL = TEKPO-MATNR.
POITEM-EMATERIAL = TEKPO-MATNR.
POITEM-PLANT = '200'.
POITEM-MATL_GROUP = TEKPO-MATKL.
POITEM-QUANTITY = TEKPO-MENGE.
POITEM-PO_UNIT = TEKPO-MEINS.
POITEM-ACCTASSCAT = TEKPO-KNTTP.
APPEND POITEM.

POITEMX-PO_ITEM = TEKPO-EBELP.
POITEMX-PO_ITEMX = 'X'.
POITEMX-MATERIAL = 'X'.
POITEMX-PLANT = 'X'.
POITEMX-MATL_GROUP = 'X'.
POITEMX-QUANTITY = 'X'.
POITEMX-PO_UNIT = 'X'.
POITEMX-ACCTASSCAT = 'X'.
APPEND POITEMX.
ENDLOOP.

" Kontierungsdaten
LOOP AT TEKKN.
POACCOUNT-PO_ITEM = TEKKN-EBELP.
POACCOUNT-QUANTITY = TEKKN-MENGE.
POACCOUNT-COSTCENTER = TEKKN-KOSTL.
POACCOUNT-CO_AREA = '1000'.
POACCOUNT-GL_ACCOUNT = TEKKN-SAKTO.
APPEND POACCOUNT.

POACCOUNTX-PO_ITEM = TEKKN-EBELP.
POACCOUNTX-QUANTITY = 'X'.
POACCOUNTX-COSTCENTER = 'X'.
POACCOUNTX-CO_AREA = 'X'.
POACCOUNTX-GL_ACCOUNT = 'X'.
APPEND POACCOUNTX.
ENDLOOP.

" Einteilung
LOOP AT TEKET.
POSCHEDULE-PO_ITEM = TEKET-EBELP.
POSCHEDULE-DEL_DATCAT_EXT = 'T'.
WRITE TEKET-EINDT TO POSCHEDULE-DELIVERY_DATE.
POSCHEDULE-QUANTITY = TEKET-MENGE.
APPEND POSCHEDULE.

POSCHEDULEX-PO_ITEM = TEKET-EBELP.
POSCHEDULEX-PO_ITEMX = 'X'.
POSCHEDULEX-DEL_DATCAT_EXT = 'X'.
POSCHEDULEX-DELIVERY_DATE = 'X'.
POSCHEDULEX-QUANTITY = 'X'.
APPEND POSCHEDULEX.

ENDLOOP.
* Rette die Systemparameter
MOVE-CORRESPONDING SYST TO I_SYST.

CALL FUNCTION 'BAPI_PO_CREATE1'
EXPORTING
POHEADER = POHEADER
POHEADERX = POHEADERX
* POADDRVENDOR =
* TESTRUN =
MEMORY_UNCOMPLETE = ''
MEMORY_COMPLETE = ''
* POEXPIMPHEADER =
* POEXPIMPHEADERX =
* VERSIONS =
NO_MESSAGING = 'X'
NO_MESSAGE_REQ = 'X'
* NO_AUTHORITY =
* NO_PRICE_FROM_PO =
IMPORTING
EXPPURCHASEORDER = EXPPURCHASEORDER
* EXPHEADER =
* EXPPOEXPIMPHEADER =
TABLES
RETURN = T_RETURN
POITEM = POITEM
POITEMX = POITEMX
* POADDRDELIVERY =
POSCHEDULE = POSCHEDULE
POSCHEDULEX = POSCHEDULEX
POACCOUNT = POACCOUNT
* POACCOUNTPROFITSEGMENT =
POACCOUNTX = POACCOUNTX
* POCONDHEADER =
* POCONDHEADERX =
* POCOND =
* POCONDX =
* POLIMITS =
* POCONTRACTLIMITS =
* POSERVICES =
* POSRVACCESSVALUES =
* POSERVICESTEXT =
* EXTENSIONIN =
* EXTENSIONOUT =
* POEXPIMPITEM =
* POEXPIMPITEMX =
* POTEXTHEADER =
* POTEXTITEM =
* ALLVERSIONS =
* POPARTNER =
* POCOMPONENTS =
* POCOMPONENTSX =
* POSHIPPING =
* POSHIPPINGX =
* POSHIPPINGEXP =
.

* LOOP AT RETURN TO 1.
* IF RETURN-TYPE = 'E'.
* I_RETURN = RETURN-MESSAGE.
* ENDIF.
* ENDLOOP.


CALL FUNCTION 'Z_POPUP_RETURN_PARAM'
TABLES
RETURN = T_RETURN.
* Für Tests kein commit
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
* IMPORTING
* RETURN =
.

* PERFORM SALESORDER.
ENDIF.

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


Beitrag von babap (Expert / 681 / 1 / 1 ) »
Hallo,

ich muß nochmal fragen, wo "wir" mit dem Coding-Stück gerade sind.

Und dann gilt es rauszufinden, wer den Dump auslöst.

Ist es noch die Ursprungstransaktion, oder ist es das Coding im User-Exit oder ist es das nachfolgende BAPI??

Gruß
babap

Beitrag von babap (Expert / 681 / 1 / 1 ) »
Hallo nochmal,

falls "wir" in einem User-Exit sein sollten, so ist auf jeden Fall davon abzuraten, COMMIT WORK oder ROLLBACK WORK aufzurufen oder durchzuführen. Das bringt alle Programm, die noch irgendwie in der COMMIT-Schlange stehen ziemlich durcheinander ...

Gruß
babap

Beitrag von PBO (ForumUser / 6 / 0 / 0 ) »
Hallo,
das Coding befindet sich in der Erweiterung MM06E005, User-Exit EXIT_SAPMM06E_012 im Include ZXM06U43. Der Kurzdump tritt dann auf, nachdem das User-Exit verlassen wird, also wieder in der Ursprungstransaktion. Meine Vermutung ist, dass an irgendeiner Stelle der Bezug zur ersten Bestellung verloren geht.

P.S. Das Coding habe ich alternativ auch mal in ein ?normales? Programm gepackt und für sich alleine gestartet. Die Bestellung wurde fehlerfrei angelegt. Beim Anlegen einer Bestellung über BAPI wird offensichtlich kein Dialog geöffnet in dem man die Möglichkeit bekommt sichern, bearbeiten oder Abbruch auszuwählen, dies scheint nur bei Verwendung der GUI möglich zu sein.

Gruß, PBO

Beitrag von babap (Expert / 681 / 1 / 1 ) »
Hallo,

normalerweise ist es nicht erlaubt, innerhalb eines User-Exits ein POP-UP zu bringen, MESSAGES zu machen oder ROLLBACK WORK durchzuführen.

In dem geposteten Coding wird "gepopupt" und zum Schluß "back gerollt".
Ob der User-Exit das verträgt??

Gruß
babap
P.S. ein Pretty-Print würde die Übersichtlichkeit etwas steigern ...

Beitrag von PBO (ForumUser / 6 / 0 / 0 ) »
Hallo,
vielen Dank für die Antwort.
Die Lesbarkeit des Codings lässt zu wünschen übrig, aber Grund hierfür ist, dass im Anhang leider kein PDF-Format zugelassen wird. Deshalb hatte ich einfach den gesamten Quelltext per copy&paste hierher gepostet, sorry.

Die Popups und rollback sowie commit habe ich nun alle auskommentiert, das Verhalten hat sich leider nicht geändert. Zwischenzeitlich habe ich festgestellt, das es eine globale Struktur "ekko" gibt, die alle Kopfdaten zur Bestellung enthält. Verfolgen konnte ich dieses Verhalten.
1. Vor dem Aufruf des FB EXIT_SAPMM06E_012 ? die Struktur EKKO enthält Kopfdaten zur ursprünglichen Bestellung.
2. Während des USER-EXITS ist diese Struktur leer.
3. Nach Rücksprung aus dem USER-EXIT in die ursprüngliche Bestellung, also nach ENDFUNCTION (EXIT_SAPMM06E_012) ist diese Struktur gefüllt mit den Kopfdaten der (über das BAPI) angelegten neuen Bestellung.
Hier vermute ich die Verwirrung die dazu führt, dass die aufgetretenen Meldungen nicht mehr der dazugehörigen Bestellung zugeordnet werden können.

Gruß, PBO

Beitrag von uh (Specialist / 158 / 0 / 1 ) »
Hallo PBO,

wenn das BAPI so ist, wie die meisten BAPIs, wird ein Großteil der Dialog-programmteile durchlaufen. Wenn du im Dialog arbeitest und dann im gleichen Kontext das BAPI startest, kommt das System "durcheinander". D.h. Popups und Meldungen, die durch das BAPI unterdrückt werden sollten werden aufgerufen, weil gleichzeitig das Dialog-Programm durchlaufen wird.
Starte dein BAPI doch einfach im eigen Kontext / Task, dann bist du die Sorgen bestimmt los.

Seite 1 von 1

Vergleichbare Themen

1
Antw.
5499
Views
Bestellung mit Bapi Anlegen???
von thesaint » 11.08.2005 15:05 • Verfasst in ABAP® Core
3
Antw.
1623
Views
Kurzdump Bapi BAPI_PO_CREATE1 - Dump Überg. Kont.daten
von ralf.wenzel » 13.12.2007 12:22 • Verfasst in ABAP® Core
7
Antw.
3624
Views
Bestellung anlegen bei Hintergrundverarbeitung
von Google » 23.06.2005 13:54 • Verfasst in ABAP® Core
2
Antw.
4932
Views

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Aktuelle Forenbeiträge

Regex in where
vor einer Stunde von tar 8 / 176
Daten an Tabelle binden
Gestern von Bright4.5 3 / 1488

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 tar 8 / 176
Daten an Tabelle binden
Gestern von Bright4.5 3 / 1488

Unbeantwortete Forenbeiträge

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