PC SOFT

GRUPOS DE DISCUSSÃO PROFISSIONAL
WINDEVWEBDEV e WINDEV Mobile

Inicio → WINDEV 2024 → Récupérer contenu d'un scan
Récupérer contenu d'un scan
Iniciado por WaLinke, jan., 23 2020 12:18 PM - 5 respostas
Membro registado
7 mensagems
Popularité : -1 (1 vote)
Publicado em janeiro, 23 2020 - 12:18 PM
Bonjour,

J'ai un champ de saisie que je rempli via un scan de code-barre. J'aimerais pouvoir, lors de la modification du champ, récupérer le nombre de caractères restant dans le buffer de saisie.

A chaque modification de SAI_COLIS

SI Taille(SansEspace(MoiMême..Valeur)) = 7 ALORS

// Sachant que le code-barre scanné retourne 15 caractères, j'aimerais pouvoir récupérer le nombre de caractères restants, à //savoir 8 dans ce cas-ci.

FIN

En résumé, j'aimerai pouvoir récupérer la taille d'un scan avant d'avoir écrit tout les caractères dans mon champ de saisie.

Un grand merci d'avance.
Membro registado
182 mensagems
Popularité : +10 (10 votes)
Publicado em janeiro, 23 2020 - 2:22 PM
Hello,
En fait, tu donnes déjà la réponse à ton dysfonctionnement.

Si le code-barres scanné retourne 15 caractères, il ne peut pas être égale à 7.
Le bout de code qui suit te donnera une idée je pense :

StrTest est une chaîne = "000000011111111"
StrLen est un entier = Taille(SansEspace(StrTest))

SI StrLen >= 7 ALORS
Trace(Droite(StrTest, (StrLen - 7)))
FIN
Membro registado
7 mensagems
Popularité : -1 (1 vote)
Publicado em janeiro, 23 2020 - 3:20 PM
Hello,

En fait, lorsque je scan le code-barre, la condition : SI Taille(SansEspace(MoiMême..Valeur)) = 7 est validée car la fonction "A chaque modification de SAI_NoColis" est appelée après chaque caractère entré.

Pour être plus précis :
Nous avons 2 formats de code-barre, le premier en 7 caractères et le deuxième en 15 caractères.
Selon la taille, je lance une requête sur un champ différent dans une db.

Lorsque je scan le code-barre, le champ est rempli caractère par caractère, et donc après le 7ème, la condition est validée et le programme fait une recherche en base de données avec les 7 premiers caractères du code-barre à 15 caractères. Afin d'éviter d’exécuter ce code, je pensais récupérer le nombre de caractères restants dans le buffer d'entrée.

Si le champ de saisie contient 7 caractères, et 0 dans le buffer, je sais que l'utilisateur veut faire une recherche sur le champ en base de données qui contient 7 caractères. Si la taille du buffer est > 0, alors je sais que l'utilisateur veut faire une recherche sur base du code-barre à 15 caractères.

A savoir que la taille de mon champ est de 15 caractères. Je ne peux pas utiliser la fonction "En sortie de champ" car si il tape un code-barre à 7 caractères, le code ne sera jamais exécuté. Donc je dois utiliser la fonction "A chaque modification de champ". Mais du coup si il scan un code-barre de 15 caractères, la condition qui vérifie si la taille du champ fait 7 caractères est validée avant que ma douchette n'envoie les 8 caractères restants, et donc j'exécute le mauvais code.

Pas très clair, je m'en excuse.
Mensagem modificada, janeiro, 23 2020 - 3:25 PM
Membro registado
182 mensagems
Popularité : +10 (10 votes)
Publicado em janeiro, 23 2020 - 4:16 PM
> En fait, lorsque je scan le code-barre, la condition : SI Taille(SansEspace(MoiMême..Valeur)) = 7 est validée car la fonction "A chaque modification de SAI_NoColis" est appelée après chaque caractère entré.

Ça ne change rien au problème avec la partie "A chaque modification de SAI_NoColis"
A partir du huitième caractère, tu ne rentres plus dans la condition.
Publicado em janeiro, 23 2020 - 4:36 PM
une facon de faire ce que tu veux est de se servir du fait que les caractères arrivent TRES rapidement quand scannés

Dans le code 'à chaque modif', tu teste si un flag global à la fenêtre est levé, et sinon tu lance un timer sur 1/2 seconde ou moins et tu lève le flag, de manière à ne démarrer le timer qu'une fois

Dans le code du timer, exécuté donc 1/2 second APRES que le champ soit rempli (et donc à un moment ou le codebarre COMPLET est dans le champ), tu regarde la taille et tu fais ta recherche

C'est tout
Publicado em janeiro, 23 2020 - 4:57 PM
Bonjour,
plus simple : tu ajoutes à la programmation de ton scanner un suffixe RC (ou TAB).
Cela fera sortir le curseur de saisie de ton champ.
Tu met ton code de traitement dans la partie "En Sortie de champ", et là tu peux compter
la taille du code lu.
Ou si tu n'as pas d'autre champ dans ta fenêtre, tu détecte simplement la présente du RC dans
ta saisie et tu fais le traitement.

A+