Effectuer des calculs personnalisés dans les documents de la gestion commerciale avec lignes, les transferts de dépôts ou les inventaires

0000003268     -      16/12/2024

L'EditAddLineButton de MercatorPenguin contient cette propriété optionnelle : DataUpdaters. Elle est disponible dans ce bouton placé dans le code XAML :

  • des ventes avec lignes,
  • des achats avec lignes,
  • des inventaires,
  • des transferts de dépôts,
  • des pickings.

Un DataUpdater permet de déterminer une expression qui va forcer une valeur calculée en aval du code standard exécuté quand on clique sur ce bouton. Il est possible de mettre un nombre illimité de DataUpdaters dans cette propriété.

<m:EditAddLineButton AutoFocusEntry="LINE|ID_ARTICLE">
<m:EditAddLineButton.DataUpdaters>
<x:Array Type="{x:Type m:DataUpdater}">
<m:DataUpdater Source="Q" Expression="iif(q_carton=0,q,q*q_carton)" RoundDecimals="2" />
<m:DataUpdater Source="S_CLE1" Expression="S_CLE1+'*'" />
</x:Array>
</m:EditAddLineButton.DataUpdaters>
</m:EditAddLineButton>

 

Chaque ligne de DataUpdater doit reprendre ces propriétés obligatoires :

  • Source : le nom de la colonne à modifier.
  • Expression : la formule à calculer, sous la forme d'une expression de DataColumn calculée valide.

S'ajoutent ces propriétés optionnelles :

  • RoundDecimals : pour forcer un arrondi sur un nombre de décimales. Elle s'applique uniquement aux valeurs numériques.
  • LinkedItemsMode : propriété prise en compte uniquement pour les ventes et les achats. Elle permet de déterminer si le DataUpdater s'applique sur les articles liés :
    • All : valeur par défaut. 
    • ParentsOnly : seulement sur les articles parents
    • ChildrenOnly : seulement sur les articles enfants

     

La DataRow passée au DataUpdater correspond à celle des lignes qui a été populée lors de la recherche de l'article. Si on souhaite utiliser des données en dehors de cette DataRow mais présentes à l'écran, par exemple dans un EditEntry ou un EditPicker, il faut alors référencer sa source encadrée par le caractère $. Par exemple 

Expression = q * $var1$

si un EditEntry à sa source définie sur "VAR1".


Note : la compilation et l'exécution de code compilé est impossible dans les appareils mobiles. Il n'y aura donc jamais de prise en charge complète du langage C# ou d'un autre langage compilé à cet endroit de MercatorPenguin.

Cette page donne quelques indications concernant les syntaxes possibles.


Application métier

Certains articles sont conditionnés en cartons contenant plusieurs fois le même produit, mais ce produit est stocké à la pièce. Dès lors, durant le picking, lorsqu'on scanne n cartons, la quantité effectivement prise en compte doit être n x la quantité dans un carton.

Pour mettre en place cela, la colonne Q_CARTON a été ajoutée à la LIGNES_V.

alter table LIGNES_V add Q_CARTON smallint not null default 0

Dans le customizer BillingVente associé à la séquence de destination du picking, on complète le cas échéant LIGNES_V.Q_CARTON avec la valeur souhaitée. Cette valeur peut provenir d'un décodage de code-barres ou d'un événement AfterInsertItem.

Zoom
void billingEngine_AfterInsertItem(object sender, MercatorUi.Engine.Gescom.BillingEngine.AfterInsertItemEventArgs e)
{
    if (MercatorUi.Globals.IsMercatorPenguinServer)
    {
        if (...)
            e.DataRowLignes["q_carton"] = ...;
    }
}

L'expression suivante permet de multiplier la quantité encodée dans MercatorPenguin par la quantité dans un carton, uniquement si cette dernière valeur est définie :

<m:DataUpdater Source="Q" Expression="iif(q_carton=0,q,q*q_carton)" RoundDecimals="2" />



Cookies fonctionnels : Cookies nécessaires à l'utilisation du site et cookies de préférence. Ils ne contiennent aucune donnée à caractère personnel. (En savoir plus)

Cookies statistiques : Captation de statistiques liées aux comportements des internautes. (En savoir plus)

Cookies marketing : Pour effectuer le suivi des visiteurs au travers des sites web, à des fins publicitaires. (En savoir plus)