Vous consultez une page technique concernant le logiciel de gestion Mercator. Celle-ci contient des informations spécifiques destinées aux professionnels de Mercator. Souhaitez-vous être redirigés vers des informations plus générales ?


   Ne plus poser cette question

PaymentsTracing ou comment détailler les encaissements d'acomptes

0000003152     -      27/01/2024

Dans la gestion commerciale de Mercator, un acompte peut être associé à une commande ou à une livraison. Via un reçu, il est possible d'augmenter l'acompte d'une commande. Il est aussi possible, lors de la transformation d'une commande en livraison de déduire partiellement l'acompte. Chaque livraison peut être l'aboutissement de plusieurs commandes et chaque facture peut être la phase finale de plusieurs livraisons. Toute livraison et toute commande peut faire l'objet de reliquats (back-orders) et donc être splittée en plusieurs documents qui auront un futur différent. En conséquence, il peut être difficile a posteriori de réassocier correctement tous les acomptes encaissés avec la facture finale.

Mercator 10.10 apporte une solution définitive à cette difficulté avec le PaymentsTracing.

Pour installer cette fonctionnalité, il faut ajouter cette colonne dans la table PIEDS_V :

alter table PIEDS_V add PAYMENTS_TRACING varchar(MAX) not null default ''

Ensuite, dans le paramétrage des écrans des séquences souhaitées de commande, de livraisons ou de facture, il faut ajouter un objet de type PaymentsTracing.

Pour des raisons de performances, il est vivement recommandé d'utiliser une version 2016 ou ultérieure de SQL Server. (Le cas échéant, vérifiez le niveau de compatibilité de la base de données de Mercator).

Cet objet se présente comme ceci :

PaymentsTracing1

Dans cet exemple vu dans une facture, on justifie un total d'acompte de 1749 EUR :

  • un acompte sur commande de 150 EUR a été encaissé le 15 mars
  • un acompte sur une autre commande de 199,80 EUR a été encaissé le 17 mars
  • le 2 avril, le client a augmenté l'acompte sur ces deux commandes via des reçus, respectivement de 40 et 25 EUR
  • le 3 avril, ces deux commandes sont livrées en une fois et le client paie le solde de 1.334,20 EUR
  • la facture est établie ultérieurement

Le numéro après "T" correspond au tiroir utilisé pour l'encaissement.

 

Les nœuds de niveau 2 sont issus de l'historique des encaissements (HISCAISS). En configuration multi-sites, il est nécessaire de s'assurer que ces enregistrements sont transférés sur le site où on consulte cet objet. L'affichage reprend tous les encaissements liés au document mentionné dans le nœud de niveau 1, en ce compris les modifications. Dans cet exemple, un bon de livraison contenant un acompte avait été modifié :

PaymentsTracing2

Les lignes d'encaissements de correction apparaissent en italique.

 

Lorsque la déduction partielle d'acompte est utilisée, les nœuds de niveau 1 mentionnent l'acompte effectivement déduit, tandis que les nœuds de niveau 2 mentionnent les encaissements réels, c-à-d les montants non partiels. Par exemple, dans une commande de deux articles, un client paie un acompte de 300 EUR. Lors de la livraison, un seul article est livré et le vendeur décider d'allouer 150 EUR d'acompte à cette livraison. L'objet PaymentsTracing montrera ceci :

PaymentsTracing3


Mise à disposition de xPaymentsTracing

La méthode MercatorController.xFunctions.xPaymentsTracing permet d'exploiter facilement le contenu de PIEDS_V.PAYMENTS_TRACING. Elle est aussi disponible dans l'éditeur de rapports de Mercator.

Dans l'éditeur, il est recommandé de placer un objet Table avec 5 colonnes et une seule ligne. Cette table doit contenir dans sa propriété TabSeparatedContent cette expression :

[xPaymentsTracing([CLI.C_LANGUE],[PIEDS_V.PAYMENTS_TRACING],[BoolTrue],[BoolTrue],[BoolTrue],[BoolTrue],[BoolTrue])]

Les 4 premiers paramètres booléens peuvent être fixés librement :

  • BoolTrue
  • BoolFalse

Dans ce mode de fonctionnement, le nombre de lignes de la table s'ajuste automatique selon les données à imprimer.

Si le paramètre withHiscaissDetails est à false, le nombre de colonnes de la table peut être réduit à 3. Sinon, le nombre de colonnes peut être adapté selon les options sélectionnées par les booléens agissant sur les colonnes visibles pour les nœuds secondaires.


Initialisation du système

La mise en place du système dans un dossier existant ne va pas donner de résultats probants tant que toutes les commandes et livraisons présentes dans le système n'ont pas terminé leur parcours. Il est en effet impossible de recomposer a posteriori l'information qui devrait être contenue dans PAYMENTS_TRACING.

Tout au plus est-il possible de compléter PAYMENTS_TRACING en ce qui concerne les commandes, en ajoutant l'information trouvée dans les reçus liés à ces commandes. Ceci peut se faire à l'aide de ce script SQL :

select pieds_v.id as id_recu,pieds_v.journal as journal_recu,pieds_v.piece as piece_recu,CONVERT(VARCHAR,pieds_v.date,20)+'T00:00:00' as date_recu,pieds_v.net_dv as tot_recu,pieds_v.id_dev as id_dev_recu ,t.* 
into #recutmp
from PIEDS_V cross apply dbo.PIECES_LIEES(piece_liee) t where (pieds_v.type=5) and (pieds_v.piece_liee<>'')

update PIEDS_V set payments_tracing='[{"Id":"' + rtrim(r.id_recu) + '","Journal":"' + rtrim(r.journal_recu) + '","Piece":' + ltrim(str(r.piece_recu)) + ',"Date":"' + rtrim(r.date_recu) + '","TotDv":' + ltrim(str(r.tot_recu, 15, 5)) + ',"IdDev":"' + rtrim(r.id_dev_recu) + '"}]'
from #recutmp r
where (r.journal=pieds_v.journal) and (r.piece=pieds_v.piece) and (pieds_v.type=3) and (pieds_v.payments_tracing='')

drop table #recutmp

Exploitation des données

Les données stockées dans la colonne PAYMENTS_TRACING correspondent à la représentation Json d'une liste de MercatorUi.Engine.Gescom.Tools.PaymentTracingDescriptor. Une liste vide n'est pas représentée par [] mais par une chaîne de caractères vide.

Si on souhaite obtenir en C# cette liste, on peut utiliser ce code :

Zoom
List<MercatorUi.Engine.Gescom.Tools.PaymentTracingDescriptor> l = MercatorUi.Engine.Gescom.Tools.PaymentTracingDescriptor.ListFromJsonString(billingEngine.PiedsVRecord.PAYMENTS_TRACING);

 

Il est possible d'exploiter les données de PIEDS_V.PAYMENTS_TRACING en SQL.

A partir de la version 2016 de SQL Server :

declare @PAYMENTS_TRACING varchar(MAX)
select @PAYMENTS_TRACING = PAYMENTS_TRACING from PIEDS_V where ...
select * from OPENJSON(@PAYMENTS_TRACING)
WITH (
Id CHAR(10),
Journal CHAR(5),
Piece bigint,
[Date] date,
TotDv float,
IdDev char(10)
)

Pour les versions antérieures (sans garantie de performances) :

declare @PAYMENTS_TRACING varchar(MAX)
select @PAYMENTS_TRACING = PAYMENTS_TRACING from PIEDS_V where ...
select * from dbo.PARSE_PAYMENTS_TRACING(@PAYMENTS_TRACING)

Voir aussi : Ajouter le total du PaymentTracing dans l'historique clients