Neue Bestellposition per User Exit / BAdI einfügen

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

Neue Bestellposition per User Exit / BAdI einfügen

Beitrag von tgb (ForumUser / 3 / 1 / 0 ) »
Hallo zusammen,

ich habe aktuell die Anforderung, eine Art Stücklistenauflösung in der Einkaufsbestellung (kein Retail) einzustellen:
Sobald ein Hauptartikel aus einer Materialstückliste in der Bestellung erfasst wird, soll die Komponente aus der StüLi als zweite Position in der Bestellung automatisch vom System hinzugefügt werden.

Da es im Standard scheinbar keine solche Lösung gibt, hab ich mir das BAdI ME_PROCESS_PO_CUST genauer angeschaut, eine Implementierung angelegt und mit den Methoden PROCESS_ITEM und PROCESS_HEADER herumexperimentiert. Leider ohne großen Erfolg, ich bekomme einfach die zweite Position nicht in die ME21N. Wahrscheinlich fehlt mir an der Stelle das entsprechende Abap-OO-Wissen, hab mich in den letzten Jahren mehr mit prozeduraler Programmierung beschäftigt.

Kennt jemand einen vergleichbaren User-Exit, mit dem man (per "Standard ABAP") Bestellpositionen hinzufügen kann? Oder alternativ funktionierenden Beispielcode für ME_PROCESS_PO_CUST? Ich habe im SCN und in anderen Foren schon einige Empfehlungen für dieses BAdI gesehen, aber nie eine komplett funktionierende Lösung.

Vielen Dank für Eure Hilfe

Tom

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


Re: Neue Bestellposition per User Exit / BAdI einfügen

Beitrag von black_adept (Top Expert / 4099 / 128 / 941 ) »
ME_PROCESS_PO_CUST ist schon die richtige Stelle.
Beispielcoding kommt via PM, da zu viele Firmenspezifika zu sehen sind und ich momentan nicht an dem Coding rumfummeln kann ohne andere Leute zu stören.

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

live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Neue Bestellposition per User Exit / BAdI einfügen

Beitrag von larsi (ForumUser / 47 / 2 / 11 ) »
Hallo zusammen,

da mich das Thema interessiert und ich verstehen kann, dass man hier nicht immer Quellcode aufgrund zu vieler "verräterischer" Firmenspezifika einfach so posten kann, habe ich dennoch die Bitte, den Ansatz kurz zu skizzieren. Genügt es letztendlich über das Interface IF_PURCHASE_ORDER_MM die Methode CREATE_ITEM zu rufen, und die neue Position dann manuell über IF_PURCHASE_ORDER_ITEM_MM->SET_DATA zu befüllen oder muss man hier mit anderen Tricks arbeiten?

Wenn der o.g. Weg derjenigewelche ist, funktionieren dann auch andere Ableitungen von Werten (z.B. über einen Infosatz, Rahmenvertrag etc.) automatisch (sprich, macht das dann der Standard) oder müsste man sich da dann doch selber drum kümmern?

Viele Grüße,
Lars

Re: Neue Bestellposition per User Exit / BAdI einfügen

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

der von dir skizzierte Weg ist genau der Richtige.
Das folgende Coding ist direkt aus einer Methode geholt, die von PROCESS_ITEM aufgerufen wird:

Code: Alles auswählen.

    lv_ebelp = ls_item-ebelp + 1.
    DATA(lo_item_new) = im_item->get_header( )->create_item( lv_ebelp ).
    DATA(ls_item_new) = lo_item_new->get_data( ).
    ls_item_new       = ls_item.
    ls_item_new-ebelp = lv_ebelp.
...
    lo_item_new->set_data( ls_item_new ).

Spezielle Erkenntnisse und Erfahrungen.
  • Aus irgend einem Grund funktionierte es bei mir nicht in Folgefunktionalitäten ( Ich musste noch die Kostenstelle im Accouting-Bereich füllen ) zu der hinzugefügten Position, wenn ich nicht explizit eine Positionsnummer vorgegeben hatte.
  • Die neu hinzugefügte Position wird anschließend auch noch mal mit der Methode PROCESS_ITEM durchlaufen aber man erkennt nicht ( zumindest ich erkenne das nicht) ob sie von Hand oder automatisch zugefügt wurde. Wenn das wichtig ist muss man sich selber darum kümmern, dass man sich merkt was man hinzugefügt hat
  • Ableitungen kann ich nichts zu sagen, da ich darauf nicht geachtet habe. Sollte aber m.E. funktionieren
  • Es gibt einen fast analogen BADI für Banfen. Dort - und dann wahrscheinlich auch hier - ist es so, dass der BAPI, der eine Banf anlegt den BADI nicht durchläuft. Ist auch völlig korrekt - der BADI sagt schließlich irgend was von "Enjoy"... Wenn man also auch hierfür tätig sein muss, sollte man sich den zugehörigen Userexit suchen und dort ein quasi analoges Coding einfügen
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Neue Bestellposition per User Exit / BAdI einfügen

