SchnittstellenanpassungRDSivas

Es sollen wegen folgender Problematik Anpassungen an der PDM-ERP-Schnittstelle (SIVAS-Workflow 96) durchgeführt werden:

Bei Stücklistenänderungen in SIVAS werden aktuell alle manuell durchgeführten Stücklistenänderungen (z.B. hinterlegen von Zuschnittswerten, Änderung des Rüstcodes, Entfernung des Dispoaktiv-Hakens, etc.) und hinterlegten TOS-Regeln / -Bedingungen entfernt.

Das liegt daran, dass die Stücklistenerstellung aktuell nach folgender, einfacher Logik erfolgt:

  1. Workflow 96 löscht die gesamte alte Stammstückliste
  2. Workflow 96 importiert die neue Stücklisten-CSV aus RuleDesigner und baut die Stückliste danach auf.

Wird nun vergessen, die manuellen Stücklistenänderungen / TOS-Regeln- und Bedingungen händisch in der SIVAS-Stammstückliste wiederherzustellen, stimmen unter Umständen Kalkulationen, Komissionierungen, usw. nicht mehr, was je nach Teilenummer und Auftrag einen großen finanziellen Schaden nach sich ziehen kann.

Ziel der Schnittstellenanpassung

Manuelle Stücklistenänderungen sowie TOS-Regeln und -Bedingungen sollen soweit möglich in die neue Stückliste übernommen werden.

Die Hauptaufgabe besteht folglich darin, eine Logik zu definieren, die feststellt, von welcher zu welcher Positionsnummer die Stücklistenpositionen infolge einer Stücklistenänderung verschoben wurden.

Die Feststellung dieser eindeutigen Zuordnung wird durch folgende Punkte erschwert

  1. Die Stücklisten-CSV, die RuleDesigner erzeugt, beinhaltet weder Informationen zu den Spaltenüberschreibungen, noch Angaben über hinterlegte TOS-Regeln und/oder TOS-Bedingungen. Sie beinhaltet lediglich:

    • Teilenummer der Baugruppe in der das Teil eingebaut ist (bzw. Teilenummer des bearbeiteten Halbzeuges)
    • Positionsnummern
    • Teilenummern von allen Stücklistenpositionen
    • Mengen der Stücklistenpositionen (entspricht bei längenabhängigen Teilen der Spalte "Abweichende Menge" in SIVAS und bei nicht längenabhängigen Teilen der Spalte "Menge")
    • Länge der Stücklistenpositionen (bei nicht-längenabhängigen Teilen = 0)
  2. Bei nicht-längenabhängigen Teilen kann die Änderung der Positionsnummer allein anhand der Teilenummer identifiziert werden (da diese Teile immer genau 1x in der Stückliste auftreten (zwar evtl. mit unterschiedlicher Menge, aber immer nur mit einer Positionsnummer)). Bei längenabhängigen Teilen ist das allerdings nicht so einfach, weil eine längenabhängige Teilenummer mit mehreren Längen in derselben Stückliste vertreten sein kann (z.B. mit 1x mit Länge 100 und 1x mit Länge 200). Warum dies zu Problemen führt wird an folgendem Beispiel deutlich:

    Alte StücklisteNeue Stückliste
    Pos. Teilenr. Abw. Menge Menge Länge Zuschnitt TOS-Regel
    1 100000000 1 0,505 500 5 418
    2 200000000 - 1 - - -
    3 300000000 - 1 - - -
    4 100000000 1 0,715 700 15 420
    Pos. Teilenr. Abw. Menge Menge Länge Zuschnitt TOS-Regel
    1 100000000 2 0,610 300 ? ?
    2 200000000 - 1 - - -
    3 100000000 2 0,830 400 ? ?
    4 400000000 - 1 - - -

    Hier stellt sich die z.B. die Frage, ob Pos. 1 aus der alten Stückliste zu Pos. 3 in der neuen Stückliste wurde, oder ob es sich immer noch um Pos. 1 handelt? Gleiches gilt für Pos. 3 in der alten Stückliste - hat sich dessen Länge von 700 auf 300 geändert, sodass es sich in der neuen Stückliste um Pos. 1 handelt, oder aber beträgt die Länge nun 400, sodass die neue Positionsnummer = 3 ist? Oder ist es ganz anders und Pos. 1 und 3 aus der alten Stückliste wurden beim konstruieren gelöscht und durch komplett neue Teile mit den Längen 300 und 400 ersetzt, die gar nichts mehr mit den beiden Teilen der alten Stückliste zu tun haben?

    Es zeigt sich also, dass bei längenabhängigen Teilen oftmals eine eindeutige Zuordnung zwischen den Positionsnummern der alten und neuen Stückliste schwierig, bis unmöglich ist.

    Die spezifizierte Logik siehe (Logik) soll eine eindeutige Zuordnung in möglichst vielen Fällen herstellen. Nichtsdestotrotz verbleiben relativ viele Fällen, in denen dies nicht möglich ist. In solchen Fällen bleibt nichts anderes übrig, als die mehrdeutigen Positionen in der neuen Stüdckliste neu anzulegen, etwaige Änderungen der Spaltenwerte oder TOS-Regeln /-Bedingungen also zu entfernen. Damit diese Löschung jedoch nicht einfach so erfolgt, wird in diesen Fällen eine SIVAS-Workflowmeldung an die Verantwortlichen der Arbeitsvorbereitung, bzw. an die Verantwortlichen für das TOS geschickt, in der aufgelistet ist, welche Positionen in der alten Stückliste geänderte Spaltenwerte oder TOS-Regeln / -Bedingungen aufgewiesen haben. Folglich können sich die entsprechenden Personen dann nochmal manuell die Stammstückliste anschauen und evtl. gelöschte Bedingungen oder geänderte Spaltenwerte nachpflegen!

