Obtenir le total du PaymentTracing

0000003204     -      11/04/2024

1. Dans l'historique clients

Le paramétrage décrit ici permet d'ajouter une colonne reprenant le total du PaymentTracing dans l'historique clients du menu "Fenêtres". Pour cela, il faut installer cette fonction scalaire SQL (version de SQL Server minimale = 2016).

CREATE FUNCTION TOT_PAYMENTS_TRACING (@payments_tracing varchar(MAX))
RETURNS float
AS
BEGIN
declare @ret float
if (@payments_tracing is not null) and (@payments_tracing <> '')
select @ret = SUM(TotDv) from OPENJSON(@PAYMENTS_TRACING)
  WITH (
Id char(10),
Journal char(5),
Piece bigint,
[Date] date,
TotDv float,
IdDev char(10)
  )
RETURN isNull(@ret, 0)
END

 

Ensuite, il faut utiliser l'onglet Customizer de la séquence souhaitée pour fixer cette ligne dans le StringUpdater :

  • Avant : devises.nom as dev_nom
  • Après : devises.nom as dev_nom,dbo.TOT_PAYMENTS_TRACING(payments_tracing) as TotPaiem

 

Remarques importantes :

  • Cet ajout de colonne peut grever de façon importante les performances de la fonctionnalité "historique clients".
  • Il n'est pas possible d'ajouter sur une seule ligne d'historique plusieurs montants. Il est dès lors impossible de distinguer pour un même document de vente des paiements en différentes devises. Le paramétrage effectué ici suppose donc qu'il n'est pas fait usage de multiples devises dans le dossier ou, au minimum, que tous les paiements perçus et liés à un document final, sont dans la devise ce document final.

2. Dans un rapport lié à une séquence de vente (piece.repx)

Pour obtenir ce total, il faut utiliser la partie code de l'éditeur de rapports et exploiter l'événement BeforePrint d'un objet "texte".

Zoom
private void Text20_BeforePrint(object sender, EventArgs e)
{
    List<MercatorUi.Engine.Gescom.Tools.PaymentTracingDescriptor> l = MercatorUi.Engine.Gescom.Tools.PaymentTracingDescriptor.ListFromJsonString((String)Report.GetColumnValue("PIEDS_V.PAYMENTS_TRACING"));
    double v = 0;
    foreach (MercatorUi.Engine.Gescom.Tools.PaymentTracingDescriptor d in l)
        v += d.TotDv;
    Text20.Text = FormatNumber(v,(Int16)Report.GetColumnValue("PIEDS_V.N_DEC"));
}

 

Le paramétrage effectué ici suppose donc qu'il n'est pas fait usage de multiples devises dans le dossier ou, au minimum, que tous les paiements perçus et liés à un document final, sont dans la devise ce document final.