U bevindt zich nu op een technische pagina over de software Mercator. Deze pagina bevat specifieke informatie die bestemd is voor professionals van de software Mercator. Wenst u naar algemenere informatie over Mercator door te gaan?


   Deze vraag niet meer stellen

Verstrekking van gegevens in de BillingEngine gebruikte artikelen

0000002928     -      06-11-2019

Sinds Mercator versie 10.5 bevat de BillingEngine een STOCK (DataTable) eigenschap die alle informatie bevat van alle artikelen die gebruikt worden in de documenten in het commericeel beheer. Mercator vult deze DataTable in terwijl de items worden ingevoerd.

De gegevens in deze DataTable zijn gemakkelijk toegankelijk via de eigenschap BillingEngine.StockRecords, een verzameling van MercatorDatabase.STOCK. Dit maakt het gemakkelijker om de Linq-syntaxen te gebruiken.

Zoals hierboven aangegeven, worden de artikelen gekopieerd naar BillingEngine.STOCK tijdens elke BillingEngine.InsertItem. Wanneer een reeds in dit document aanwezig materiaal wordt opgeroepen, wordt dit materiaal bijgewerkt.

Als u op enig moment alle gegevens in BillingEngine.STOCK wilt verversen, moet u de BillingEngine.RefreshStock() methode gebruiken.

Deze nieuwe eigenschappen vervangen voordelig deze nieuwe eigenschappen:

  • de toevoeging van een veld met dezelfde naam (S_.......) in de tabel LIGNES_V/A. Dit heeft het nadeel dat informatie nooit ververst wordt  (maar het voordeel van het hebben van de informatie als het artikel wordt genoemd - het is soms nodig)
  • een xLookup naar de STOCK tabel, die altijd bestraffend is in termen van client-server programmering.

Code voorbeelden :

Sla in een kolom van LIGNES_V een aaneenschakeling van bepaalde materiaalgegevenswaarden op.

Zoom
billingEngine.RefreshStock(); // si nécessaire parce qu'on veut actualiser les données articles
foreach (MercatorDatabase.LIGNES_V lignes_v in billingEngine.LignesVRecords.Where(l => l.ID_ARTICLE != ""))
{
    MercatorDatabase.STOCK stock = billingEngine.StockRecords[lignes_v.ID_ARTICLE];
    lignes_v.CONCAT_CLE1_UNITE = stock.S_CLE1 + " " + stock.S_UNITE + ...;
}

Let op de aanwezigheid van de indexer[string s_id] op billingEngine.StockRecords (in het geel hierboven) waarmee u het artikel direct kunt verkrijgen op basis van de identifier.


Een knop in een BillingForm geeft de totale kostprijs van het huidige document weer.

Zoom
public static void Exec(MercatorUi.MovableControls.MovableButton clickedButton)
{
    MercatorUi.Forms.Billing.BillingForm billingForm = (MercatorUi.Forms.Billing.BillingForm)clickedButton.Form;

    billingForm.BillingEngine.RefreshStock(); // si nécessaire parce qu'on veut actualiser les données articles
    double prixRevTotal = billingForm.BillingEngine.LignesVRecords.Where(l => l.ID_ARTICLE != "")
                                                   .Sum(l => l.Q * billingForm.BillingEngine.StockRecords[l.ID_ARTICLE].S_PRIX_REV);
    Api.Stop(string.Format("Le prix de revient de ce document est {0:### ### ##0.00} EUR.", Math.Round(prixRevTotal, 2)));
}

In de rapport-editor wordt automatisch een relatie gecreëerd: het installeert de DataTable STOCK als een "ouder"-tabel en de DataTable LIGNES_V/A als een kind. Hierdoor is het mogelijk om alle artikelinformatie te gebruiken, die telkens correct wordt geassocieerd met de regel die wordt afgedrukt.

  


Opmerking: De binaire velden van de STOCK-tabel worden altijd genegeerd. Dit is om het RAM-geheugenverbruik te beperken.