Voraussetzungen

  • Windows -> Korrekte Funktionsweise auf Linux/Mac voraussichtlich insbesondere wegen den Batch-Dateien im bin-Verzeichnis nicht gegeben!
  • Es wird Python benötigt - Empfehlung: Version ≥ 3.12

Installation

git clone http://gitea.schoenenberger.de/s.steuer/SchnittstellenanpassungRDSivas.git
cd SchnittstellenanpassungRDSivas\bin
install.bat
  • install.bat erstellt die erforderlichen Verzeichnisse und generiert ein virtual environment.
  • Es werden keine externen Packages installiert.

Verwendung

Batch-File

  1. Ins bin-Verzeichnis wechseln
  2. ProcessBOM.bat mit einem der Dateinamen aus dem data/in-Verzeichnis und dem Ausgabetyp "cmd" oder "csv" ausführen. Siehe hierzu Verwendungsbeispiele

Verwendungsbeispiele

  • Ausgabe der fertigen BOM von 000000369 in Konsole:
ProcessBOM.bat 000000369 cmd
ProcessBOM.bat 000000369 csv
  • Ausgabe der fertigen BOM 000000369 als CSV ins data/out-Verzeichnis schreiben und automatisch öffnen:
ProcessBOM.bat 000000369 csv -o

Command-Line

  1. Virtual-environment aktivieren:
.venv\Scripts\activate
  1. Umgebungsvariablen laden:
bin\setenv.bat
  1. Ins lib-Verzeichnis wechseln:
cd lib
  1. verschiebelogik.py ausführen (für alle verfügbaren Schalter siehe -h, bzw. siehe Verwendungsbeispiele)
python process_bom.py [Dateiname aus data/in] {cmd|csv} ...

Verschiebelogik

Fall 1.1:

Ziel:

Längenabhängige Teilenummern identifizieren, deren Teilenr-Länge-Kombinationen identisch in der alten und neuen Stückliste vorliegen.

Zu erfüllende Kriterien, damit eine Teilenummer unter Fall 1.1 fällt:

  • sie muss in beiden Stücklisten mit der gleichen Anzahl an Positionsnummern vertreten sein
  • alle Kombinationen aus Teilenr. + Länge (bei längenabhängigen Teilenummern) müssen in beiden Stücklisten vorliegen

