Viel Flexibilität für Ihre Transportprozesse mit Bedingungen in SAP S/4HANA TM

leogistics

leogistics

Im Transportation Management Bedingungen setzen und Stolperfallen vermeiden

Automatisierung und Flexibilität im Transportmanagement sind essenziell, denn manuelle Prozesse kosten Zeit und Zeit ist bekanntlich Geld. Entscheidungen treffen ist einer der vielen Prozesse im Transportmanagement, welche man durch Automatisierung zum einen standardisieren und zum anderen beschleunigen möchte. Beispielsweise, wenn entschieden werden soll, welche Frachtvereinbarung in Abhängigkeit von Einkaufsorganisation, Spediteur, Transportmittel usw. genutzt werden soll. Ein Weg, um zugleich Automatisierung und Flexibilität zu realisieren, ist die Verwendung von Entscheidungstabellen und Bedingungen über das Fiori-Launchpad.

So legen Sie Bedingungsdefinitionen an

Einer der vielen Vorteile von Bedingungen: Es entfallen zusätzliche Programmierungen und auf neue Situationen kann durch Anpassung oder Erweiterung der Konfiguration schnell reagiert werden, ohne dass Entwicklungsfähigkeiten benötigt werden. Die Einsatzgebiete sind dabei vielfältiger Natur. Überall, wo auf Basis von Wenn-Dann-Formulierungen, durch Festlegung einzelner Selektionswerte oder Ausschluss bestimmter Werte oder ganzer Wertebereiche Prozessentscheidungen getroffen werden sollen und sich diese Bedingungswerte in einem dynamischen Wandel befinden können, kann die Verwendung von Entscheidungstabellen einen enormen Vorteil im Hinblick auf Flexibilität, aber auch Vereinfachung für den Kunden verschaffen.

Um eine Bedingungsdefinition im SAP TM anzulegen, öffnet man über das SAP-Fiori-Launchpad den Bedingungen-Arbeitsvorrat. Von dort aus kann man neue Bedingungen anlegen oder bestehende Bedingungen anpassen.

Bedingungen tm
Arbeitsvorrat Bedingungen

Datenzugriffsdefinition als Basis

Basis jeder Bedingung ist die Datenzugriffsdefinition. Hier legen Sie fest, welche BOPF-Datenobjekte oder Werte in der Definition ausgewertet werden sollen. Bereits hier können Sie ausreichend Komplexität erzeugen, da Sie zwischen Business-Objekt-, Data-Crawler- oder Klassenbasierten Datenzugriffsdefinitionen wählen können. Letztere bedingen wieder Entwicklungskapazitäten, während erstere auf Standardinformationen eines BOPF-Objektes zugreifen.
Bussines-Objekt-basierte und klassenbasierte Datenzugriffsdefinition

Haben Sie die Datenzugriffsdefinition eingerichtet, beginnt der interessante Teil der Bedingungsdefinition – die Kombination der Werte (Include/Exclude), welche zu bestimmten Ergebnissen führen. Wichtig ist hier zu wissen, dass es neben den Include-Bedingungen auch Exclude-Bedingungen gibt. Es können also sowohl Werte eingeschlossen oder ausgeschlossen werden. Das ist bereits von den Selektionsoptionen in SAP-ABAP-Dynpro-Feldern bekannt. Doch ein Fallstrick ist, dass im Standard zunächst nur Includes angelegt werden können und erst auf dem zweiten Blick die Exludes verfügbar sind:

Direkte Werteingabe (1) führt zu einer Include-Bedingung (2)
Wertzuweisung ändern - Hinzufügen von Excludes über Ändern-Button

Die Stolperfallen

Leider gibt es bei der Erstellung von Bedingungen ein paar kleine Stolperfallen, die zu unerwünschten Ergebnissen führen. Die Fehlersuche gestaltet sich dann schwierig. Die Ursache liegt oft schon in der Konfiguration einer Bedingung – also in den Entscheidungstabellen. Besonders, wenn die Bedingung etwas komplexer ist, wird die Fehlersuche ein kleines Abenteuer. Nun hatte leider nicht jeder Nicht-Informatiker einen Kurs in Aussagenlogik, ist diese doch eine wichtige Grundlage, um zu verstehen, wie Entscheidungstabellen funktionieren.

Anwendungsfall: Abrechnung Vereinbarungsermittlung