Beitrag von tgb (ForumUser / 3 / 1 / 0 ) »
Hallo nochmal,

kurze Rückfrage: Hattest Du ebenfalls Probleme mit dem Füllen des Felds wepos für die zweite Position (Struktur mepoitem, ls_item_new-wepos = 'X')?

Bei mir wird derzeit die Meldung "ME664: Änderung Wareneingang konnte nicht durchgeführt werden" ausgegeben, wenn ich die Banf in eine Bestellung umsetze.

Alle anderen Felder (z.B. Kontierungstyp, Lieferdatum, Menge, etc) lassen sich problemlos mit eigenen Werten befüllen.

Gruß
Tom

Re: Neue Bestellposition per User Exit / BAdI einfügen

Beitrag von black_adept (Top Expert / 4099 / 128 / 941 ) »
Hi Tom,

kann ich leider nichts zu sagen, da "meine" Änderungen sich wohl nicht an diesen Feldern ausgetobt haben. Mein Tipp wäre, dass du ein nicht eingabebereites oder unsichtbar geschaltetes Feld versuchst zu verändern.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Neue Bestellposition per User Exit / BAdI einfügen

Beitrag von tgb (ForumUser / 3 / 1 / 0 ) »
Moin,

noch ne Frage zum Handling der neuen Position in der Bestellung: Bei einer Mengenänderung der ersten Position bekomme ich im Anlageprozess der ME21N die Meldung MEPO105: "Bei der Durchnummerierung der Positionen wurde die Positionsnummer 00020 mehrfach vergeben. Dies wird in der Folge zu Fehlern führen.
Die Verarbeitung dieser Bestellung wird daher abgebrochen."

Ich hätte schon eine Idee, warum der Fehler zustande kommt. Das System durchläuft die Logik in Methode PROCESS_ITEM durch die Mengenänderung noch mal und versucht Pos. 20 zu vergeben, obwohl es diese ja schon gibt. Wie kann ich ihm denn klarmachen, dass die Posi schon existiert? get_persistent_data( EXCEPTIONS no_data = 1 ) habe ich bereits gesetzt, aber evtl. an der falschen Stelle?

Code: Alles auswählen.

clear lv_ebelp.
      lv_ebelp = ls_item-ebelp + 10.
      lu_item_new = im_item->get_header( ).
      lo_item_new = lu_item_new->create_item( lv_ebelp ).
      lo_item_new->get_persistent_data( EXCEPTIONS no_data = 1 ).
      ls_item_new = lo_item_new->get_data( ).
      ls_item_new-knttp = 'X'.
      ls_item_new-ebelp = lv_ebelp.
      ls_item_new-ematn = wa_stpo-idnrk.
      ls_item_new-menge = wa_stpo-menge.
*      ls_item_new-wepos = 'X'.
      ls_item_new-eeind = ls_item-eeind.
      lo_item_new->set_data( ls_item_new ).
Gruß
Tom

Re: Neue Bestellposition per User Exit / BAdI einfügen

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

Code: Alles auswählen.

clear lv_ebelp.
      lv_ebelp = ls_item-ebelp + 10.
      lu_item_new = im_item->get_header( ).
      lo_item_new = lu_item_new->create_item( lv_ebelp ).
      lo_item_new->get_persistent_data( EXCEPTIONS no_data = 1 ).
Das sieht mir schon im Ansatz falsch aus.
Einerseits erzeugst du mit CREATE_ITEM eine neue Position für die du eine Nummer vorgibst.
Andererseits versuchst du mit GET_PERSISTENT_DATA genau diese Position von der Datenbank! nachzulesen.

Was du machen müsstest wäre: Über den Header alle aktuell vorhandenen Positionen zusammenzulesen ( header->get_items( ) ) und dann dafür zu sorgen, dass du keine Nummer vergibst, die dort schon auftaucht.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Seite 1 von 1

Vergleichbare Themen

1
Antw.
780
Views
User-Exit Kennzeichen WEUNB in Bestellposition setzen
von norbert1962_sap » 20.07.2020 10:17 • Verfasst in ABAP® Core
4
Antw.
2724
Views
User Exit bzw. BADI
von Lainer » 07.11.2007 14:42 • Verfasst in ABAP® für Anfänger
0
Antw.
2211
Views
Exit/Badi für Buchungskreisanlage?
von lausek » 21.12.2017 11:59 • Verfasst in Financials
9
Antw.
2234
Views
BADi/User-Exit für ME54N
von L0w-RiDer » 29.01.2020 09:11 • Verfasst in ABAP® für Anfänger
1
Antw.
7651
Views
User Exit/Badi für HU Anlage
von t0mt0m » 07.12.2007 11:44 • Verfasst in Sonstige Module

Über diesen Beitrag


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

Aktuelle Forenbeiträge

Regex in where
vor 6 Stunden von edwin 7 / 163
Daten an Tabelle binden
vor 19 Stunden von Bright4.5 3 / 1487

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 6 Stunden von edwin 7 / 163
Daten an Tabelle binden
vor 19 Stunden von Bright4.5 3 / 1487

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