Folge, für Positionsnummern, die Fall 1.1 zugeordnet werden können:

Alle hinterlegten TOS-Regeln und -Bedingungen sowie alle manuell durchgeführten Spaltenanpassungen (z.B. Ergänzung eines Zuschnittswertes) werden an die Positionsnummer in der neuen Stückliste verschoben, an der dieselbe Teilenr-Länge-Kombination auftritt.

Beispiele (siehe jeweils Beispiele.pdf)

  • Teilenummer 821106001 in Beispiel 1
  • Teilenummer 822064013 in Beispiel 14

Hinweise zu Fall 1.1:

  1. Die Verschiebung erfolgt auch dann, wenn die Teilenr-Länge-Kombination in der neuen Stückliste eine andere:

    • Positionsnummer
    • (abweichende) Menge im Vergleich zur alten Stückliste

    aufweist

    Beispiel

    Alte StücklisteNeue Stückliste
    Pos. Teilenr. Abw. Menge Menge Länge Zuschnitt TOS-Regel
    1 100000000 1 0,505 500 5 418
    2 200000000 - 1 - - -
    3 300000000 - 1 - - -
    4 100000000 1 0,715 700 15 420
    Pos. Teilenr. Abw. Menge Menge Länge Zuschnitt TOS-Regel
    1 100000000 2 1,100 500 5 418
    2 200000000 - 1 - - -
    3 100000000 2 1,430 700 15 420
    4 400000000 - 1 - - -

    Erklärung:

    Fall 1.1 trifft hier auf die Teilenummer 100000000 zu, weil 100000000 in beiden Stücklisten:

    • mit 2 Positionsnummern vertreten ist
    • die Längen 500 & 700 aufweist (gleiche Teilenr-Länge-Kombinationen)

    Folglich werden die manuellen Spaltenanpassungen (hier die Zuschnittswerte) sowie die TOS-Regeln und -Bedingungen (in diesem Fall sind nur Regeln definiert) an die neuen Positionsnummern in der neuen Stückliste verschoben.

    Konkret wird bei folgenden Teilenr-Länge-Kombinationen:

    • Teilenr: 100000000 + Länge: 500:
      • der Zuschnittswert 5 und die TOS-Bedingung 418 von Pos. 1 in der alten zu Pos. 1 in der neuen Stückliste verschoben. Die Positionsnummern bleiben hier gleich. Beachte, dass sich die abweichende Menge der Position um 1 erhöht hat. Wie eingangs erwähnt spielt das aber keine Rolle, die Verschiebung erfolgt trotzdem!
    • Teilenr: 100000000 + Länge: 700:
      • der Zuschnittswert 15 und die TOS-Bedingung 420 von Pos. 4 in der alten zu Pos. 3 in der neuen Stückliste verschoben. Auch die abweichende Menge erhöht sich um 1. Für Fall 1.1 spielt jedoch weder die Positionsänderung, noch die Mengenanpassung eine Rolle. Ausschlaggebend ist allein, dass alle Teilenr-Längen-Kombinationen in beiden Stücklisten vorliegen! Dementsprechend erfolgt auch hier die Verschiebung des Zuschnittswertes und der TOS-Regel.
  2. Fall 1.1 muss für jede längenabh. Teilenr. in der neuen Stückliste separat geprüft werden werden und falls zutreffend auf alle Positionsnummern dieser Teilenummer angewendet werden!

  3. Implementierung: siehe Programm -> Klasse BOMProcessing -> Methode _get_case_11_positions()

Fall 1.2:

Ziel:

Längenabhängige Teilenummern identifizieren, die in beiden Stücklisten an denselben Positionen befinden.

Folgende Kriterien muss die längenabhängige Teilenummer erfüllen:

  • sie muss in beiden Stücklisten gleich oft vorliegen (gleiche Anzahl an Positionsnummern)
  • ihre Positionsnummern müssen in beiden Stücklisten identisch sein

