In Diskussion Bestand aus bestimmten Lager bei Auftragserstellung abfragen

Sizzoe

Aktives Mitglied
29. Mai 2024
9
1
Hallo zusammen,

ich habe verschiedene WMS-Lager in Verwendung.
Grundsätzlich handelt es hierbei um zweierlei Lagertypen:
  1. "Vor-Ort-Lager"
  2. "Außenlager"
Zweck des Workflows ist es, eine Benachrichtigung zu erstellen, wenn der "Vor-Ort-Lagerbestand" einen gewissen Wert erreicht bzw. unterschreitet, damit man rechtzeitig eine Umlagerung anstoßen kann.

Quasi: Wenn Bestand von Artikel X in Lager "Vor-Ort" <= 100, dann sende E-Mail mit:

1. Artikelnamen der betroffenen Artikel
2. "Vor-Ort-Bestände" der betroffenen Artikel
3. Einem Hinweis, dass umgelagert werden soll

Ich habe verschiedene Scripte erstellt und getestet, leider erfolglos.

Wenn mir jemand sagen könnte, wie ich die Bestände der Auftragsartikel in einem bestimmten Lager (Per Nummer oder Kürzel identifizieren) abrufen kann - das würde mir sehr helfen und ausreichen.

Danke an Alle und viele Grüße!
Sizzoe
 

frankell

Sehr aktives Mitglied
9. September 2019
2.685
840
Flensburg
Hallo @Sizzoe,

bei der Bedingung eine Erweiterte Eigenschaft nutzen mit Rückgabetyp Boolean und dem folgenden Code:

Code:
{% assign Umlagerung = false -%}
{% for Artikelbeschreibungen in Vorgang.AuftragsPositionen.ArtikelPositionen -%}
{% capture query -%}
SELECT
    CASE WHEN fBestand < 100 THEN 'true'
    ELSE 'False'
    END
FROM
    tlagerbestandProLagerLagerartikel
WHERE
    kArtikel = {{ Artikelbeschreibungen.InterneArtikelnummer | SqlEscape }}
    AND kWarenlager = (
        SELECT
            kWarenlager
        FROM
            tWarenLager
        WHERE
            cName = 'Vor-Ort-Lager'
    );
{% endcapture -%}
{% assign result = query | DirectQueryScalar -%}
{% if result == 'true' -%}
{% assign Umlagerung = true -%}
{% endif -%}
{% endfor -%}
{{ Umlagerung }}

Im Mailtext dann den Code in geänderter Form verwenden:

Code:
Umzulagern (ArtNr, ArtName, Bestand):
{% for Artikelbeschreibungen in Vorgang.AuftragsPositionen.ArtikelPositionen -%}
{% capture query -%}
SELECT
    CAST(fBestand AS INT)
FROM
    tlagerbestandProLagerLagerartikel
WHERE
    kArtikel = {{ Artikelbeschreibungen.InterneArtikelnummer | SqlEscape }}
    AND kWarenlager = (
        SELECT
            kWarenlager
        FROM
            tWarenLager
        WHERE
            cName = 'Vor-Ort-Lager'
    );
{% endcapture -%}
{% assign result = query | DirectQueryScalar -%}
{% if result < 100 -%}
{{ Artikelbeschreibungen.Artikelnummer }}, {{ Artikelbeschreibungen.Artikelbezeichnung }}, {{ result }}
{% endif -%}
{% endfor -%}
 
  • Ich liebe es
Reaktionen: Sizzoe

Sizzoe

Aktives Mitglied
29. Mai 2024
9
1
Hallo @Sizzoe,

bei der Bedingung eine Erweiterte Eigenschaft nutzen mit Rückgabetyp Boolean und dem folgenden Code:

Code:
{% assign Umlagerung = false -%}
{% for Artikelbeschreibungen in Vorgang.AuftragsPositionen.ArtikelPositionen -%}
{% capture query -%}
SELECT
    CASE WHEN fBestand < 100 THEN 'true'
    ELSE 'False'
    END
FROM
    tlagerbestandProLagerLagerartikel
WHERE
    kArtikel = {{ Artikelbeschreibungen.InterneArtikelnummer | SqlEscape }}
    AND kWarenlager = (
        SELECT
            kWarenlager
        FROM
            tWarenLager
        WHERE
            cName = 'Vor-Ort-Lager'
    );
{% endcapture -%}
{% assign result = query | DirectQueryScalar -%}
{% if result == 'true' -%}
{% assign Umlagerung = true -%}
{% endif -%}
{% endfor -%}
{{ Umlagerung }}

Im Mailtext dann den Code in geänderter Form verwenden:

Code:
Umzulagern (ArtNr, ArtName, Bestand):
{% for Artikelbeschreibungen in Vorgang.AuftragsPositionen.ArtikelPositionen -%}
{% capture query -%}
SELECT
    CAST(fBestand AS INT)
FROM
    tlagerbestandProLagerLagerartikel
