Du verwendest einen veralteten Browser. Dieser kann eventuell diese oder andere Webseiten nicht richtig darstellen. Du solltest deinen Browser aktualisieren oder einen alternativen Browser verwenden.
Hallo,
und zwar habe ich bei uns einen Workflow der eine Warnungsmail schreibt mit folgenden Text wenn der Bestand unter 60 fällt.
HTML clipboard Der Artikel {{ Vorgang.Artikel.Allgemein.Stammdaten.Name }} mit der Artikelnummer {{ Vorgang.Artikel.Allgemein.Stammdaten.ArtNrSku }} muss geprüft werden ggf. nachgebucht werden.
Jetzt möchte ich das die Stücklistenartikel und die Bestände dazu mit in der Mail vorkommen.
Finde nur leider die Reiter nicht im Vorgang, kann mir da jemand evtl. helfen?
Hallo,
und zwar habe ich bei uns einen Workflow der eine Warnungsmail schreibt mit folgenden Text wenn der Bestand unter 60 fällt.
HTML clipboard Der Artikel {{ Vorgang.Artikel.Allgemein.Stammdaten.Name }} mit der Artikelnummer {{ Vorgang.Artikel.Allgemein.Stammdaten.ArtNrSku }} muss geprüft werden ggf. nachgebucht werden.
Jetzt möchte ich das die Stücklistenartikel und die Bestände dazu mit in der Mail vorkommen.
Finde nur leider die Reiter nicht im Vorgang, kann mir da jemand evtl. helfen?
wo hast Du den Workflow angelegt? Unter "Artikel - Warenlagerausgang - Minusbuchung"? Je nachdem, wann die Meldung notwendig ist (also wenn bspw. "Bestand < 60" eher "verfügbarer Bestand < 60" meint), kommen auch andere Plazierungen in Frage.
Und Du meinst wahrscheinlich die Stücklistenkinder inklusive deren Beständen. Das geht bei einem Artikel-Workflow nur über eine SQL-Abfrage.
wo hast Du den Workflow angelegt? Unter "Artikel - Warenlagerausgang - Minusbuchung"? Je nachdem, wann die Meldung notwendig ist (also wenn bspw. "Bestand < 60" eher "verfügbarer Bestand < 60" meint), kommen auch andere Plazierungen in Frage.
Und Du meinst wahrscheinlich die Stücklistenkinder inklusive deren Beständen. Das geht bei einem Artikel-Workflow nur über eine SQL-Abfrage.
Hier wäre das: Wenn der Artikel eine Stückliste ist (bzw. ein Stücklistenvater), liste mir alle Stücklistenkinder mit deren Verfügbarkeiten auf. Dafür sind alle notwendigen Felder da.
Hier wäre das: Wenn der Artikel eine Stückliste ist (bzw. ein Stücklistenvater), liste mir alle Stücklistenkinder mit deren Verfügbarkeiten auf. Dafür sind alle notwendigen Felder da.
Mit der direkten SQL Abfrage bzw. mit der Wawi Datenbank, hab ich mit der Kodierung direkt noch nicht zu tuen gehabt, aber da bin ich gern gewillt die schritte anzugehen.
Oder gibt es da für mich eine einfache Art?
Hallo,
und zwar habe ich bei uns einen Workflow der eine Warnungsmail schreibt mit folgenden Text wenn der Bestand unter 60 fällt.
HTML clipboard Der Artikel {{ Vorgang.Artikel.Allgemein.Stammdaten.Name }} mit der Artikelnummer {{ Vorgang.Artikel.Allgemein.Stammdaten.ArtNrSku }} muss geprüft werden ggf. nachgebucht werden.
Jetzt möchte ich das die Stücklistenartikel und die Bestände dazu mit in der Mail vorkommen.
Finde nur leider die Reiter nicht im Vorgang, kann mir da jemand evtl. helfen?
wo hast Du den Workflow angelegt? Unter "Artikel - Warenlagerausgang - Minusbuchung"? Je nachdem, wann die Meldung notwendig ist (also wenn bspw. "Bestand < 60" eher "verfügbarer Bestand < 60" meint), kommen auch andere Plazierungen in Frage.
Und Du meinst wahrscheinlich die Stücklistenkinder inklusive deren Beständen. Das geht bei einem Artikel-Workflow nur über eine SQL-Abfrage.
Das ist leider zutreffend. Sollte hier aber kein Hinderungsgrund sein, einen weiteren unter Versand - Lieferscheine - Erstellt anzulegen. Auch wenn man dem anderen Thread entnehmen kann, wie sehr mir das gegen den Strich geht.
Mit der direkten SQL Abfrage bzw. mit der Wawi Datenbank, hab ich mit der Kodierung direkt noch nicht zu tuen gehabt, aber da bin ich gern gewillt die schritte anzugehen.
Oder gibt es da für mich eine einfache Art?
Puh, eine einfache Art ... Ich weiß nicht, ob es so etwas überhaupt gibt.
Die Basics von SQL sollte man sich schon aneignen sowie die Basics von DotLiquid (anhand der Beispiele im JTL-Guide), und dann probieren, probieren, probieren. Innerhalb der Wawi kannst Du keine schreibenden Queries verwenden. Da kannst Du beim Testen also nichts kaputt machen, wenn Du bspw. einen Testworkflow anlegst, der keine Bedingung hat oder eine, die nie zutreffen wird und nur eine Mail an Dich selbst schickt. Dann kannst Du im Textfeld herumtesten, bis der Arzt kommt. Du musst ihn theoretisch noch nicht einmal wirklich ausführen. Das Ergebnis kannst Du Dir in der Vorschau immer ausgeben lassen, ohne den Workflow ausgegeben zu haben.
Hier im Forum findest Du eine Vielzahl an Codes für DotLiquid und auch reines SQL (solange da nicht CREATE, UPDATE, INSERT, DELETE vorkommen), die Du einfach dazu nutzen kannst, sie zu verstehen. Das fällt am Anfang natürlich schwer, aber nach und nach wird's besser, auch mit Herumspielen, also Änderungen des Codes, um zu schauen, wie das Verhalten nach der Änderung ist. Das Schöne an all den Codes hier im Forum ist, dass es keine rein theoretischen Beispiele sind, sondern echte aus der Praxis.
Aber da das viel Zeit in Anspruch nimmt, kannst Du vielleicht erst einmal mit diesem Code was für die Auflistung der Stücklistenkomponenten anfangen, wenn es sich um eine Stückliste handelt. Sonst der normale Text:
HTML:
{% if Vorgang.Artikel.Sonstiges.IstStückliste -%}
<p>Die Stückliste unter dem Artikel {{ Vorgang.Artikel.Allgemein.Stammdaten.Name }} mit der Artikelnummer {{ Vorgang.Artikel.Allgemein.Stammdaten.ArtNrSku }} muss geprüft werden ggf. nachgebucht werden.</p>
<p>Stücklistenkomponenten:</p>
{% capture query -%}
SELECT
ART.cArtNr,
ART.cName,
CAST(SL.fAnzahl AS INT) AS fAnzahl,
CAST(LB.fVerfuegbar AS INT) AS fVerfuegbar
FROM
tStueckliste AS SL
JOIN
vStandardArtikel AS ART ON SL.kArtikel = ART.kArtikel
JOIN
tlagerbestand AS LB ON SL.kArtikel = LB.kArtikel
WHERE
SL.kVaterArtikel = {{ Vorgang.Artikel.Allgemein.Stammdaten.InterneArtikelnummer }}
ORDER BY
SL.nSort ASC
{% endcapture -%}
{% assign result = query | DirectQuery -%}
<style>
td {
text-align: left;
padding-right: 15px;
border-bottom: 1px solid #ddd;
}
.bold {
font-weight: bold;
}
</style>
<table>
<tr class="bold">
<td>cArtNr</td>
<td>cName</td>
<td>fAnzahl</td>
<td>fVerfuegbar</td>
</tr>
{% for item in result.Daten -%}
<tr>
<td>{{ item.cArtNr }}</td>
<td>{{ item.fAnzahl }}</td>
<td>{{ item.cName }}</td>
<td>{{ item.fVerfuegbar }}</td>
</tr>
{% endfor -%}
</table>
{% else -%}Der Artikel {{ Vorgang.Artikel.Allgemein.Stammdaten.Name }} mit der Artikelnummer {{ Vorgang.Artikel.Allgemein.Stammdaten.ArtNrSku }} muss geprüft werden ggf. nachgebucht werden.
{% endif -%}
Das Ganze gibt die Stücklistenkomponenten als HTML-Tabelle aus, die ein bisschen formatiert ist.
Die verwendeten Variablen funktionieren so nur dort, wo der Workflow im Moment sitzt. Wenn noch einer wie vorgeschlagen unter Versand - Lieferscheine - Erstellt angelegt wird, braucht es eine Bedingung und eine zweite Schleife (für alle Auftragspositionen, die unter 60 Stück gefallen sind), in der die Prüfung auf Stückliste und die dann notwendige weitere Schleife für die Stücklistenkomponenten befindet.
Puh, eine einfache Art ... Ich weiß nicht, ob es so etwas überhaupt gibt.
Die Basics von SQL sollte man sich schon aneignen sowie die Basics von DotLiquid (anhand der Beispiele im JTL-Guide), und dann probieren, probieren, probieren. Innerhalb der Wawi kannst Du keine schreibenden Queries verwenden. Da kannst Du beim Testen also nichts kaputt machen, wenn Du bspw. einen Testworkflow anlegst, der keine Bedingung hat oder eine, die nie zutreffen wird und nur eine Mail an Dich selbst schickt. Dann kannst Du im Textfeld herumtesten, bis der Arzt kommt. Du musst ihn theoretisch noch nicht einmal wirklich ausführen. Das Ergebnis kannst Du Dir in der Vorschau immer ausgeben lassen, ohne den Workflow ausgegeben zu haben.
Hier im Forum findest Du eine Vielzahl an Codes für DotLiquid und auch reines SQL (solange da nicht CREATE, UPDATE, INSERT, DELETE vorkommen), die Du einfach dazu nutzen kannst, sie zu verstehen. Das fällt am Anfang natürlich schwer, aber nach und nach wird's besser, auch mit Herumspielen, also Änderungen des Codes, um zu schauen, wie das Verhalten nach der Änderung ist. Das Schöne an all den Codes hier im Forum ist, dass es keine rein theoretischen Beispiele sind, sondern echte aus der Praxis.
Aber da das viel Zeit in Anspruch nimmt, kannst Du vielleicht erst einmal mit diesem Code was für die Auflistung der Stücklistenkomponenten anfangen, wenn es sich um eine Stückliste handelt. Sonst der normale Text:
HTML:
{% if Vorgang.Artikel.Sonstiges.IstStückliste -%}
<p>Die Stückliste unter dem Artikel {{ Vorgang.Artikel.Allgemein.Stammdaten.Name }} mit der Artikelnummer {{ Vorgang.Artikel.Allgemein.Stammdaten.ArtNrSku }} muss geprüft werden ggf. nachgebucht werden.</p>
<p>Stücklistenkomponenten:</p>
{% capture query -%}
SELECT
ART.cArtNr,
ART.cName,
CAST(SL.fAnzahl AS INT) AS fAnzahl,
CAST(LB.fVerfuegbar AS INT) AS fVerfuegbar
FROM
tStueckliste AS SL
JOIN
vStandardArtikel AS ART ON SL.kArtikel = ART.kArtikel
JOIN
tlagerbestand AS LB ON SL.kArtikel = LB.kArtikel
WHERE
SL.kVaterArtikel = {{ Vorgang.Artikel.Allgemein.Stammdaten.InterneArtikelnummer }}
ORDER BY
SL.nSort ASC
{% endcapture -%}
{% assign result = query | DirectQuery -%}
<style>
td {
text-align: left;
padding-right: 15px;
border-bottom: 1px solid #ddd;
}
.bold {
font-weight: bold;
}
</style>
<table>
<tr class="bold">
<td>cArtNr</td>
<td>cName</td>
<td>fAnzahl</td>
<td>fVerfuegbar</td>
</tr>
{% for item in result.Daten -%}
<tr>
<td>{{ item.cArtNr }}</td>
<td>{{ item.fAnzahl }}</td>
<td>{{ item.cName }}</td>
<td>{{ item.fVerfuegbar }}</td>
</tr>
{% endfor -%}
</table>
{% else -%}Der Artikel {{ Vorgang.Artikel.Allgemein.Stammdaten.Name }} mit der Artikelnummer {{ Vorgang.Artikel.Allgemein.Stammdaten.ArtNrSku }} muss geprüft werden ggf. nachgebucht werden.
{% endif -%}
Das Ganze gibt die Stücklistenkomponenten als HTML-Tabelle aus, die ein bisschen formatiert ist.
Die verwendeten Variablen funktionieren so nur dort, wo der Workflow im Moment sitzt. Wenn noch einer wie vorgeschlagen unter Versand - Lieferscheine - Erstellt angelegt wird, braucht es eine Bedingung und eine zweite Schleife (für alle Auftragspositionen, die unter 60 Stück gefallen sind), in der die Prüfung auf Stückliste und die dann notwendige weitere Schleife für die Stücklistenkomponenten befindet.
Ist das geil hab es noch etwas Angepasst, da die die html Kodierungen wenn ich diese in den Workflow eingefügt hab mit gesendet wurden
sah dann zu erst so aus:
Der Artikel Aopen DE35-HD 240 GB SSD ohne win 10 mit der Artikelnummer 202206291690eB-240 GB SSD-ohne muss geprüft werden ggf nachgebucht werden.
<p>Die Stückliste unter dem Artikel Aopen DE35-HD 240 GB SSD ohne win 10 mit der Artikelnummer 202206291690eB-240 GB SSD-ohne muss geprüft werden ggf. nachgebucht werden.</p>
Stücklistenkomponenten:
<style>
td {
text-align: left;
padding-right: 15px;
border-bottom: 1px solid #ddd;
}
.bold {
font-weight: bold;
}
</style>
<table>
<tr class="bold">
<td>cArtNr</td>
<td>cName</td>
<td>fAnzahl</td>
<td>fVerfuegbar</td>
</tr>
<tr>
<td>202209261731eB</td>
<td>1</td>
<td>[Barebone] Aopen DE35-HD</td>
<td>443</td>
</tr>
<tr>
<td>202205121670eB-1</td>
<td>2</td>
<td>Apacer 2GB SOD PC3-10600 CL9 SO-DIMM [1x2GB]</td>
<td>465</td>
</tr>
<tr>
<td>202212121803eB</td>
<td>1</td>
<td>[Netzteil] [Out: 19V 3,42 A] Für Aopen DE35 HD oder DE3100</td>
<td>0</td>
</tr>
<tr>
<td>202212121804eB</td>
<td>1</td>
<td>[ 0-2m ]-[ geb ]-[ Mickey Mouse ] Kaltgeräte Kabel</td>
<td>709</td>
</tr>
<tr>
<td>202201021030eB</td>
<td>1</td>
<td>2,5 Zoll SSD Flash Drive Notebook 240 GB</td>
<td>54</td>
</tr>
</table>
hab es dann angepasst und kam dann so raus:
Der Artikel Aopen DE35-HD 240 GB SSD ohne win 10 mit der Artikelnummer 202206291690eB-240 GB SSD-ohne muss geprüft werden ggf nachgebucht werden.
Die Stückliste unter dem Artikel Aopen DE35-HD 240 GB SSD ohne win 10 mit der Artikelnummer 202206291690eB-240 GB SSD-ohne muss geprüft werden ggf. nachgebucht werden.
Stücklistenkomponenten:
Aber bitte bedenken: Wenn nur dieser Workflow unter Artikel - Warenlagerausgang - Minusbuchung angelegt ist und auch bei einer Ausbuchung im Versandprozess funktionieren soll, funktioniert es gerade nicht. Siehe oben.
Da hättest Du auch einfach nur das Häkchen bei "HTML Email" in der Workflow-Aktion setzen können. Dadurch wird in der E-Mail alles hübsch als HTML ausgegeben, also ohne die Kodierungen.
Hier noch mal mit zwei Mini-Korrekturen:
HTML:
{% if Vorgang.Artikel.Sonstiges.IstStückliste -%}
<p>Die Stückliste unter dem Artikel {{ Vorgang.Artikel.Allgemein.Stammdaten.Name }} mit der Artikelnummer {{ Vorgang.Artikel.Allgemein.Stammdaten.ArtNrSku }} muss geprüft werden ggf. nachgebucht werden.</p>
<p>Stücklistenkomponenten:</p>
{% capture query -%}
SELECT
ART.cArtNr,
ART.cName,
CAST(SL.fAnzahl AS INT) AS fAnzahl,
CAST(LB.fVerfuegbar AS INT) AS fVerfuegbar
FROM
tStueckliste AS SL
JOIN
vStandardArtikel AS ART ON SL.kArtikel = ART.kArtikel
JOIN
tlagerbestand AS LB ON SL.kArtikel = LB.kArtikel
WHERE
SL.kVaterArtikel = {{ Vorgang.Artikel.Allgemein.Stammdaten.InterneArtikelnummer }}
ORDER BY
SL.nSort ASC
{% endcapture -%}
{% assign result = query | DirectQuery -%}
<style>
td {
text-align: left;
padding-right: 15px;
border-bottom: 1px solid #ddd;
}
.bold {
font-weight: bold;
}
</style>
<table>
<tr class="bold">
<td>cArtNr</td>
<td>cName</td>
<td>fAnzahl</td>
<td>fVerfuegbar</td>
</tr>
{% for item in result.Daten -%}
<tr>
<td>{{ item.cArtNr }}</td>
<td>{{ item.cName }}</td>
<td>{{ item.fAnzahl }}</td>
<td>{{ item.fVerfuegbar }}</td>
</tr>
{% endfor -%}
</table>
{% else -%}<p>Der Artikel {{ Vorgang.Artikel.Allgemein.Stammdaten.Name }} mit der Artikelnummer {{ Vorgang.Artikel.Allgemein.Stammdaten.ArtNrSku }} muss geprüft werden ggf. nachgebucht werden.</p>
{% endif -%}
Aber bitte bedenken: Wenn nur dieser Workflow unter Artikel - Warenlagerausgang - Minusbuchung angelegt ist und auch bei einer Ausbuchung im Versandprozess funktionieren soll, funktioniert es gerade nicht. Siehe oben.
Da hättest Du auch einfach nur das Häkchen bei "HTML Email" in der Workflow-Aktion setzen können. Dadurch wird in der E-Mail alles hübsch als HTML ausgegeben, also ohne die Kodierungen.
Hier noch mal mit zwei Mini-Korrekturen:
HTML:
{% if Vorgang.Artikel.Sonstiges.IstStückliste -%}
<p>Die Stückliste unter dem Artikel {{ Vorgang.Artikel.Allgemein.Stammdaten.Name }} mit der Artikelnummer {{ Vorgang.Artikel.Allgemein.Stammdaten.ArtNrSku }} muss geprüft werden ggf. nachgebucht werden.</p>
<p>Stücklistenkomponenten:</p>
{% capture query -%}
SELECT
ART.cArtNr,
ART.cName,
CAST(SL.fAnzahl AS INT) AS fAnzahl,
CAST(LB.fVerfuegbar AS INT) AS fVerfuegbar
FROM
tStueckliste AS SL
JOIN
vStandardArtikel AS ART ON SL.kArtikel = ART.kArtikel
JOIN
tlagerbestand AS LB ON SL.kArtikel = LB.kArtikel
WHERE
SL.kVaterArtikel = {{ Vorgang.Artikel.Allgemein.Stammdaten.InterneArtikelnummer }}
ORDER BY
SL.nSort ASC
{% endcapture -%}
{% assign result = query | DirectQuery -%}
<style>
td {
text-align: left;
padding-right: 15px;
border-bottom: 1px solid #ddd;
}
.bold {
font-weight: bold;
}
</style>
<table>
<tr class="bold">
<td>cArtNr</td>
<td>cName</td>
<td>fAnzahl</td>
<td>fVerfuegbar</td>
</tr>
{% for item in result.Daten -%}
<tr>
<td>{{ item.cArtNr }}</td>
<td>{{ item.cName }}</td>
<td>{{ item.fAnzahl }}</td>
<td>{{ item.fVerfuegbar }}</td>
</tr>
{% endfor -%}
</table>
{% else -%}<p>Der Artikel {{ Vorgang.Artikel.Allgemein.Stammdaten.Name }} mit der Artikelnummer {{ Vorgang.Artikel.Allgemein.Stammdaten.ArtNrSku }} muss geprüft werden ggf. nachgebucht werden.</p>
{% endif -%}
hab aber Scheinbar noch ein Problem entdeckt, und zwar haben wir auch Varianten die wieder rum Stücklisten sind. Da scheint das nicht zu funktionieren.
hab aber Scheinbar noch ein Problem entdeckt, und zwar haben wir auch Varianten die wieder rum Stücklisten sind. Da scheint das nicht zu funktionieren.
Damit meinst Du Variationskombinationen, also Kindartikel, die ihrerseits Stücklistenväter sind? Da würde mir nicht mal ein Grund einfallen, warum das da nicht funktionieren sollte.
Damit meinst Du Variationskombinationen, also Kindartikel, die ihrerseits Stücklistenväter sind? Da würde mir nicht mal ein Grund einfallen, warum das da nicht funktionieren sollte.
ich verstehe aber leider auch nicht das wenn ich den workflow Testen möchte, das diverse Artikel da im Vorschlag nicht auftauchen. Auch der Hauptartikel nicht
ich verstehe aber leider auch nicht das wenn ich den workflow Testen möchte, das diverse Artikel da im Vorschlag nicht auftauchen. Auch der Hauptartikel nicht
Gesetzt den Fall, dass der Workflow immer noch bei "Artikel - Warenlagerausgang - Minusbuchung" angelegt ist, werden, wenn man auf "Workflow testen" klickt, nur Warenlagerausgänge angezeigt. Die Liste sieht zwar aus wie eine allgemeine Artikelliste, ist es aber nicht. Ist ein Artikel noch nie ausgebucht worden, taucht er da auch nicht auf. Und wo ich das grad schrieb, kam mit dann die Idee, dass Stücklistenväter womöglich da überhaupt nicht auftauchen, da diese in Wahrheit nicht "ausgebucht" werden, sondern vielmehr die Stücklistenkinder. Und tatsächlich, so scheint es auch zu sein.
Erschwerend hinzu kommt, dass, auch wenn alle Minusbuchungen aufgelistet werden und man auch mit denen testen kann, der Workflow nicht (!) für Minusbuchungen funktioniert, die aus einem Versandprozess resultieren (siehe Beiträge 6, 7 und Ende 8).
Was Du in Beitrag 9 geschrieben hast, war das aus einem realen Prozess heraus oder "nur" aus dem "Workflow testen" heraus?
Gesetzt den Fall, dass der Workflow immer noch bei "Artikel - Warenlagerausgang - Minusbuchung" angelegt ist, werden, wenn man auf "Workflow testen" klickt, nur Warenlagerausgänge angezeigt. Die Liste sieht zwar aus wie eine allgemeine Artikelliste, ist es aber nicht. Ist ein Artikel noch nie ausgebucht worden, taucht er da auch nicht auf. Und wo ich das grad schrieb, kam mit dann die Idee, dass Stücklistenväter womöglich da überhaupt nicht auftauchen, da diese in Wahrheit nicht "ausgebucht" werden, sondern vielmehr die Stücklistenkinder. Und tatsächlich, so scheint es auch zu sein.
Erschwerend hinzu kommt, dass, auch wenn alle Minusbuchungen aufgelistet werden und man auch mit denen testen kann, der Workflow nicht (!) für Minusbuchungen funktioniert, die aus einem Versandprozess resultieren (siehe Beiträge 6, 7 und Ende 8).
Was Du in Beitrag 9 geschrieben hast, war das aus einem realen Prozess heraus oder "nur" aus dem "Workflow testen" heraus?
Also deine Vermutung scheint zu stimmen, auch der Workflow an sich funktioniert nicht mit den Realen umständen.
Was ich aber testen konnte ist wenn ich allein beim Workflow Test ein Bauteil suche und den Artikel nehme wo das in der Beschreibung mit Vorkommt wird das auch umgesetzt. Jetzt ist die Frage wie bekommt man das mit den Workflow umgesetzt.
Also deine Vermutung scheint zu stimmen, auch der Workflow an sich funktioniert nicht mit den Realen umständen.
Was ich aber testen konnte ist wenn ich allein beim Workflow Test ein Bauteil suche und den Artikel nehme wo das in der Beschreibung mit Vorkommt wird das auch umgesetzt. Jetzt ist die Frage wie bekommt man das mit den Workflow umgesetzt.
Hm, dann muss man das Pferd von hinten aufzäumen. Man geht also nicht vom Stücklistenvater aus, sondern von den Stücklistenkindern.
Artikel-Workflow: Prüfung, ob der Artikel zu einer Stückliste gehört. Wenn ja, dann Ausgabe der gesamten Stückliste mit den Verfügbarkeiten aller Stücklistenkinder. Nur: Wenn ein Artikel mehreren Stücklisten angehört, werden auch alle Stücklisten ausgegeben. Das Durchiterieren jeder Stückliste mit jeweiliger in sich geschlossener Ausgabe ist nicht profan.
Wenn auch Ausbuchungen aus Versandprozessen mit einbezogen werden sollen, muss man sich zunächst entscheiden, welcher Moment entscheidend sein soll.
Wenn es der Versandmoment sein soll, dann ein Lieferschein-Workflow, wenn es bereits die Reduzierung von "Verfügbar" sein soll, also Erstellung des Auftrags, dann Auftrags-Workflow: Durchiterieren durch alle Artikel mit Prüfung, ob sie zu einer Stückliste gehören. Weiter wie oben. Hier hat man also ggf. mehrere Artikel, die auch noch ihrerseits zu mehreren Stücklisten gehören können.