In unserem Beispiel soll anhand mehrerer Werte eine Frachtvereinbarung gefunden werden, die für die Kostenermittlung genutzt wird. Konkret soll für den Spediteur 519862 mit dem Transportmittel Z001 eine Frachtvereinbarung für einen Frachtauftrag gefunden werden, der nur Material der Frachtgruppe MOLKEREI beinhaltet.

Doch durch eine fehlerhafte gestellte Bedingung wurde immer die falsche Vereinbarung ermittelt. Anhand dieser können wir gut verschiedene Stolperfallen, wie das Problem mit der Logik und warum es eine Fehlermeldung gibt, erklären: Es wurden nämlich gar keine Frachtkosten ermittelt.

fehlerhafte Bedingung
Fehlermeldung durch fehlerhafte Bedingung

Die fehlerhafte Bedingung

exclude-Bedingung
Fehlerhafte Bedingung

Bedingungen werden immer sequenziell abgearbeitet! 

  • Bedingungen werden also von oben nach unten so lang durchlaufen, bis eine Bedingung erfüllt ist. Daher kann die Reihenfolge sehr entscheidend sein. Im Beispiel oben darf die letzte Zeile nicht an erster Stelle, da alle Frachtaufträge diese Bedingung erfüllen, weil es schlicht egal ist, welche Werte dieser Frachtauftrag hat.

Jede Wert-Spalte ist durch ein UND verbunden!

  • Hier bewegen wir uns schon in der Aussagenlogik. Es müssen immer alle Werte einer Zeile erfüllt sein, damit die Bedingung erfüllt ist.

Eine Zeile wird also wie folgt gelesen:

  • Wenn die Einkaufsorganisation = 0020 ist
  • UND der Transportdienstleister 0000519862 ist
  • UND das Land = DE ist
  • UND irgendein Transportmittel (also egal welches)
  • UND irgendeine Materialfrachtgruppe
  • UND irgendeine Avisierte Menge
  • UND irgendein Auftragsgrund
  • UND irgendeine Belegart…

… dann gilt die Vereinbarung 8100000005.

Achtung: auch hier gibt es Stolperfallen

Stolperfallen gibt es im Bereich Bedingungen und Aussagenlogik eine Menge. Die einfachen sind, dass man sich verschrieben hat, dass man falsche Werte eingetragen hat oder dass man zu viele Werte eingetragen hat, die die Erfüllung der Bedingung verhindern. Doch es gibt noch weitere Fallstricke, die man auf den ersten Blick leicht übersieht.

Beginnen wir bei der ersten Stolperfalle: Der Frachtauftrag hat die benötigten Werte eingetragen, die Bedingung wird ausgewertet und es wird die Vereinbarung 8100000005 gefunden. Trotzdem findet keine Berechnung statt – die Frachtkosten können nicht ermittelt werden. Hier liegt der nicht sichtbare Fehler in der gefundenen Vereinbarung bzw. in der dahinterliegenden Tarifpreistabelle.

Tarifpreistabelle
Tarifpreistabelle

Diese gilt ausschließlich für die Materialfrachtgruppe HMILCH. Das heißt: die Bedingung wurde dahingehend falsch konfiguriert, dass die Materialfrachtgruppe nicht entsprechend eingegrenzt wurde. Wenn die Vereinbarung sowieso nur für HMILCH gilt, dann muss diese Information ebenfalls eingetragen werden.

Nach der Korrektur dieses Fehlers gelangen wir schon zum nächsten Stolperstein, denn wir bekommen den nächsten falschen Wert ausgespuckt – Vereinbarung 8100000009. Wir wollten doch eine Bedingung, in der das Transportmittel weder Z001 noch Z002 ist.

Logik hinter den Bedingungen

In Abbildung “die fehlerhafte Bedingung” markiert Punkt 2 den Fehler. Sichtbar für das Logikauge wird er aber erst, wenn man ihn bearbeitet.

Bedingung im Detail
Wenn man einen Wert in einer Spalte ändert und dort mehrere Werte eintragen will, sind diese immer durch ein logisches ODER verknüpft. Das bedeutet aber auch genau das: Ein logisches ODER ist immer dann erfüllt, wenn einer oder beide Variablenwerte erfüllt sind. In der Logik schreibt man dafür gern logische Verknüpfungstabellen, um zu sehen, wann ein Ausdruck wahr oder nicht wahr ist:
Logiktabelle
Logiktabelle für UND (Λ) und ODER(V)