WHERE
    kArtikel = {{ Artikelbeschreibungen.InterneArtikelnummer | SqlEscape }}
    AND kWarenlager = (
        SELECT
            kWarenlager
        FROM
            tWarenLager
        WHERE
            cName = 'Vor-Ort-Lager'
    );
{% endcapture -%}
{% assign result = query | DirectQueryScalar -%}
{% if result < 100 -%}
{{ Artikelbeschreibungen.Artikelnummer }}, {{ Artikelbeschreibungen.Artikelbezeichnung }}, {{ result }}
{% endif -%}
{% endfor -%}
Guten Morgen frankell,

vielen lieben Dank (schon wieder 🙂 )!

Habe es getestet - funktioniert!

Ich wünsche einen angenehmen Tag und sende viele Grüße!
Sizzoe
 

Sizzoe

Aktives Mitglied
29. Mai 2024
9
1
Falls jemand ein ähnliches Anliegen hat. Ich habe hier die Prüfung auf einen bestimmten Kunden und gegen den Mindestbestand ergänzt:

Code:
{% assign Umlagerung = false -%}
{% if Vorgang.Stammdaten.Kunde.InterneKundennummer == 'Hier_die_interne_Kundennummer' -%}
    {% for Artikelbeschreibungen in Vorgang.AuftragsPositionen.ArtikelPositionen -%}
    {% capture query -%}
    SELECT
        CASE
            WHEN lb.fBestand < a.nMidestbestand THEN 'true'
            ELSE 'False'
        END AS BestandCheck
    FROM
        tlagerbestandProLagerLagerartikel lb
    JOIN
        tArtikel a ON lb.kArtikel = a.kArtikel
    WHERE
        lb.kArtikel = {{ Artikelbeschreibungen.InterneArtikelnummer | SqlEscape }}
        AND lb.kWarenlager = (
            SELECT
                kWarenlager
            FROM
                tWarenLager
            WHERE
                cName = 'Hier_der_Name_des_Lagers'
        );
    {% endcapture -%}
    {% assign result = query | DirectQueryScalar -%}
    {% if result == 'true' -%}
    {% assign Umlagerung = true -%}
    {% endif -%}
    {% endfor -%}
{% endif -%}   
{{ Umlagerung }}

Sodass der Mailcode dann wie folgt aussieht:
Code:
{% for Artikelbeschreibungen in Vorgang.AuftragsPositionen.ArtikelPositionen -%}
  {% capture queryBestand -%}
    SELECT CAST(fBestand AS INT)
    FROM tlagerbestandProLagerLagerartikel
    WHERE kArtikel = {{ Artikelbeschreibungen.InterneArtikelnummer | SqlEscape }}
      AND kWarenlager = (
        SELECT kWarenlager
        FROM tWarenLager
        WHERE cName = 'Hier_der_Name_des_Lagers'
      );
  {% endcapture -%}
  {% assign resultBestand = queryBestand | DirectQueryScalar | plus: 0 -%}

  {% capture queryMindestbestand -%}
    SELECT CAST(nMidestbestand AS INT)
    FROM tArtikel
    WHERE kArtikel = {{ Artikelbeschreibungen.InterneArtikelnummer | SqlEscape }};
  {% endcapture -%}
  {% assign resultMindestbestand = queryMindestbestand | DirectQueryScalar | plus: 0 -%}

  {% if resultBestand < resultMindestbestand -%}
    <br><b>Artikelnummer:</b> {{ Artikelbeschreibungen.Artikelnummer }}<br>
    <b>Artikelname:</b> {{ Artikelbeschreibungen.Artikelbezeichnung }}<br>
    <b>Vor-Ort-Bestand:</b> {{ resultBestand }}<br>
    <b>Mindestbestand:</b> {{ resultMindestbestand }}<br>
  {% endif -%}
{% endfor -%}

VG
Sizzoe
 
  • Gefällt mir
Reaktionen: frankell

frankell

Sehr aktives Mitglied
9. September 2019
2.685
840
Flensburg
Guten Morgen frankell,

vielen lieben Dank (schon wieder 🙂 )!

Habe es getestet - funktioniert!

Ich wünsche einen angenehmen Tag und sende viele Grüße!
Sizzoe

Gerne.

Noch eine Minikorrektur, die zwar im vorliegenden Fall egal ist, aber falls mal jemand die Logik umdrehen und mit False arbeiten möchte/muss:

Dann müsste aus "False" immer "false" werden.
 

frankell

Sehr aktives Mitglied
9. September 2019
2.685
840
Flensburg
Falls jemand ein ähnliches Anliegen hat. Ich habe hier die Prüfung auf einen bestimmten Kunden und gegen den Mindestbestand ergänzt:

{% if Vorgang.Stammdaten.Kunde.InterneKundennummer == 'Hier_die_interne_Kundennummer' -%}

Danke für die Erweiterung!

Die wenigsten dürften wissen, was die "interne" Kundennummer ist und wie man die herausfindet, daher vielleicht eher:

Code:
{% if Vorgang.Stammdaten.Kunde.Kundennummer == 'Hier_die_Kundennummer' -%}
 

Ähnliche Themen