Mercator maakt het mogelijk om prijzen (of andere numerieke waarden) te (her)berekenen volgens de nomenclatuur die is gedefinieerd in gekoppelde artikelen. Dit wordt gedaan met deze methoden die beschikbaar zijn in MercatorUi.Sig.SigStock.
public bool RecomputeNomenclature(string column, int decimals, out int modifiedItems, out string error, string whereClauseOnStock = null, string whereClauseOnArtLiens = null)
public bool RecomputeNomenclature(string[] columns, int decimals, out int modifiedItems, out string error, string whereClauseOnStock = null, string whereClauseOnArtLiens = null)
public void RecomputeNomenclature(Forms.Sig.SigForm sigForm, string column, int decimals, string whereClauseOnArtLiens = null)
public void RecomputeNomenclature(Forms.Sig.SigForm sigForm, string[] columns, int decimals, string whereClauseOnArtLiens = null)
De eerste twee methodehandtekeningen zijn algemeen en kunnel overal in Mercator worden gebruikt. De andere twee worden gebruikt om een artikelfiche bovenaan de nomenclatuur opnieuw te berekenen.
De parameters zijn:
- column : de naam van de kolom in de STOCK-tabel die moet worden opgeteld volgens de hoeveelheden in ARTLIENS. (Voorbeelden: S_DPA, S_PMPA, S_PRIX_REV, ...)
- columns : hetzelfde, maar mogelijkheid om meerdere kolomnamen door te geven. Bv: new string[3] { "S_DPA", "S_PMPA", "S_PRIX_REV" }
- decimals :het aantal decimalen voor afronding
- whereClauseOnStock (optioneel) : een geldige SQL where-clausule in de STOCK-tabel waarmee je de artikelen kunt bepalen waarvoor je deze berekening wilt uitvoeren.
- whereClauseOnArtLiens (optioneel) : een geldige SQL where-clausule in de ARTLIENS-tabel waarmee je de onderdelen kunt bepalen waarmee rekening moet worden gehouden bij de herberekening. Indien aanwezig moet deze parameter artliens bevatten. (hoofdlettergevoelig) Bijvoorbeeld, om alleen productiecomponenten in aanmerking te nemen:
artliens.prod=1
Als er prijsformules zijn gekoppeld aan de gewijzigde artikelen, worden deze automatisch opnieuw toegepast. (Omdat dit opnieuw toepassen van deze C# scripts meestal nodig is, rechtvaardigt dit het feit dat deze herberekening niet wordt uitgevoerd op de SQL database.)
Vanaf een knop in het artikelinformatiebestand
Plaats deze code gewoon in een knop die is toegevoegd aan het informatiebestand van het artikel.
public static void Exec(MercatorUi.MovableControls.MovableButton clickedButton)
{
// enter your customized code here
MercatorUi.Forms.Sig.SigForm sigForm = (MercatorUi.Forms.Sig.SigForm)clickedButton.Form;
((MercatorUi.Sig.SigStock)sigForm.Sig).RecomputeNomenclature(sigForm, "S_DPA", 2, whereClauseOnArtLiens: "artliens.mycondition = 1");
}
Als de herberekening meerdere fiches wijzigt (in componenten op lagere niveaus, die zelf samengesteld zijn), dan zal Mercator voorstellen om deze fiches te filteren om de aangebrachte wijzigingen te zien.
Merk op dat deze herberekening altijd begint bij een artikel dat bovenaan de nomenclatuur staat, d.w.z. dat zelf niet als component wordt gebruikt. Als dit niet het geval is, geeft Mercator "Geen artikels gewijzigd!" aan.
Vanaf elke locatie in Mercator
Deze code wordt gebruikt om een selectie van artikels opnieuw te berekenen.
MercatorUi.Sig.SigStock sigStock = MercatorUi.Sig._SigsStatic.SigByModule<MercatorUi.Sig.SigStock>();
if (sigStock.RecomputeNomenclature("S_DPA", 2, out int modifiedItems, out string error, whereClauseOnStock: "s_produitfini = 1", whereClauseOnArtLiens: "artliens.mycondition=1"))
MercatorUi.Dialogs.Stop("Artikels gewijzigd: " + modifiedItems);
else
MercatorUi.Dialogs.Stop(error);
Deze code kan het beste automatisch worden uitgevoerd door een taak in consolemodus.
namespace Main
{
public class Customizer
{
public void RecomputeNomenclature()
{
MercatorUi.Sig.SigStock sigStock = MercatorUi.Sig._SigsStatic.SigByModule<MercatorUi.Sig.SigStock>();
if (sigStock.RecomputeNomenclature("S_DPA", 2, out int modifiedItems, out string error, whereClauseOnStock: "s_produitfini = 1", whereClauseOnArtLiens: "artliens.mycondition=1"))
MercatorUi.Globals.MercatorTasksToMain.Log("Artikels gewijzigd: " + modifiedItems);
else
MercatorUi.Globals.MercatorTasksToMain.Log(error, isError: true);
}
}
}
In het ini-bestand:
Task1 = RecomputeNomenclature