Folge, wenn Fall 1.2 zutrifft:

Bei allen Positionsnummern der längenabh. Teilenr. werden TOS-Regeln und -Bedingungen, die hinterlegt wurden, bzw. alle Spaltenanpassungen, die manuell in der SIVAS-Stammstückliste durchgeführt wurden (z.B. Ergänzung eines Zuschnittswertes) an dieselbe Position wie in der alten Stückliste verschoben.

Beispiele (siehe jeweils Beispiele.pdf)

  • Teilenummer 821106001 in Beispiel 2
  • Teilenummer 821106001 in Beispiel 3
  • Teilenummer 821096001 in Beispiel 12
  • Teilenummern 822066026 + 822066089 in Beispiel 13
  • Teilenummern 822066026 + 822066089 in Beispiel 14

Hinweise zu Fall 1.2:

  1. Fall 1.2 muss für jede längenabh. Teilenr. in der neuen Stückliste separat geprüft werden werden!

    Beispiel:

    Alte StücklisteNeue Stückliste
    Pos. Teilenr. Länge Zuschnitt TOS-Regel
    1 100000000 500 5 418
    2 400000000 600
    3 100000000 700 15 420
    4 300000000 800 20 421
    5 500000000 900
    Pos. Teilenr. Länge Zuschnitt TOS-Regel
    1 100000000 100 5 418
    2 200000000 200 10 419
    3 100000000 300 15 420
    4 300000000 400 20 421
    5 400000000 500 25 422

    Die Prüfung von Fall 1.2 erfolgt für folgende Teilenummern:

    • 100000000
    • 400000000
    • 300000000
    • 500000000

    Die Prüfung von Fall 1.2 erfolgt NICHT für folgende Teilenummern:

    • 200000000 (da sie nicht in der neuen Stückliste vorliegt)

    Fall 1.2 trifft auf folgenden Teilenummern zu:

    • 100000000, weil diese Teilenr. in beiden Stücklisten 2x vorkommt und in beiden Stücklisten dieselben Positionsnummern aufweist (1 & 3)

      Die Zuschnittswerte 5 und 15 sowie die TOS-Regeln 418 und 420 werden daher an dieselben Positionen wie in der alten Stücklisten übernommen. Konkret also von Pos. 1 zu Pos. 1 und von Pos. 3 zu Pos. 3.

    • 300000000, weil diese Teilenr. in beiden Stücklisten 1x vorkommt und in beiden Stücklisten an Pos. 4 liegt

      Der Zuschnittswert 5 und 15 sowie die TOS-Regeln 418 und 420 wird daher an dieselbe Position wie in der alten Stückliste, d.h. von Pos. 4 zu Pos. 4, verschoben

    Fall 1.2 trifft NICHT auf folgenden Teilenummern zu:

    • 400000000, da sie zwar in beiden Stücklisten genau 1x vorkommt, aber nicht an derselben Positionsnummer

      Es erfolgt daher keine Verschiebung des Zuschnittes 25 und der TOS-Bedingung 422 von Pos. 5 zu Pos. 2

    • 500000000, da sie neu in der neuen Stückliste ist

      Neue Positionen werden immer ohne Spaltenänderungen oder TOS-Regeln /-Bedingungen angelegt!

  2. Die Längen an denselben Positionsnummern dürfen unterschiedlich sein!

    Beispiel:

    Alte StücklisteNeue Stückliste
    Pos. Teilenr. Länge Zuschnitt TOS-Regel
    1 821106001 100 5 418
    2 821106001 200 10 419
    Pos. Teilenr. Länge Zuschnitt TOS-Regel
    1 821106001 400 5 418
    2 821106001 500 10 419

    Erklärung:

    Die Zuschnittswerte 5 & 10 sowie die TOS-Regeln 418 & 419 werden an dieselbe Position wie in der alten Stückliste verschoben, obwohl sich die Längen zwischen der alten und neuen Stückliste komplett unterscheiden. Denn wie im Ziel beschrieben sind allein folgende Punkte ausschlaggebend, dass die Positionsnummern der Teilenummern unter Fall 1.2 fallen:

    • dass die Anzahl an Positionsnummern einer Teilenummer in beiden Stücklisten gleich ist. Das ist hier gegeben, weil 821106001 in beiden Stücklisten mit 2 Positionsnummern vertreten ist
    • dass ihre Positionsnummern in beiden Stücklisten identisch sind. Auch das ist der Fall, denn sie besitzt in beiden Stücklisten die Positionsnummern 1 und 2.
  3. Wenn Fall 1.1 und Fall 1.2 gleichzeitig auf eine längenabh. Teilenr. zutreffen gilt Fall 1.1.

    Beispiel:

    Alte StücklisteNeue Stückliste
    Pos. Teilenr. Länge Zuschnitt TOS-Regel
    1 821106001 100 5 418
    2 821106001 200 10 419
    Pos. Teilenr. Länge Zuschnitt TOS-Regel
    1 821106001 200 ? ?
    2 821106001 100 ? ?

    Erklärung:

    Hier trifft sowohl Fall 1.1, als auch Fall 1.2 zu:

    • Fall 1.1, weil in beiden Stücklisten:

      • Kombination aus Teilenr. 821106001 + Länge 100 vorliegt
      • Kombination aus Teilenr. 821106001 + Länge 200 vorliegt
    • Fall 1.2, weil:

      • 821106001 in beiden Stücklisten 2x vorliegt
      • 821106001 in beiden Stücklisten an derselben Position vorliegt (Pos. 1 & 2)

    Die Frage ist nun, an welche Positionsnummern sollen die Zuschnittswerte 5 & 10 sowie die TOS-Regeln 418 & 419 verschoben werden: (siehe Fragezeichen in neuen Stückliste)

    Die eingangs beschriebene Regel liegt nun fest, dass in diesem Fall immer Fall 1.1 gilt, weil Fall 1.1 eine höhere Priorität als Fall 1.2 besitzt. Daraus folgt, dass die neue Stückliste wie folgt ausschaut (Verschiebung des Zuschnittswertes / der TOS-Regel von Pos. 1 in der alten Stückliste zu Pos. 2 in der Neuen, bzw. von Pos. 2 in der alten zu Pos. 1 in der neuen Stückliste):

    Pos. Teilenr. Länge Zuschnitt TOS-Regel
    1 821106001 200 10 419
    2 821106001 100 5 418
  4. Implementierung: siehe Programm -> Klasse BOMProcessing -> Methode _get_case_12_positions()

