Composant de communication lecteur cb ou chéque

Soyez le premier à donner votre avis sur cette source.

Vue 26 591 fois - Téléchargée 2 254 fois

Description

Ce composant gére le protocole concert entre le lecteur de carte bleu ou lecteur de chéque et la caisse enregistreuse.
Il vous permet donc de rajouter l'option dans un programme de gestion commerciale du pilotage du terminal de paiement électronique par votre soft.

Il permet également à partir d'une simple variable de choisir si on veut être en mode caisse ou en mode TPE (Utile pour les simulations).

Ce projet a été conçu pour être compatible avec lazarus et delphi (il y a beaucoup de close de compilation).

Deux exemple sont fournit et vous permettrons de comprendre le fonctionnement.

Il fonctionne avec le composant TComport a été installé.

Pour les amateurs de documentations sur ce protocole, je les invite à contacter les constructeurs suivant : INGENICO et SAGEM pour obtenir la documentation. Celle d'INGENICO est très simple et explique simplement les étape de la transmission, celle de SAGEM est beaucoup plus détaillé, mais plus difficilement compréhensible. Je suis ouvert à toute communication pour aider quelqu'un sans aucun soucis, mais je ne suis pas une bibliothèque. Ne me demandez pas la documentation, je ne la transmettrais pas...

Conclusion :


Il y a une chose que j'aimerais faire évoluer :

- Mettre le même icone que sous lazarus dans la palette graphique. J'ai essayé en mettant plusieurs nom au .DCR et ça n'a rien changé, delphi ne prend pas mon icône.

Je suis vraiment preneur de toutes vos remarques.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 37
2 oct. 2007 à 16:16
const
_HexChr : array[$0..$F] of char = '0123456789ABCDEF';

function DecToHex(const Value: integer): string;
var pR : PChar;
N : integer;
B : byte;
begin
SetLength(result, 8);
pR := PChar(Result);
for N := 3 downto 0 do
begin
B := byte(Value shr (N shl 3));
pR[0] := _HexChr[B shr 4];
pR[1] := _HexChr[B and $f];
inc(Pr, 2);
end;
end;

ça serat deja plus rapide, j'ai pas eu le courage de tout regarder ...
mais ça semble manquer d'optimisation, de correction etc...
Oniria Messages postés 292 Date d'inscription dimanche 14 mars 2004 Statut Membre Dernière intervention 18 décembre 2014 3
2 oct. 2007 à 18:36
Bonjour,

Je suis d'accord avec toi foxi, mais justement, ce que j'aime en programmation c'est que l'on apprend tout le temps. La fonction dectohex n'est peut-être pas optimisée mais elle fonctionne comme il faut.
Je suis content que tu m'ais montré cette solution car je la trouve sympa, un peu compliquée au premier abord mais sympa.
Ta fonction décode sur 4 octets tout le temps alors que la mienne décode l'hexa en 1, 2, 4 octets suivant la valeur décimale (on aurra FF ou FFFF ou FFFFFFFF), c'est aussi pour ca que cette fonction est un peu grosse. De plus cette fonction a été développée pour être universelle (d'ou le décodage pour 1,2,4 octets).
Dans le cas de ce composant, elle n'a ,à décoder, que des octets, elle peut donc être réduite encore plus car Value pourrait être du type Byte.

Je pense que je vais faire un mélange du fonctionnement global de ma fonction avec l'optimisation de la tienne.

En tout cas Merci beaucoup.
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 37
4 oct. 2007 à 14:00
la version universelle de cette fonction n'est pas trés differente et a peine moins performante qu'une version dédié, puisque sur la version dediée on ajoute des instruction pour la selection de l'octet a lire :
B := byte(Value shr (N shl 3));
alors que sur la version universelle on a juste quelques instruction pour incrementer et decrementer le pointeur sur le buffer en entrée. :)

voici la version universelle :
const
_HexChr : array[$0..$F] of char = '0123456789ABCDEF';

function AllToHex(const Buffer; const BufferLen: integer): string;
var pR : PChar;
pB : ^byte;
N : integer;
begin
SetLength(result, BufferLen shl 1);
pR := PChar(Result);
pB := @Buffer;
inc(pB, BufferLen-1); // et oui faut lire a l'envers sinon c'est inversé :)
for N := 0 to BufferLen-1 do
begin
pR[0] := _HexChr[pB^ shr 4];
pR[1] := _HexChr[pB^ and $f];
inc(Pr, 2);
dec(pB); // d'ou la decrementation au lieu de l'incrementation sont mechant les ^byte
end;
end;
Oniria Messages postés 292 Date d'inscription dimanche 14 mars 2004 Statut Membre Dernière intervention 18 décembre 2014 3
4 oct. 2007 à 18:31
Bonjour,

Merci beaucoup foxi pour cette fonction, c'est vraiment sympa.
Il n'y a plus qu'a la mettre dans mon composant.
asoulard Messages postés 2 Date d'inscription jeudi 25 mars 2010 Statut Membre Dernière intervention 25 mars 2010
25 mars 2010 à 18:23
Bonjour,
Tout d'abord merci pour ce code qui est très utile pour la compréhension de ce protocole de dialogue avec TPE. je cherche comment dialoguer avec le tpe directement via le port série. Cependant je n'arrive qu'à lui transmettre le montant mais je ne vois pas comment récupérer la réponse du tpe. Doit-on faire quelque chose sur le TPE mis à part paramétrer la connexion caisse et la vitesse de transmission ?
Je n'arrive pas non plus à mettre la main sur la documentation du protocole concert. Elle me serait utile pour étoffer ma compréhension sur ce sujet.Si quelqu'un peu m'aider svp, ce serait très gentil...

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.