[gelöst]Artikel Lagerbestand via EMail nach Freigabe...

31. März 2021 14:16

Hallo,

ich habe eine Funktion erstellt die nach Freigabe vom VK Auftrag eine EMail versendet wird. Funktioniert wunderbar.

Code:
SmtpMailSetup_lRec.GET;
Recipients_lTxt := 'ich@meinedomain.com';
Subject_lTxt := ('Neuer Verkaufsauftrag' + ' ' +"No." + ' '+  "Sell-to Customer Name" +' | '+ 'Mandant: ' + COMPANYNAME);

SalesLineL.SETRANGE("Document No.","No.");
SalesLineL.SETRANGE(Type,SalesLineL.Type::Item);

IF SalesLineL.FINDSET THEN BEGIN


 SMTPMail_lCdu.CreateMessage('NAV ADMIN',
                            'admin@meinedomain.com',
                            Recipients_lTxt,
                            Subject_lTxt,
                            Body_lTxt,
                            TRUE);
 SMTPMail_lCdu.AppendBody('ACHTUNG: Ein neuer Verkaufsauftrag wurde von '+ COPYSTR(USERID,STRPOS(USERID,'\')+1) +' '+ 'freigegeben. Nr.: '+' ' + "No."  +'  '+ 'Deb.- Nummer: '+ "Sell-to Customer No.");
 SMTPMail_lCdu.AppendBody('<br>');
 SMTPMail_lCdu.AppendBody('Geplantes Warenausgangsdatum: ' + FORMAT("gepl.WA Datum (Zeile)"));
 SMTPMail_lCdu.AppendBody('<br>');
 SMTPMail_lCdu.AppendBody(STRSUBSTNO('Folgende Artikel sind enthalten:',"No."));
 SMTPMail_lCdu.AppendBody('<br><br>');
 SMTPMail_lCdu.AppendBody('<table border="1">');
 SMTPMail_lCdu.AppendBody('<tr>');
 SMTPMail_lCdu.AppendBody('<th>Artikelnummer</th>');
 SMTPMail_lCdu.AppendBody('<th>Beschreibung</th>');
 SMTPMail_lCdu.AppendBody('<th>Menge</th>');
 SMTPMail_lCdu.AppendBody('</tr>');
   REPEAT
   SMTPMail_lCdu.AppendBody('<tr>');
   SMTPMail_lCdu.AppendBody('<td>'+SalesLineL."No."+'</td>');
   SMTPMail_lCdu.AppendBody('<td>'+SalesLineL.Description+'</td>');
   SMTPMail_lCdu.AppendBody('<td>'+FORMAT(SalesLineL.Quantity)+'</td>');
   SMTPMail_lCdu.AppendBody('</tr>');
   SMTPMail_lCdu.AppendBody('<br>');
   UNTIL SalesLineL.NEXT = 0;
   SMTPMail_lCdu.Send;
END;


Nun ist es gewünscht, dass auch der aktuelle Lagerbestand mitgesendet wird.
Habe dazu in Tabelle 37 Sales Line ein Flowfield "Inventory" angelegt. Die CalcFormula fast 1:1 wie in der Itemtabelle verwendet. In der Page 46 das Feld eingeblendet und der Lagerbestand wird richtig angezeigt.

Nun habe ich meine EMail Funktion um das neue Feld erweitert

Code:
SmtpMailSetup_lRec.GET;
Recipients_lTxt := 'ich@meinedomain.com';
Subject_lTxt := ('Neuer Verkaufsauftrag' + ' ' +"No." + ' '+  "Sell-to Customer Name" +' | '+ 'Mandant: ' + COMPANYNAME);

SalesLineL.SETRANGE("Document No.","No.");
SalesLineL.SETRANGE(Type,SalesLineL.Type::Item);

IF SalesLineL.FINDSET THEN BEGIN
 SMTPMail_lCdu.CreateMessage('NAV ADMIN',
                            'admin@meinedomain.com',
                            Recipients_lTxt,
                            Subject_lTxt,
                            Body_lTxt,
                            TRUE);
 SMTPMail_lCdu.AppendBody('ACHTUNG: Ein neuer Verkaufsauftrag wurde von '+ COPYSTR(USERID,STRPOS(USERID,'\')+1) +' '+ 'freigegeben. Nr.: '+' ' + "No."  +'  '+ 'Deb.- Nummer: '+ "Sell-to Customer No.");
 SMTPMail_lCdu.AppendBody('<br>');
 SMTPMail_lCdu.AppendBody('Geplantes Warenausgangsdatum: ' + FORMAT("gepl.WA Datum (Zeile)"));
 SMTPMail_lCdu.AppendBody('<br>');
 SMTPMail_lCdu.AppendBody(STRSUBSTNO('Folgende Artikel sind enthalten:',"No."));
 SMTPMail_lCdu.AppendBody('<br><br>');
 SMTPMail_lCdu.AppendBody('<table border="1">');
 SMTPMail_lCdu.AppendBody('<tr>');
 SMTPMail_lCdu.AppendBody('<th>Artikelnummer</th>');
 SMTPMail_lCdu.AppendBody('<th>Beschreibung</th>');
 SMTPMail_lCdu.AppendBody('<th>Menge</th>');
[color=#FF0000] SMTPMail_lCdu.AppendBody('<th>aktueller Lagerbestand</th>');[/color]
 SMTPMail_lCdu.AppendBody('</tr>');
   REPEAT
   SMTPMail_lCdu.AppendBody('<tr>');
   SMTPMail_lCdu.AppendBody('<td>'+SalesLineL."No."+'</td>');
   SMTPMail_lCdu.AppendBody('<td>'+SalesLineL.Description+'</td>');
   SMTPMail_lCdu.AppendBody('<td>'+FORMAT(SalesLineL.Quantity)+'</td>');
   [color=#FF0000]SMTPMail_lCdu.AppendBody('<td>'+FORMAT(SalesLineL.Inventory)+'</td>');[/color]
   SMTPMail_lCdu.AppendBody('</tr>');
   SMTPMail_lCdu.AppendBody('<br>');
   UNTIL SalesLineL.NEXT = 0;
   SMTPMail_lCdu.Send;
END;


aber der Lagerbestand in der EMail die versendet wird bzw. ankommt ist immer 0.

Habt ihr eine Idee warum und wie mein Code aussehen muss damit der Lagerbestand richtig mitgesendet wird?

habe hier nach REPEAT das Feld als CALCFIELD definiert. Ist aber wahrscheinlich nicht richtig.

Code:
...
 SMTPMail_lCdu.AppendBody('<th>aktueller Lagerbestand</th>');
 SMTPMail_lCdu.AppendBody('</tr>');
   REPEAT
   [color=#FF0000]SalesLineL.CALCFIELDS(SalesLineL.Inventory);[/color]
   SMTPMail_lCdu.AppendBody('<tr>');
   SMTPMail_lCdu.AppendBody('<td>'+SalesLineL."No."+'</td>');
   SMTPMail_lCdu.AppendBody('<td>'+SalesLineL.Description+'</td>');
   SMTPMail_lCdu.AppendBody('<td>'+FORMAT(SalesLineL."Quantity Base Unit (CGG)")+'</td>');
   SMTPMail_lCdu.AppendBody('<td>'+FORMAT(SalesLineL.Inventory)+'</td>');
   SMTPMail_lCdu.AppendBody('</tr>');
   SMTPMail_lCdu.AppendBody('<br>');
   UNTIL SalesLineL.NEXT = 0;
   SMTPMail_lCdu.Send;
END;


Oder gibt es eine andere elegantere Methode den Lagerbestand direkt in der EMail Funktion pro VK-Zeile zu kalkulieren ohne die Feldanlage in Tabelle 37?

Herzlichen Dank

Beste Grüße
Robert
Zuletzt geändert von Raban am 9. April 2021 07:29, insgesamt 1-mal geändert.

Re: Artikel Lagerbestand via EMail nach Freigabe VK Auftrag

2. April 2021 21:28

Raban hat geschrieben:...Habe dazu in Tabelle 37 Sales Line ein Flowfield "Inventory" angelegt. Die CalcFormula fast 1:1 wie in der Itemtabelle verwendet. In der Page 46 das Feld eingeblendet und der Lagerbestand wird richtig angezeigt...

Ist es denn unbedingt notwendig, den Lagerbestand in der Auftragszeile anzuzeigen? Es gibt ja bereits rechts in der Factbox die Anzeige der verfügbaren Menge.

Raban hat geschrieben:...Oder gibt es eine andere elegantere Methode den Lagerbestand direkt in der EMail Funktion pro VK-Zeile zu kalkulieren ohne die Feldanlage in Tabelle 37?...


Definitv. So sollte es funktionieren. Wenn nicht einfach den Debugger anschmeißen.

Code:
    ...
     SMTPMail_lCdu.AppendBody('<th>aktueller Lagerbestand</th>');
     SMTPMail_lCdu.AppendBody('</tr>');
       REPEAT
     // Wir holen den Artikel und berechnen das Feld Lagerbestand für den Lagerort im Auftrag
       ItemL.GET(SalesLineL."No.");
       ItemL.Setrange("Location Filter", SalesLineL."Location Code");
       ItemL.CALCFIELDS(Inventory);

       SMTPMail_lCdu.AppendBody('<tr>');
       SMTPMail_lCdu.AppendBody('<td>'+SalesLineL."No."+'</td>');
       SMTPMail_lCdu.AppendBody('<td>'+SalesLineL.Description+'</td>');
       SMTPMail_lCdu.AppendBody('<td>'+FORMAT(SalesLineL."Quantity Base Unit (CGG)")+'</td>');
       SMTPMail_lCdu.AppendBody('<td>'+FORMAT(ItemL.Inventory)+'</td>');
       SMTPMail_lCdu.AppendBody('</tr>');
       SMTPMail_lCdu.AppendBody('<br>');
       UNTIL SalesLineL.NEXT = 0;
       SMTPMail_lCdu.Send;
    END;



Raban hat geschrieben:...habe hier nach REPEAT das Feld als CALCFIELD definiert. Ist aber wahrscheinlich nicht richtig...

Eigentlich sollte es so schon funktionieren. Die Frage ist, ob alle Filter richtig gesetzt sind.

Re: Artikel Lagerbestand via EMail nach Freigabe VK Auftrag

9. April 2021 07:28

m_schneider hat geschrieben:Ist es denn unbedingt notwendig, den Lagerbestand in der Auftragszeile anzuzeigen?

nein natürlich nicht. Habe das schon wieder aus der Tabelle gelöscht.
m_schneider hat geschrieben:Eigentlich sollte es so schon funktionieren. Die Frage ist, ob alle Filter richtig gesetzt sind.

funktioniert so herrvoragend.

Vielen Dank für deine Hilfe
Beste Grüße
Robert