Fall 1.3:

Ziel:

Positionsnummern identifizieren, die entweder:

  • als neue Stücklistenposition eingefügt werden müssen (nachfolgend als Fall 1.31 bezeichnet)
  • in die neue Stückliste verschoben werden sollen, aber nicht unter Fall 1.1 oder Fall 1.2 fallen (nachfolgend als Fall 1.32 bezeichnet)

Folgende Kriterien muss die Positionsnummer erfüllen, damit sie unter Fall 1.31 fällt:

  • sie darf nur in der neuen Stückliste vorliegen

Folgende Kriterien muss die längenabhängige Teilenummer erfüllen, damit sie unter Fall 1.32 fällt:

  • sie muss in beiden Stücklisten dieselbe Teilenr-Längen-Kombination aufweisen

Folge, wenn Fall 1.31 zutrifft:

  • Die Position wird in der neuen Stückliste mit den Werten aus der RuleDesigner-Stücklisten-CSV neu angelegt (es erfolgt keine Verschiebung von Stücklisteninformationen aus der alten Stückliste). Die Spaltenwerte, die nicht in genannter Stücklisten-CSV enthalten sind, werden mit den Defaultwerten befüllt (so wie wenn die Position manuell in der SIVAS-Stückliste eingefügt wird). Defaultwerte sind abhängig von der Spalte entweder entweder leer sind, oder verfügen über die Werte der Teilenummer im Teilestamm (Tabelle PARTS)
  • Die Position wird ohne TOS-Regeln oder -Bedingungen angelegt. Sie müssen wenn dann händisch von einem SIVAS-User in der Stammstückliste ergänzt werden. Im Zuge einer nachfolgenden Stücklistenanpassung erfolgt dann evtl. eine Verschiebung der Regeln und Bedingungen, sofern die zu diesem Zeitpunkt Fall 1.1, 1.2 oder 1.32 auf diese Positionsnummer zutrifft.

