Neu Überverkäufe Stücklistenkomponenten - richtiger Status der Stückliste

husky125

Gut bekanntes Mitglied
15. Januar 2013
103
12
Hey...hat jemand eine Idee, wie man auch bei einer Stückliste die Überverkäufe aktiviert bekommt, wenn alle Stücklistenkomponenten dort aktiv sind.

Hintergund ist, dass wir alle Artikel über die Überverkaufsoption updaten ob sie verfügbar sind oder nicht. Nun haben wir leider das Problem, dass die Stückliste an
sich nicht den Überverkaufhaken bekommt, sobald alle Komponenten lieferbar (Überverkauf aktiv) sind. Man könnte vielleicht einen Workflow bauen. Aber der würde
die Performance einbremsen, wenn man 100k Artikel jeden Tag aktualisiert und für jeden der 100.000 Artikel der Workflow arbeiten müsste. Haben wir nämlich probiert.
 

SebastianB

Moderator
Mitarbeiter
6. November 2012
2.083
335
Einen dafür vorgesehenen Weg gibt es meines Wissens nicht - das ist ja eine Verfremdung der eigentlichen Funktion. Man kann auf Datenbankebene eine Menge tun - aber wirklich dazu raten, kann ich nur, wenn man wirklich weiß was man tut...
 

MAJP

Aktives Mitglied
18. März 2021
74
8
hey,
habt ihr einen Weg gefunden habe auch schon geschaut aber leider keine Lösung gefunden
vielen Dank Marvin
 

MAJP

Aktives Mitglied
18. März 2021
74
8
hab des mal mit der Hilfe von KI und dem Forum hinbekommen. War aber auch kurz vorm verzweifeln... ist das ähnlich wie bei dir?

Code:
{% capture query -%}
SELECT DISTINCT
    a2.cLagerKleinerNull
FROM
    tArtikel a
    LEFT JOIN tStueckliste sl ON sl.kVaterArtikel = a.kArtikel
    LEFT JOIN tArtikel a2 ON a2.kArtikel = sl.kArtikel
WHERE
    a.kArtikel = {{ Vorgang.Allgemein.Stammdaten.InterneArtikelnummer }}
{% endcapture -%}
{% assign result = query | DirectQueryScalar -%}
{% assign result = query | DirectQuery -%}
{% for item in result.Daten -%}
{{ item.cLagerKleinerNull }}
{% endfor -%}
 

jtldudel

Sehr aktives Mitglied
4. Januar 2018
527
174
Mein Gedanke: SQL Abfrage in einem Skript sucht nach Artikeln die Stücklisten sind und dessen Komponenten alle Überverkäufe eingeschaltet hat. Dieses Skript gibt dann eine Datei mit der Artikel ID der Stückliste aus und importiert diese via Ameise.

Das gleiche Skript kann ich dann auch andersherum bauen - wenn nicht alle Komponenten Überverkäufe aktiv haben, muss der Haken raus.

Das Skript liegt auf dem Server und wird von der Windows Ausgabenplanung alle 15 Minuten ausgelöst (oder so, das bleibt einem ja selbst überlassen).
Vorteil an dem Skript ist, das es auch nur die Artikel importiert die betroffen sind, kein Workflow der jeden Artikel prüfen muss. Beim import mit der Ameise kann auch eingestellt werden das keine Artikelworkflows ausgelöst werden sollen, sollte man da welche haben. Die SQL Abfrage sollte kein großes Performance Problem darstellen. Ameisen Import deshalb, weil ich nicht weiß ob man einfach den flag in der DB setzen kann und dann z.b. auch getriggert wird das diese Änderungen an alle Plattformen übermittel werden muss.

Bin am Handy und kann die Abfrage nicht schreiben gerade, aber da findet sich jemand im Forum denke ich
 

TF1

Aktives Mitglied
30. Oktober 2012
29
0
Hallo,
hat es jemand hinbekommen?
Habe das gleiche Problem,


Im Shop ist der Artikel aber trotzdem bestellbar. Auch wenn ein Stücklistenartikel seinen Status Überverkauf ermöglicht auf Grund vom Lieferantenbestand =0 verliert.
Es wird zwar angezeigt das der Artikel zurzeit vergriffen ist (wird übersehen und kann ja trotzdem bestellt werden)

Möglichkeit 1:
Ein Skript, welches den Artikel komplett Überverkauf ermöglicht auf nein setzt, wenn ein Stücklisten Artikel Überverkauf ermöglicht Nein bekommt.

Aber ich habe keine Ahnung wie ich das machen soll?
 

TF1

Aktives Mitglied
30. Oktober 2012
29
0
Hey...hat jemand eine Idee, wie man auch bei einer Stückliste die Überverkäufe aktiviert bekommt, wenn alle Stücklistenkomponenten dort aktiv sind.

