Op een scherm van het commercieel beheer, een expressie weergeven die informatie van de actieve regel van de LinesEditor bevat

0000003237     -      24-06-2026

Mercator 11.0 of later kan worden gebruikt om informatie weer te geven van de kolommen van de LinesEditor op de actieve regel in een uitdrukking. Dit betreft 

  • verkopen
  • aankopen
  • transfers tussen depots 
  • inventarissen

Om dit te doen, moet de expressie de methode CurrentRowCellValue gebruiken, die beschikbaar is in de schermen van het type

  • BillingForm
  • TransferForm
  • InventoryForm

Deze methode vereist een stringparameter om de kolom in de LinesEditor te identificeren via een van deze eigenschappen:

  • Source
  • SourceReadOnly
  • Formula

Het is dus noodzakelijk dat deze kolommen in de LinesEditor bestaan. De methode CurrentRowCellValue neemt gewoon de waarde die momenteel wordt weergegeven. Als dit systeem wordt geïmplementeerd vanwege een groot aantal kolommen dat de leesbaarheid van het scherm belemmert, is het mogelijk om de breedte van deze kolommen te verkleinen zodat ze onzichtbaar worden.

Deze methode retourneert altijd een tekenreeks, zelfs als de gebruikte kolom numeriek is. In dat geval wordt de numerieke waarde geformatteerd volgens de eigenschappen van de kolom.

Het is niet nodig om een of meer ID's op te geven in de eigenschap RefreshedBy. Mercator ververst deze expressie automatisch bij celwisselingen in de LinesEditor en bij het opnieuw berekenen van het scherm.

Er is geen limiet aan het aantal expressies dat de methode CurrentRowCellValue kan gebruiken.

 

⚠️ Deze methode wordt heel vaak aangeroepen: het is daarom af te raden om hem te gebruiken voor code die toegang heeft tot de database (xLookup, Zselect, ...)


Hieronder staat een voorbeeld van code voor een verkoopdocument, dat respectievelijk de volgende elementen bevat:

  • 3 standaardkolommen : id_article, pu en q
  • 1 kolom ReadOnly : DISPO.DISPO
  • 1 kolom Formula : q * 2
  • de sleutel 3 van het artikel, die niet overeenkomt met een kolom in de LinesEditor, maar wordt bepaald door 
    • de identificator van het artikel, gevonden door billingForm.CurrentRowCellValue("id_article")
    • de collectie BillingEngine.StockRecords, waarin het gewenste artikel wordt gevonden via de hierboven bepaalde artikelidentificator
Zoom
namespace MercatorUi.MovableControls.ExpressionsCodes
{
    public static class Script
    {
        public static String Evaluate(MercatorUi.MovableControls.MovableExpression currentExpression)
        {
            // enter your customized code here

            MercatorUi.Forms.Billing.BillingForm billingForm = (MercatorUi.Forms.Billing.BillingForm)currentExpression.Form;

            return "Artikel = " + billingForm.CurrentRowCellValue("id_article")
                + " | EP = " + billingForm.CurrentRowCellValue("pu")
                + " | H = " + billingForm.CurrentRowCellValue("q")
                + " | Beschikbaar = " + billingForm.CurrentRowCellValue("DISPO.DISPO")
                + " | H * 2 = " + billingForm.CurrentRowCellValue("q * 2")
                + " | CLE = " + (billingForm.CurrentRowCellValue("id_article") != "" ? billingForm.BillingEngine.StockRecords[billingForm.CurrentRowCellValue("id_article")]?.S_CLE3 ?? "" : "");
        }
    }
}

 

De weergave van deze expressie ziet er als volgt uit: 


Het onderstaande voorbeeld toont hoe dit concept kan worden gebruikt om een foto weer te geven die aan het artikel gekoppeld is. Dit voorbeeld wijkt af van de hierboven vermelde aanbeveling om geen code te plaatsen die rechtstreeks toegang heeft tot de database. Dit blijft echter redelijk omdat:

  • de logica van de code ervoor zorgt dat de foto enkel wordt vernieuwd wanneer het artikel wijzigt (niet wanneer men van cel verandert binnen dezelfde lijn),
  • de kost van een echte opslag van foto's op lijnniveau buitensporig zou zijn.

Dit voorbeeld vereist dat via de schermparametrering een PictureBox wordt geplaatst in de buurt van de expressie. Deze PictureBox mag aan geen enkele gegevensbron gekoppeld zijn.

In onderstaande code mag slechts één regel pictureBox = behouden blijven, afhankelijk van het al dan niet aanwezig zijn van meerdere PictureBoxes op dit scherm. Indien de tweede regel behouden blijft, moet de ID van de te gebruiken PictureBox worden aangepast.

⚠️ Zorg ervoor dat de foto's een redelijke grootte hebben, anders kunnen de prestaties van het invoerscherm negatief worden beïnvloed.

Zoom
// <CompileWithRoslyn />

namespace MercatorUi.MovableControls.ExpressionsCodes
{
    public static class Script
    {
        public static String Evaluate(MercatorUi.MovableControls.MovableExpression currentExpression)
        {
            // enter your customized code here

            MercatorUi.Forms.Billing.BillingForm billingForm = (MercatorUi.Forms.Billing.BillingForm)currentExpression.Form;
            MercatorUi.MovableControls.MovablePictureBox pictureBox = billingForm.MovableControls.Values.OfType<MercatorUi.MovableControls.MovablePictureBox>().FirstOrDefault();
            MercatorUi.MovableControls.MovablePictureBox pictureBox = (MercatorUi.MovableControls.MovablePictureBox)billingForm.MovableControls["AXJXLR1474"];
            if (pictureBox == null)
                return "PictureBox not found!";

            string id_article = billingForm.CurrentRowCellValue("id_article");
            if (!string.IsNullOrWhiteSpace(id_article) && (pictureBox.TagString != id_article))
            {
                object ox = MercatorController.xFunctions.xLookUp("STOCK", "S_ID", id_article, "S_IMGBIN");
                if ((ox is byte[] bb) && (bb.Length > 0))
                {
                    pictureBox.Image = Api.BytesToImage(bb);
                    if ((pictureBox.Image.Width <= pictureBox.Width) && (pictureBox.Image.Height <= pictureBox.Height))
                        pictureBox.SizeMode = PictureBoxSizeMode.CenterImage;
                    else
                        pictureBox.SizeMode = PictureBoxSizeMode.Zoom;
                }
                else
                {
                    pictureBox.Image = null;
                }
                pictureBox.TagString = id_article;
            }
            return "Fotoartikel = " + id_article;
        }
    }
}


Functionele cookies: Cookies die nodig zijn voor het gebruik van de website en voorkeurscookies. Ze bevatten geen persoonsgegevens. (Meer informatie)

Analytische cookies: Verzamelen van statistieken met betrekking tot het gedrag van internetgebruikers. (Meer informatie)

Marketingcookies: Om bezoekers op verschillende websites te volgen voor advertentiedoeleinden. (Meer informatie)