Beispiele zu Fall 1.31 (siehe jeweils Beispiele.pdf)

  • Positionsnummer 4 der neuen Stückliste in Beispiel 1
  • Positionsnummer 2 & 3 der neuen Stückliste in Beispiel 4
  • Positionsnummer 4 der neuen Stückliste in Beispiel 5
  • Positionsnummer 3, 4, 5 der neuen Stückliste in Beispiel 6
  • Positionsnummer 3, 4 der neuen Stückliste in Beispiel 7
  • Positionsnummer 3 der neuen Stückliste in Beispiel 9
  • Positionsnummer 1 der neuen Stückliste in Beispiel 10
  • Positionsnummer 4 der neuen Stückliste in Beispiel 11
  • Positionsnummer 3, 5 der neuen Stückliste in Beispiel 12
  • Positionsnummer 2, 6, 7 der neuen Stückliste in Beispiel 13
  • Positionsnummer 4, 7, 9, 10, 12, 16, 17 der neuen Stückliste in Beispiel 14

Hinweise zu Fall 1.31:

  1. Implementierung: siehe Programm -> Klasse BOMProcessing -> Methode _get_case_131_positions()

Folge, wenn Fall 1.32 zutrifft:

Alle hinterlegten TOS-Regeln und -Bedingungen sowie alle manuell durchgeführten Spaltenanpassungen (z.B. Ergänzung eines Zuschnittswertes) werden an die Positionsnummer in der neuen Stückliste verschoben, an der dieselbe Teilenr-Länge-Kombination auftritt.

Beispiele zu Fall 1.32 (siehe jeweils Beispiele.pdf)

  • Positionsnummer 2 der neuen Stückliste in Beispiel 1
  • Positionsnummer 2 der neuen Stückliste in Beispiel 3
  • Positionsnummer 1, 4 der neuen Stückliste in Beispiel 4
  • Positionsnummer 1, 2, 3 der neuen Stückliste in Beispiel 5
  • Positionsnummer 1, 2 der neuen Stückliste in Beispiel 6
  • Positionsnummer 1, 2 der neuen Stückliste in Beispiel 7
  • Positionsnummer 1, 2 der neuen Stückliste in Beispiel 8
  • Positionsnummer 1, 2 der neuen Stückliste in Beispiel 9
  • Positionsnummer 2 der neuen Stückliste in Beispiel 12
  • Positionsnummer 1, 4 der neuen Stückliste in Beispiel 13
  • Positionsnummer 1, 6, 8, 13, 15 der neuen Stückliste in Beispiel 14

Hinweise zu Fall 1.32:

  1. Positionsnummern bei denen bereits Fall 1.1 greift, oder die unter Fall 1.2 fallen und deren Länge dabei in beiden Stücklisten gleich bleibt würden grundlegend ebenfalls unter Fall 1.32 fallen und somit identifiziert werden. Es gilt jedoch das Vorrangsprinzip, d.h. die Zuordnung zu Fall 1.1 oder Fall 1.2 erfolgt (sofern möglich) immer vor der Zuordnung zu Fall 1.32!

  2. Die Verschiebung erfolgt auch dann, wenn die Teilenr-Länge-Kombination in der neuen Stückliste eine andere:

    • Positionsnummer
    • (abweichende) Menge im Vergleich zur alten Stückliste aufweist.
  3. Implementierung: siehe Programm -> Klasse BOMProcessing -> Methode _get_case_132_positions()

S
Description
Enthält die neue Verschiebelogik für Stücklistenpositionen.
Readme 417 KiB
Languages
PLSQL 75.1%
Python 24.3%
Batchfile 0.6%