Hintergund ist, dass wir alle Artikel über die Überverkaufsoption updaten ob sie verfügbar sind oder nicht. Nun haben wir leider das Problem, dass die Stückliste an
sich nicht den Überverkaufhaken bekommt, sobald alle Komponenten lieferbar (Überverkauf aktiv) sind. Man könnte vielleicht einen Workflow bauen. Aber der würde
die Performance einbremsen, wenn man 100k Artikel jeden Tag aktualisiert und für jeden der 100.000 Artikel der Workflow arbeiten müsste. Haben wir nämlich probiert.
Guten Morgen, haben Sie das Problem gelöst? Eine Hilfe wäre Mega oder vieleicht einen Kontakt, Danke!
 

TF1

Aktives Mitglied
30. Oktober 2012
29
0
hab des mal mit der Hilfe von KI und dem Forum hinbekommen. War aber auch kurz vorm verzweifeln... ist das ähnlich wie bei dir?

Code:
{% capture query -%}
SELECT DISTINCT
    a2.cLagerKleinerNull
FROM
    tArtikel a
    LEFT JOIN tStueckliste sl ON sl.kVaterArtikel = a.kArtikel
    LEFT JOIN tArtikel a2 ON a2.kArtikel = sl.kArtikel
WHERE
    a.kArtikel = {{ Vorgang.Allgemein.Stammdaten.InterneArtikelnummer }}
{% endcapture -%}
{% assign result = query | DirectQueryScalar -%}
{% assign result = query | DirectQuery -%}
{% for item in result.Daten -%}
{{ item.cLagerKleinerNull }}
{% endfor -%}
Hallo, bekomme hier schon einen Fehler:
{% capture query -%}
SELECT DISTINCT
a2.cLagerKleinerNull
 

mvh

Sehr aktives Mitglied
26. Oktober 2011
638
208
Moin.
SQL:
SELECT ta.cArtNr, cLagerKleinerNull
FROM eazybusiness.dbo.tArtikel ta
INNER JOIN (
SELECT DISTINCT kVaterArtikel, kStueckliste FROM eazybusiness.dbo.tStueckliste ts WHERE ts.kArtikel
IN (SELECT kArtikel FROM eazybusiness.dbo.tArtikel WHERE cLagerKleinerNull='N' and cAktiv='Y')
) ta2 ON (ta.kStueckliste=ta2.kStueckliste)
WHERE cLagerKleinerNull='Y' and cAktiv='Y'
Hier ist eine SQL-Abfrage für alle Stücklisten mit Überverkauf=Ja, wo bei einer der Komponenten Überverkauf = Nein steht.

Wenn die Ergebnisse deiner Erwartung entsprechen - kann ich dir das UPDATE-Skript geben.
Wir haben auch den Skript für die andere Richtung - wenn alle Komponenten auf Ja stehen und die Stückliste selbst auf Nein.
 

mvh

Sehr aktives Mitglied
26. Oktober 2011
638
208
Einen dafür vorgesehenen Weg gibt es meines Wissens nicht - das ist ja eine Verfremdung der eigentlichen Funktion. Man kann auf Datenbankebene eine Menge tun - aber wirklich dazu raten, kann ich nur, wenn man wirklich weiß was man tut...
Moin.
Da muss ich Dir widersprechen.
Den Code gab es früher (vor 1.5 ?) in tartikel-Trigger tgr_tartikel_INSUP und er wurde damals von JTL entfernt.
Wir haben es wieder eingebaut und etwas modifiziert - und es läuft weiter.
Uns noch etwas - für die cTeilbar-Spalte werden die Stücklisten geändert und für cLagerKleinerNull-Spalte - nicht. Warum ?
 

forumjtlolshopag

Sehr aktives Mitglied
6. Juni 2018
614
163
Wurde hier ein Verhalten verändert? Wir arbeiten noch mit 1.5. Dort ist es doch so, das sobald alle Bestandteile einer Stückliste Überverkauf haben, die Stückliste automatisch Überverkauf bekommt. Oder ich verwechsele gerade etwas...
 

mvh

Sehr aktives Mitglied
26. Oktober 2011
638
208
Wenn ich JTL wäre, würde ich dem Benutzer selbst die Entscheidung überlassen, ob er das alte Verhalten beibehalten will oder nicht,
und hätte eine Option in der WaWi dafür eingebaut.
 

TF1

Aktives Mitglied
30. Oktober 2012
29
0
Moin.
SQL:
SELECT ta.cArtNr, cLagerKleinerNull
FROM eazybusiness.dbo.tArtikel ta
INNER JOIN (
SELECT DISTINCT kVaterArtikel, kStueckliste FROM eazybusiness.dbo.tStueckliste ts WHERE ts.kArtikel
IN (SELECT kArtikel FROM eazybusiness.dbo.tArtikel WHERE cLagerKleinerNull='N' and cAktiv='Y')
) ta2 ON (ta.kStueckliste=ta2.kStueckliste)
WHERE cLagerKleinerNull='Y' and cAktiv='Y'
Hier ist eine SQL-Abfrage für alle Stücklisten mit Überverkauf=Ja, wo bei einer der Komponenten Überverkauf = Nein steht.