Ein logisches ODER ist eine Disjunktion, logisches UND ist eine Konjunktion. Wir müssen nicht darüber diskutieren, dass der Begriff „ODER-Verknüpfung“ einfacher ist, aber Wissenschaft zeichnet sich manchmal dadurch aus, dass man möglichst komplizierte Begriffe verwendet, um mit diesen zu sagen, dass eigentlich alles ganz einfach ist.

Das Bild verdeutlicht aber gut das Problem unserer obigen Bedingung. Es gilt, dass das Transportmittel „nicht gleich Z001 oder nicht gleich Z002“ sein darf. Als Logiktabelle visualisiert, wird auch sichtbar, wo das Problem liegt, wenn ein Transportmittel tatsächlich Z001 ist und warum dann die Bedingung dennoch erfüllt ist.

 

In der folgenden Darstellung wird noch das NICHT als Spalte dargestellt. Das NICHT bedeutet eine Umkehr des Wahrheitswertes. Also wenn das Transportmittel gleich Z001 ist, dann ist der Ausdruck „NICHT Z001“ falsch. Das Ergebnis eines Ausdrucks steht dann in der Verknüpfungsspalte – hier ODER als graue Spalte. Also aus der weißen Spalte wird der Wert in der gelben Spalte negiert und die Verknüpfung aus beiden gelben Spalten steht in der grauen Spalte:

logisches oder
Logisches ODER
Wahrheitswerte
Wahrheitswert 3. Zeile

Zu lesen ist das dann erklärt an der dritten Zeile:

  • Wenn Z001 Wahr, dann ist NICHT Z001 Falsch.
  • Wenn Z002 Falsch, dann ist NICHT Z002 Wahr.

Wenn also NICHT Z001 Falsch ODER NICHT Z002 wahr, dann ist der Ausdruck auch wahr – denn es muss eins von beiden wahr sein, damit der ganze Ausdruck wahr ist.

Damit haben wir das Problem gefunden: Wenn das Transportmittel Z001 ist, dann ist es ja zwangsweise nicht Z002, erfüllt also die ODER-Bedingung und damit finden wir die falsche Frachtvereinbarung 8100000008 – falsch, denn schließlich soll es weder Z001 noch Z002 sein.

Die Lösung

Wie kann man ein solches Problem in den Bedingungen nun verhindern? Auch hier kommt die Logik ins Spiel, und zwar in Form der „De Morganschen Regel“:

  • nicht (a und b) ist äquivalent zu ((nicht a) oder (nicht b)), sowie nicht (a oder b) ist äquivalent zu ((nicht a) und (nicht b))

In unserem Beispiel wollen wir genau letztere Regel abedecken: „Nicht Z001“ und „Nicht Z002“. Das ODER-Äquivalent dazu ist also „NICHT (Z001 ODER Z002)“. Das bedeutet, wir müssen statt eines Ausdrucks wie „NICHT Z001“ einzuschließen einfach einen Ausdruck wie „Z001“ ausschließen. Denn dann funktioniert die ODER-Regel wie gewünscht.

Der Ausdruck ist nur dann wahr, wenn weder Z001 noch Z002 gesetzt sind.

Umgeformte Logiktabelle

Umsetzung der Lösung

Um nun diese Lösung umzusetzen, erinnern wir uns an die Möglichkeit, Excludes und Includes einzufügen. Dies geschieht wie bereits erwähnt über einen Umweg. Wir wählen zunächst die „Direkte Werteingabe”. Im Anschluss wählen wir Ändern und „Exclude-Bedingung“ einfügen. Das ist dahingehend etwas umständlich, da die Include-Bedingung zunächst stehen bleibt, wird jedoch gleich wieder gelöscht. Dann ist das gewünschte Ergebnis sichtbar: das “nicht”, das die Exclude-Bedingung kennzeichnet.

"nicht" kennzeichnet Exclude-Bedingung

Wir fügen noch eine zweite Exclude-Bedingung hinzu und bestücken sie mit „ist gleich“ Z001 oder „ist gleich“ Z002. Denn wir wollen ja sagen: „nicht“ (gleich Z001 oder gleich Z002) – siehe Abbildung “Umgeformte Logiktabelle”. Man muss also quasi umgekehrt denken, denn das „nicht” steht außerhalb der gedachten Klammer.

