|
Mémorisation et récupération d'une variable |
Débuté par Calimero, 27 mai 2023 20:42 - 25 réponses |
| |
| | | |
|
| |
Membre enregistré 84 messages |
|
Posté le 27 mai 2023 - 20:42 |
Bonjour,
Je suis sous windev 25 et je cherche à incrémenter des numéros de facture FA001, FA002 etc...
Ma fenêtre principale comporte 2 champs table ( commandes et détails des commandes ) Je voudrais qu'un numéro de commande s'autoincrémente dans le champ table commandes quand je choisis la valeur "Expédié" depuis une colonne Combo "Statut". Avec ce que j'ai fait ça fonctionne mais si je ferme ma fenêtre pour l'ouvrir ensuite, ça repart à la valeur initiale. Je voudrais donc juste retrouver la dernière valeur de ma variable. ça me semble simple mais je plante et je tourne en rond là dessus.
Pour faire ça, j'ai initialisé une variable dans ma fenêtre gnUmfact est un entier et une chaine gsTextefacture est une chaine = "FA000"
SI COL_Statut = "3" ALORS
gnUmfact++
TABLE_Commandes.COL_NoFacture = gsTextefacture + NumériqueVersChaîne(gnUmfact)
FIN
Commandes.NoFacture = TABLE_Commandes.COL_NoFacture
Comment puis je faire pour récupérer la dernière valeur de ma variable gnUmfact ? Je précise que je suis un véritable novice sur windev
Merci d'avance |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 121 messages Popularité : +8 (14 votes) |
|
Posté le 27 mai 2023 - 22:19 |
Bonsoir,
Pour ma part:
Sauvegarder le dernier numéro de facture et le rappeler ensuite (base de données, registre)
-- Bon dev
Thibault |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 84 messages |
|
Posté le 28 mai 2023 - 00:29 |
Bonsoir,
Merci pour la réponse mais le numéro de facture est une concaténation de FA000 + variable. Ce qu'il me faut en fait la sauvegarde de la variable puisque la racine de la facture ne bouge pas. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 897 messages Popularité : +227 (347 votes) |
|
Posté le 28 mai 2023 - 10:33 |
Bonjour, Regarde du côté des variables persistantes (SauveParamètre, ChargeParamètre ...) Par ailleurs la fonction ChaineIncrémente existe.
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | |
| |
Posté le 28 mai 2023 - 13:59 |
Calimero a écrit :
Bonsoir,
le numéro de facture est une concaténation de FA000
Bonjour,
C'est pour une toute petite entreprise éphémère ? Parce que 999 factures possibles c'est pas beaucoup. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 84 messages |
|
Posté le 21 juin 2023 - 01:04 |
Bonsoir,
J'ai trouvé une solution à mon problème pour ceux que ça peut intéresser. Sûrement y a t-il d'autres solutions.
Pour ma part, j'ai crée un fichier ini où je donne une valeur de départ J'ai crée un champ saisie SAI_Resultat = SAI_Resultat + 1 Je relie l'indice de mon fichier ini au nouveau résultat de SAI_Resultat.
Donc quand je sélectionne "expédié" dans ma combo, le numéro de facture se crée automatiquement. Ce que je cherche maintenant à faire, c'est que le sélecteur de cette ligne qui a été validée ne soit plus opérationnel, parce que si je refais "expédié" par inadvertance, la facture se modifie de nouveau. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 897 messages Popularité : +227 (347 votes) |
|
Posté le 22 juin 2023 - 12:35 |
Bonjour, Il suffit d'ajouter une colonne de type booléen (e.g. Expédié). Dans ton traitement d'expédition :
SI PAS Commande.Expédié ALORS Commande.Expédié=Vrai HModifie(Commande) TraiterExpédition(Commande.PK_Commande) FIN
-- Il y a peut être plus simple, mais, ça tourneMessage modifié, 22 juin 2023 - 12:36 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 1 144 messages Popularité : +50 (142 votes) |
|
Posté le 22 juin 2023 - 18:14 |
Bonjour,
Utiliser un fichier ini pour enregistrer un numéro de facture n'est pas la meilleure option. Comme Thibault, j'enregistre le dernier numéro dans un fichier de ma base de données que je viens lire au moment de la création de la facture (en utilisant les transactions en cas de problème)
-- Thierry TILLIER Développeur WINDEV -WEBDEV Formation WINDEV : https://coursdinfo-video.teachizy.fr/ Livre WINDEV : https://amzn.eu/d/6xTow1z Tuto WINDEV sur ma chaîne YoutubeMessage modifié, 22 juin 2023 - 18:18 |
| |
| |
| | | |
|
| | |
| |
Posté le 23 juin 2023 - 09:28 |
Le plus simple c'est de lire le dernier enregistrement (La dernière facture enregistrée) et faire +1 pour la nouvelle. (ne pas oublier de bloquer le fichier le temps de la lecture) |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 897 messages Popularité : +227 (347 votes) |
|
Posté le 23 juin 2023 - 16:14 |
Le plus simple c'est de lire le dernier enregistrement (La dernière facture enregistrée) et faire +1 pour la nouvelle. (ne pas oublier de bloquer le fichier le temps de la lecture)
Et éviter d'utiliser HLitDernier dans ce cas
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | |
| |
Posté le 23 juin 2023 - 16:19 |
Voroltinquo a écrit : r le temps de la lecture)
Et éviter d'utiliser HLitDernier dans ce cas
-- Il y a peut être plus simple, mais, ça tourne
Bonsoir Voroltinquo,
et pourquoi ? |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 897 messages Popularité : +227 (347 votes) |
|
Posté le 23 juin 2023 - 18:38 |
| |
| |
| | | |
|
| | |
| |
Posté le 24 juin 2023 - 08:55 |
HLitDernier(NomFicFac,"FACTURE") SI H.EnDehors=Vrai NumFacEnCours=1 SINON NumFacEnCours=FACTURE+1 FIN
Je n'ai jamais rencontré de problème. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 897 messages Popularité : +227 (347 votes) |
|
Posté le 26 juin 2023 - 11:55 |
Christine a écrit :
Je n'ai jamais rencontré de problème.
Je n'ai jamais croisé de poissons volants (qui, il faut le reconnaître ne constituent pas la majorité de l'espèce,) toutefois, ils existent
-- Il y a peut être plus simple, mais, ça tourneMessage modifié, 26 juin 2023 - 11:56 |
| |
| |
| | | |
|
| | |
| |
Posté le 26 juin 2023 - 17:46 |
J'ai beaucoup de respect pour toi Vorol (alias Clémenceau, alias Michel Audiard) mais faudrait arrêter le délire là. Mon appli tourne depuis une vingtaine d'années chez une centaine de Clients et jamais HLitDernier n'a retourné autre chose que le dernier N° de facture. Evidemment on peut rencontrer une chauve-souris dans un ascenceur mais ... |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 286 messages Popularité : +24 (28 votes) |
|
Posté le 27 juin 2023 - 08:25 |
Bonjour à Toutes et Tous Sans entrer dans la discussion et sans viser personne, je me demande si il n'y aurait pas une confusion avec la fonction HNumEnr() https://doc.pcsoft.fr/fr-FR/?3044063&name=HNumEnr Bien CordialementMessage modifié, 27 juin 2023 - 08:28 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 897 messages Popularité : +227 (347 votes) |
|
Posté le 27 juin 2023 - 09:55 |
Gemini1961 a écrit :
je me demande si il n'y aurait pas une confusion avec la fonction HNumEnr()
Les deux problèmes sont liés. Si la lecture se fait sur une colonne non indexé (on en arrive à mon exocet,) je cite :
la fonction HLitDernier lit le dernier enregistrement actif. En cas de parcours du fichier de données, les enregistrements seront triés selon leur numéro d'enregistrement.
Dans le cas de figure qui nous intéresse, le n° de facture est au pire une AK donc le dernier enregistrement correspond bien à la dernière facture, mais, comme précisé plus haut, le dernier enregistrement n'est pas toujours le dernier ajouté, surtout si la rubrique de parcours n'est pas précisée
-- Il y a peut être plus simple, mais, ça tourneMessage modifié, 27 juin 2023 - 10:10 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 84 messages |
|
Posté le 27 juin 2023 - 10:18 |
Christine a écrit :
HLitDernier(NomFicFac,"FACTURE") SI H.EnDehors=Vrai NumFacEnCours=1 //Il n'y a pas de facture pour la période demandée SINON NumFacEnCours=FACTURE+1 FIN
Je n'ai jamais rencontré de problème.
Bonjour Christine,
Merci pour ce bout de code, je vais essayer ça. Ce sera peut être mieux qu'un fichier ini |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 84 messages |
|
Posté le 27 juin 2023 - 10:21 |
Bonjour,
J'ai un autre problème mais je n'arrive pas à mettre un nouveau sujet, ça me dit "message inexistant", je vais donc le mettre ici : désolé. Je ne sais pas si c'est un bug du forum mais ça fait plusieurs jours que ça dure.
Donc voici,
Voilà ce que je veux faire : importer mes commandes depuis des fichiers excel. Dans l'exemple que je donne, je suis sur 3 sites que j'appellerai A, B et C pour des raisons de confidentialités. Tous mes codes sont les mêmes sauf l'ouverture des fichiers Excel qui sont A.xlsx, B.xlsx et C.xlsx
Le but est d'importer les commandes plusieurs fois par jour. Si des commandes existent déjà, ça passe à la suivante et l'ajoute si elle n'existe pas et s'il y a plusieurs lignes de commandes dans une seule commande, le code lit la commande, et ensuite la ligne de commande et ajoute la ligne de commande si elle n'existe pas. Le code ci-dessous sera peut être plus explicite.
Le problème que je rencontre est que si j'importe les commandes dans un certain ordre ça fonctionne mais je ne sais pas pourquoi, ça plante dans d'autres ordres.
Si j'importe
A,B,C = C plante A,C,B = C plante B,A,C = A plante B,C,A = C plante C,A,B = Fonctionne C,B,A = A plante
Quand je fais A,B,C par exemple, j'ai un message d'erreur au moment d'importer C qui me dit doublon dans les données mais ça affiche une commande du fichier A alors que j'ai passé B entretemps.
Voilà le code.
Nocommande est la clé unique dans le fichier commandes et en clé doublon dans le fichier lignes de commandes. Je n'ai gardé que les variables et correspondances nécessaires pour le test afin que le code soit le plus court, le moins chargé et le plus lisible possible.
Si quelqu'un pouvait me trouver le problème parce que je bataille depuis plusieurs jours, j'ai essayé plein d'autres choses mais c'est ce code qui me parait le mieux et pourtant...
I est un entier
ImportXXX est un xlsDocument = xlsOuvre("C:\Mes Projets\Gestion\Exe\IMPORT_COMMANDES\A.xlsx")
sNocommande est une chaîne sNomlivraison est une chaîne sLignedecommande est une chaîne sSKU est une chaîne
xlsFeuilleEnCours(ImportXXX,1)
POUR I = 2 À xlsNbLigne(ImportXXX)
sNocommande = xlsDonnée(ImportXXX,I,2) sSKU = xlsDonnée(ImportXXX,I,11) sLignedecommande = xlsDonnée(ImportXXX,I,16) sNomlivraison = xlsDonnée(ImportXXX,I,36)
Commandes.Nocommande = sNocommande Commandes.NomLivraison = sNomlivraison LignesDeCommandes.Nocommande = sNocommande LignesDeCommandes.SKU = sSKU LignesDeCommandes.Lignesdecommandes = sLignedecommande
HLitRecherche(Commandes,Nocommande,sNocommande) SI HTrouve(Commandes) ALORS HRecherche(LignesDeCommandes,Lignesdecommandes,sLignedecommande) SI HTrouve(LignesDeCommandes) ALORS SINON HAjoute(LignesDeCommandes) FIN SINON HAjoute(Commandes) HRecherche(LignesDeCommandes,Lignesdecommandes,sLignedecommande) SI HTrouve(LignesDeCommandes) ALORS SINON HAjoute(LignesDeCommandes) FIN FIN FIN
TableAffiche('FEN_Gestion des commandes'.TABLE_Commandes) TableAffiche('FEN_Gestion des commandes'.TABLE_LignesDeCommandes) xlsFerme(ImportXXX) Ferme(FEN_ChoixduSite) |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 286 messages Popularité : +24 (28 votes) |
|
Posté le 27 juin 2023 - 10:58 |
Calimero a écrit :
// Bonjour, // J'ai un autre problème mais je n'arrive pas à mettre un nouveau sujet, ça me dit "message inexistant", je vais donc le mettre ici : désolé.
Bonjour Calimero Si c'est un autre problème, ne serait-il pas préférable de créer une autre fiche ? Bien cordialement |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 84 messages |
|
Posté le 27 juin 2023 - 11:18 |
Gemini1961 a écrit :
Calimero a écrit :
// Bonjour, // J'ai un autre problème mais je n'arrive pas à mettre un nouveau sujet, ça me dit "message inexistant", je vais donc le mettre ici : désolé.
Bonjour Calimero Si c'est un autre problème, ne serait-il pas préférable de créer une autre fiche ? Bien cordialement
J'aimerais bien mais quand je fais "nouveau sujet" et que je fais "envoyer", j'ai un message qui me dit "message inexistant". Et ça depuis la semaine dernière. Vu que je vis en Espagne, je pensais que c'était peut être dû à ma localisation : j'ai mis un VPN France mais ça ne change rien. Et il n'y a pas de raison puisque ça fonctionnait avant. Le titre est bien dans mon profil et quand je veux l'ouvrir, ça me dit toujours "message inexistant". J'ai essayé des dizaines de fois. ça fonctionne en prévisualisation mais pas en envoi |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 551 messages |
|
Posté le 27 juin 2023 - 12:17 |
Bonjour Calimero, As tu essayé de mettre des points d'arrêt pour connaître la valeur des variables en cours d'exécution. Une chose m'interpelle dans ton code : Ferme(FEN_ChoixduSite) De quoi s'agit-il ? Tu fermes une fenêtre mais quel est son code, cette fenêtre passe t-elle des variables, et si oui, sont elles correctement transmises ?
CdltMessage modifié, 27 juin 2023 - 12:30 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 84 messages |
|
Posté le 27 juin 2023 - 14:26 |
Bonjour Cédric_34 et merci pour ton intervention,
Oui, j'ai mis des points d'arrêt depuis le début Tout va bien jusqu'à
//Import des lignes Commandes.Nocommande = sNocommande : le sNocommande est juste mais Commandes.Nocommande me note la 1ère commande du site A Commandes.NomLivraison = sNomlivraison : Là, tout est bon
LignesDeCommandes.Nocommande = sNocommande : le sNocommande est juste mais Lignes DeCommandes.Nocommande me note la 1ère commande du site A
LignesDeCommandes.SKU = sSKU : OK LignesDeCommandes.Lignesdecommandes = sLignedecommande : OK
HLitRecherche(Commandes,Nocommande,sNocommande) : OK
SI HTrouve(Commandes) ALORS : De nouveau Commades.Nocommande deu site A mais sNocommande OK HAjoute(Commandes) : commande du site A
et plante
Mais pourquoi ça fonctionne dans le sens CAB alors que ce sont les mêmes codes ???
Depuis la fenêtre de gestion de mes commandes, j'ouvre une fenêtre fille FEN_ChoixduSite où sont les boutons pour importer les commandes. Parce que là, je ne parle que de 3 sites mais j'en ai bien plus, d'où la fermeture de cette fenêtre après un import pour me retrouver sur ma fenêtre de gestion. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 84 messages |
|
Posté le 28 juin 2023 - 02:22 |
Bonjour,
Pas de réponse à mes douleurs de crânes ?
Si ça peut aider à la réflexion, J'ai fait d'autres tests.
Si la commande n'est pas trouvée, j'ai mis une info
SINON // alors rien Info("j'ajoute la commande : ",sNocommande) HAjoute(Commandes)
L'info me donne la bonne commande à importer mais Hajoute met une autre commande
J'ai donc fait un Hajoute(Commandes,ignoredoublon) et il ajoute les numéros de commandes du site A au lieu du site C
Pourquoi, il trouve la commande mais ne l'ajoute pas et surtout pourquoi ça marche dans d'autres ordres d'importation...this is the question
Enfin merci, si une "tête" en windev veut bien se pencher sur le problème |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 286 messages Popularité : +24 (28 votes) |
|
Posté le 28 juin 2023 - 09:37 |
Bonjour Calimero Continue à débuguer, tu es sur la bonne voie Ceci dit, évites d'envoyer des messages sans fondement Pour tes douleurs de crâne, il existe aussi le Support, il se penchera sur ton "problème" Bien CordialementMessage modifié, 28 juin 2023 - 09:37 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 84 messages |
|
Posté le 29 juin 2023 - 00:37 |
Bonjour Gemini,
Je vais arrêter ici ce sujet, mes précédents nouveaux messages qui me disaient "message inexistant" et qui étaient vraiment vides quand je vérifiais sont finalement apparus par miracle. |
| |
| |
| | | |
|
| | | | |
| | |
|