Wenn die Ergebnisse deiner Erwartung entsprechen - kann ich dir das UPDATE-Skript geben.
Wir haben auch den Skript für die andere Richtung - wenn alle Komponenten auf Ja stehen und die Stückliste selbst auf Nein.
Hallo, super genau das brauche ich, in beide Richtungen. Das wäre Mega, vielen Dank!!
 

mvh

Sehr aktives Mitglied
26. Oktober 2011
638
208
Hallo, super genau das brauche ich, in beide Richtungen. Das wäre Mega, vielen Dank!!
Ok. Überverkauf von Ja auf Nein.
Wie gesagt - ohne Gewähr, nur für SQL-Profis.
SQL:
--Überverkauf Ja, in Stückliste eine der Komponenten Nein--
--SELECT--
SELECT ta.cArtNr, cLagerKleinerNull
FROM eazybusiness.dbo.tArtikel ta
INNER JOIN (
SELECT DISTINCT kVaterArtikel, kStueckliste FROM eazybusiness.dbo.tStueckliste ts WHERE ts.kArtikel
IN (SELECT kArtikel FROM eazybusiness.dbo.tArtikel WHERE cLagerKleinerNull='N' and cAktiv='Y')
) ta2 ON (ta.kStueckliste=ta2.kStueckliste)
WHERE cLagerKleinerNull='Y' and cAktiv='Y'

--UPDATE--
UPDATE ta SET cLagerKleinerNull='N'
FROM eazybusiness.dbo.tArtikel ta
INNER JOIN (
SELECT DISTINCT kVaterArtikel, kStueckliste FROM eazybusiness.dbo.tStueckliste ts WHERE ts.kArtikel
IN (SELECT kArtikel FROM eazybusiness.dbo.tArtikel WHERE cLagerKleinerNull='N' and cAktiv='Y')
) ta2 ON (ta.kStueckliste=ta2.kStueckliste)
WHERE cLagerKleinerNull='Y' and cAktiv='Y'
 

mvh

Sehr aktives Mitglied
26. Oktober 2011
638
208
Und die andere Richtung.
SQL:
--Andere Richtung Überverkauf Nein, aber alle Komponenten Ja--
--SELECT--
SELECT ta.cArtNr, cLagerKleinerNull
FROM eazybusiness.dbo.tArtikel ta
INNER JOIN (
SELECT ts.kStueckliste FROM eazybusiness.dbo.tStueckliste ts
INNER JOIN eazybusiness.dbo.tArtikel tsa ON ts.kArtikel=tsa.kArtikel
GROUP BY ts.kStueckliste
HAVING COUNT(ts.kArtikel)=SUM(CASE WHEN tsa.cLagerKleinerNull='Y' THEN 1 ELSE 0 END)
)ta2 ON (ta.kStueckliste=ta2.kStueckliste)
WHERE cLagerKleinerNull='N' and cAktiv='Y'

--UPDATE--
UPDATE ta SET clagerKleinerNull='Y'
FROM eazybusiness.dbo.tArtikel ta
INNER JOIN (
SELECT ts.kStueckliste FROM eazybusiness.dbo.tStueckliste ts
INNER JOIN eazybusiness.dbo.tArtikel tsa ON ts.kArtikel=tsa.kArtikel
GROUP BY ts.kStueckliste
HAVING COUNT(ts.kArtikel)=SUM(CASE WHEN tsa.cLagerKleinerNull='Y' THEN 1 ELSE 0 END)
)ta2 ON (ta.kStueckliste=ta2.kStueckliste)
WHERE cLagerKleinerNull='N' and cAktiv='Y'
 

TF1

Aktives Mitglied
30. Oktober 2012
29
0
Und die andere Richtung.
SQL:
--Andere Richtung Überverkauf Nein, aber alle Komponenten Ja--
--SELECT--
SELECT ta.cArtNr, cLagerKleinerNull
FROM eazybusiness.dbo.tArtikel ta
INNER JOIN (
SELECT ts.kStueckliste FROM eazybusiness.dbo.tStueckliste ts
INNER JOIN eazybusiness.dbo.tArtikel tsa ON ts.kArtikel=tsa.kArtikel
GROUP BY ts.kStueckliste
HAVING COUNT(ts.kArtikel)=SUM(CASE WHEN tsa.cLagerKleinerNull='Y' THEN 1 ELSE 0 END)
)ta2 ON (ta.kStueckliste=ta2.kStueckliste)
WHERE cLagerKleinerNull='N' and cAktiv='Y'

--UPDATE--
UPDATE ta SET clagerKleinerNull='Y'
FROM eazybusiness.dbo.tArtikel ta
INNER JOIN (
SELECT ts.kStueckliste FROM eazybusiness.dbo.tStueckliste ts
INNER JOIN eazybusiness.dbo.tArtikel tsa ON ts.kArtikel=tsa.kArtikel
GROUP BY ts.kStueckliste
HAVING COUNT(ts.kArtikel)=SUM(CASE WHEN tsa.cLagerKleinerNull='Y' THEN 1 ELSE 0 END)
)ta2 ON (ta.kStueckliste=ta2.kStueckliste)
WHERE cLagerKleinerNull='N' and cAktiv='Y'
Okay, Vielen DANK!!