Die korrekte Exclude-Bedingung: „nicht“ (gleich Z001 oder gleich Z002)
flexibilität tm
Vereinbarung wie gewünscht
Nun findet das System auch die richtige Vereinbarung, weil keine andere Bedingung für den Frachtauftrag zutrifft, nämlich 8100000023 und nicht wie vorher 8100000009 .Letztlich haben wir „nur“ eine Logikregel angewandt und aus „nicht Z001 und nicht Z002“ die neue Bedingung „nicht (Z001 oder Z002)“ erstellt und diese in der Bedingungskonfiguration eingebaut.

Wir sind für Sie da!

Mit richtig gesetzten Bedingungen können Sie in SAP S/4HANA TM viele Schritte im Bereich Transportprozesse, -vergabe oder Frachtkostenberechnung vereinfachen. Es lohnt sich, dabei tiefer in das Thema Aussagenlogik einzusteigen. Konnten wir Ihr Interesse wecken oder haben Sie Fragen? Wenden Sie sich gerne an uns unter blog@leogistics.com.

Silvio Funke
Senior Technical Consultant SAP Logistics 

transport lkw
Blog

Viel Flexibilität für Ihre Transportprozesse mit Bedingungen in SAP S/4HANA TM

Automatisierung und Flexibilität im Transportmanagement sind essenziell, denn manuelle Prozesse kosten Zeit und Geld. Mehr Flexibilität und Automatisierung mit dem Fiori-Launchpad.
Learn more →
LKW auf Straße im Kontext SAP S/4HANA TM
Blog

SAP S/4HANA Transportation Management: Ohne Business Partner geht es nicht!

SAP S/4HANA TM löst das bestehende LE-TRA Ende 2027 ab. Doch was müssen Unternehmen bei der Stammdatenübertragung des „Business Partners“ beachten? Mehr dazu im Beitrag.
Learn more →
News

#futureoflogistics: leogistics weist den Weg in die Zukunft der Logistik

Welche Bedeutung haben Technologien wie KI und Machine Learning in der Logistik? Wie kann nachhaltige Logistik funktionieren?
Learn more →
Blog

Digitalen Speditionen die Stirn bieten

Digitale Speditionen drängen auf den Transportbeauftragungsmarkt. Wie können klassische Speditionen Schritt halten?
Learn more →
Blog

Komplexe Planungsprobleme mithilfe von Machine Learning lösen – ein Beispiel aus der Praxis

Machine Learning kann bei der Lösung von schier unlösbarer Aufgaben wertvolle Hilfe leisten – und so die Effizienz vieler Prozesse steigern.
Learn more →
Behältermanagement
Blog

Behältermanagement: Haben Sie noch alle Behälter im Lager?

Ohne Behälter geht in der Logistik praktisch nichts. Mit einem smarten Behältermanagement lässt sich der Kreislauf effizient steuern.
Learn more →
LKW auf Strasse
Blog

So gelingt die Migration von SAP TM 9.5 auf S/4HANA TM

Sie haben sich entschieden, von Ihrem SAP TM 9.5-System auf SAP S/4HANA Transportation Management zu migrieren? Doch wie geht es nun weiter? Erfahren Sie, wie ...
Learn more →
FSP01 Release: LKW vor Toren
Blog

SAP S/4HANA 2020 FPS01: viele neue Funktionen auf Lager

Das SAP S/4HANA 2020 FPS01 bietet aber nicht nur neue Möglichkeiten für das TM, sondern auch auf der anderen Seite der Lagertore bekommen wir für ...
Learn more →
Schnittstelle zwischen LKW und Lager
Blog

SAP S/4HANA 2020 FPS01: SAP TM und EWM verbessern die Schnittstellen­kommunikation

Was steckt Neues im SAP S/4HANA 2020 FPS01 Release? Wir haben uns mit den Neuerungen auseinandergesetzt und stellen Ihnen die interessantesten Features wie das ...
Learn more →

BLOG &
NEWS

Latest news and blog posts from the world of intelligent supply chain management.

Kontakt

Sprechen sie Uns an

Sie interessieren sich für State-of-the-Art-Logistiklösungen? Dann sind wir Ihre Ansprechpersonen. Wir freuen uns auf Ihre Nachricht.

Neues von leogistics in Ihr Postfach

Jetzt anmelden und Zugang zu unserem kostenlosen Whitepaper und Downloads erhalten.