|
Home → WINDEV 2024 → Help > Besoin d'un exemple pour une fenetre qui enregistre sur 2 tables |
Help > Besoin d'un exemple pour une fenetre qui enregistre sur 2 tables |
Started by Sh1v4, Mar., 26 2024 2:19 PM - 31 replies |
| |
| | | |
|
| |
Registered member 32 messages |
|
Posted on March, 26 2024 - 2:19 PM |
Bonjour,
Je me suis tellement pris la tête sur mon projet que si quelqu'un pouvait m'aider soit en me montrant un tuto (internet/youtube), ou en me faisant un exemple (je suis sous la version 26).
L'idée, une simple fenêtre avec 2 champs qui en faisant "Valider" ajoute ou modifie les 2 tables.
Je sais plus si on peut le faire sans code, avec, avec des requêtes et des variables. Le truc simple qui me rend fou. |
| |
| |
| | | |
|
| | |
| |
Registered member 451 messages Popularité : +31 (43 votes) |
|
Posted on March, 26 2024 - 2:48 PM |
Bonjour
fiche.nom = sai_nom SI HAjoute(fiche) ALORS details.adresse = sai_adresse details.idfiche = fiche.Identifiant HAjoute(details) FIN
cdlt
DG |
| |
| |
| | | |
|
| | |
| |
Registered member 32 messages |
|
Posted on March, 26 2024 - 3:23 PM |
Merci.
Donc avec cela j'ai bien l'enregistrement qui se fait dans les 2 tables. La mise à jour quand à elle duplique l'entrée comme si c'était une nouvelle. Dites moi si je me trompe. Il faudrait donc que je teste si IDFiche existe, si oui Hmodifie ?
EcranVersFichier()
Fiche.nom = SAI_nom SI HAjoute(Fiche) ALORS details.adresse = SAI_Adresse details.IDFiche = Fiche.IDFiche HAjoute(details) FIN Ferme("",Vrai)
Dailleurs, en regardant, écran vers fichier n'a plus d'interet ?Message modified, March, 26 2024 - 3:24 PM |
| |
| |
| | | |
|
| | |
| |
Registered member 16 messages |
|
Posted on March, 26 2024 - 3:48 PM |
Bonjour dans votre cas il faut utiliser un transaction au cas ou l'un deux enregistrement ne fonctionne pas donc j'ouvre une transaction après chaque enregistrement je vérifie si il n'y a pas d'erreur d'intégrité ou de doublon en cas d'erreur j'annule la transaction sinon je valide la transaction. voir aide en ligne : https://doc.pcsoft.fr/?1000023384 bon développement. |
| |
| |
| | | |
|
| | |
| |
Registered member 32 messages |
|
Posted on March, 26 2024 - 4:52 PM |
Merci beaucoup. je vais de ce pas lire la docs. j'espère aussi retrouver le bouquin.
Et si je travaille avec des conditions pour tester si l'ID Fiche existe, si oui, je continie avec Hajoute, et sinon, je fais un Hmodifie ? C'est ce que j'avais commencé sur mon projet mais à force j'ai perdu le fil. |
| |
| |
| | | |
|
| | |
| |
Registered member 3,909 messages Popularité : +227 (347 votes) |
|
Posted on March, 26 2024 - 5:52 PM |
Sh1v4 a écrit :
Dailleurs, en regardant, écran vers fichier n'a plus d'interet ?
Il faut parfois préciser la table dans EcranVersFichier. Reprend ta doc. C'est
Fiche.nom = SAI_nom et
details.adresse = SAI_Adresse Qui sont inutiles en cas d'utilisation de FichierVersEcran.
l'ID Fiche existe, si oui, je continie avec Hajoute, et sinon, je fais un Hmodifie ?
C'est le contraire. On ne peut pas modifier un tuple qui n'existe pas.
j'espère aussi retrouver le bouquin.
Regarde au niveau de l'armoire normande. Vue l'épaisseur, il doit servir de calle
-- Il y a peut être plus simple, mais, ça tourneMessage modified, March, 26 2024 - 6:00 PM |
| |
| |
| | | |
|
| | |
| |
Registered member 451 messages Popularité : +31 (43 votes) |
|
Posted on March, 26 2024 - 5:58 PM |
il y'a aussi la fonction henregistre qui peut etre intéressante qui modifie ou enregistre selon que l'enregistrement existe ou pas
https://doc.pcsoft.fr/?1000021375
Sh1v4 a écrit :
Merci.
Donc avec cela j'ai bien l'enregistrement qui se fait dans les 2 tables. La mise à jour quand à elle duplique l'entrée comme si c'était une nouvelle. Dites moi si je me trompe. Il faudrait donc que je teste si IDFiche existe, si oui Hmodifie ?
EcranVersFichier()
Fiche.nom = SAI_nom SI HAjoute(Fiche) ALORS details.adresse = SAI_Adresse details.IDFiche = Fiche.IDFiche HAjoute(details) FIN Ferme("",Vrai)
Dailleurs, en regardant, écran vers fichier n'a plus d'interet ? Message modifié, 26 mars 2024 - 15:24
|
| |
| |
| | | |
|
| | |
| |
Registered member 3,909 messages Popularité : +227 (347 votes) |
|
Posted on March, 26 2024 - 6:00 PM |
L'inconvénient de HEnregistre est qu'il ne déclenche pas les triggers.
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | |
| |
Registered member 451 messages Popularité : +31 (43 votes) |
|
Posted on March, 27 2024 - 9:07 AM |
je suis d'accord @voroltinquo mais au vue de sa question initial et de sa réponse suivante pourquoi l'embrouiller avec les triggers ! le but est déjà qu'il comprenne le fonctionnement basique et ensuite d 'évoluer en fonction de son besoin si cela est nécessaire
Sh1v4 a écrit :
Merci beaucoup. je vais de ce pas lire la docs. j'espère aussi retrouver le bouquin.
Et si je travaille avec des conditions pour tester si l'ID Fiche existe, si oui, je continie avec Hajoute, et sinon, je fais un Hmodifie ? C'est ce que j'avais commencé sur mon projet mais à force j'ai perdu le fil. |
| |
| |
| | | |
|
| | |
| |
Registered member 32 messages |
|
Posted on March, 27 2024 - 9:12 AM |
@Voroltinquo > L'armoire Merci à tous, je vais revoir un peu tout cela. Je ne maitrise pas assez les bases de Windev et les fonctions. C'est pour cela que j'avais besoin de vous afin de savoir vers ou partir pour cette histoire de fenêtre unique. |
| |
| |
| | | |
|
| | |
| |
Registered member 32 messages |
|
Posted on March, 27 2024 - 9:26 AM |
Je reprends en partant du 1er code de Dimitri soit :
fiche.nom = sai_nom SI HAjoute(fiche) ALORS details.adresse = sai_adresse details.idfiche = fiche.Identifiant HAjoute(details) FIN
Cela fonctionne si la fiche est neuve. En cas de modification, cela crée un nouvel enregistrement. Je pars la dessus avec vos recommandations.
Henregistre joue bien son rôle et enregistre si rien et modifie si la valeur existe. Je continue mon test.Message modified, March, 27 2024 - 9:33 AM |
| |
| |
| | | |
|
| | |
| |
Registered member 32 messages |
|
Posted on March, 27 2024 - 10:32 AM |
En fait non, Henregistre marche et puis au bout d'un moment écrase une ancienne valeur. Je me retrouve toujours avec 4 lignes dans ma tables details. |
| |
| |
| | | |
|
| | |
| |
Registered member 557 messages |
|
Posted on March, 27 2024 - 10:35 AM |
Bonjour, Vous pouvez poursuivre avec le code fourni par Dimitri G :
HLitRecherchePremier(Fiche, Nom, sai_nom) SI HTrouve() = Faux ALORS Fiche.Nom = sai_nom SI HAjoute(Fiche) ALORS Details.Adresse = sai_adresse Details.IDFiche = Fiche.IDFiche HAjoute(Details) FIN SINON HLitRecherchePremier(Details, IDFiche, Fiche.IDFiche) SI HTrouve() = Vrai ALORS Details.Adresse = sai_adresse HModifie(Details) FIN FIN Cdlt |
| |
| |
| | | |
|
| | |
| |
Registered member 451 messages Popularité : +31 (43 votes) |
|
Posted on March, 27 2024 - 12:18 PM |
merci @cedric_34 c 'est vrai qu'hier j'ai livré le minimum syndical je partais en reunion
Cédric_34 a écrit :
Bonjour, Vous pouvez poursuivre avec le code fourni par Dimitri G : HLitRecherchePremier(Fiche, Nom, sai_nom) SI HTrouve() = Faux ALORS Fiche.Nom = sai_nom SI HAjoute(Fiche) ALORS Details.Adresse = sai_adresse Details.IDFiche = Fiche.IDFiche HAjoute(Details) FIN SINON HLitRecherchePremier(Details, IDFiche, Fiche.IDFiche) SI HTrouve() = Vrai ALORS Details.Adresse = sai_adresse HModifie(Details) FIN FIN Cdlt Message modified, March, 27 2024 - 12:18 PM |
| |
| |
| | | |
|
| | |
| |
Registered member 187 messages |
|
Posted on March, 27 2024 - 12:30 PM |
Bonjour, je ferai même plus simplement :
HLitRecherchePremier(Fiche, Nom, sai_nom) SI HTrouve() = Faux ALORS Fiche.Nom = sai_nom SI HAjoute(Fiche) ALORS Details.Adresse = sai_adresse Details.IDFiche = Fiche.IDFiche HAjoute(Details) FIN SINON Details.Adresse = sai_adresse HModifie(Details) FIN |
| |
| |
| | | |
|
| | |
| |
Registered member 32 messages |
|
Posted on March, 27 2024 - 12:42 PM |
Merci à vous tous, Je viens de tester le code de Cédric_34 et cela fonctionne. Une question, pourquoi faire la recherche sur le nom et non pas sur l'ID fiche dans le 1er ? Et comme le mentionne André, pourquoi faire une nouvelle recherche sur l'ID fiche dans le 2ieme ? J'essaie de comprendre.
André STASZEWSKI > Merci, je regarde. |
| |
| |
| | | |
|
| | |
| |
Registered member 557 messages |
|
Posted on March, 27 2024 - 12:54 PM |
Pour la première recherche, le nom est plus évident (connaissez-vous l'ID ?) Pour le second, vous n'allez pas modifier le bon enregistrement si nous ne pointez pas sur cet enregistrement. |
| |
| |
| | | |
|
| | |
| |
Registered member 451 messages Popularité : +31 (43 votes) |
|
Posted on March, 27 2024 - 1:50 PM |
faire la recherche que sur le champs "nom" peut également vite poser problème, dans le cas où 2 personnes ont le même nom ? impossible de le créer puisque vous trouverez déjà un nom existant et même si vous en avez 2 le premier trouvé sera modifié.
donc vous devriez ajouter d'autre champs pour permettre une recherche avec plus de critère comme le prénom, l'adresse, cp, ville etc
Et Pourquoi avoir crée 2 tables, une avec le champs nom,prenom,adresse,cp,ville aurait suffit ! Ce qui serait cohérent pour une seconde table serait une table pour la civilité : Monsieur,Madame,Mademoiselle,etc et de relier l'id de la civilité à la première.
Bon après je ne mesure pas complètement votre besoin et la porté de votre projet |
| |
| |
| | | |
|
| | |
| |
Registered member 32 messages |
|
Posted on March, 27 2024 - 2:14 PM |
D'abord merci beaucoup à tous, vous m'avez débloqué sur beaucoup de chose.
Pour résumé Dimitri, je suis sur un autre projet ou la fiche comporte 60 champs, nom prenom et si la personne à réaliser des actions ou non, je pourrais le faire facilement dans une table unique, mais je pense (A tord ?) qu'il faut mieux séparer la fiche personne, de la fiche suivi (dans l'exemple ici suivi est l'adresse). J'avais besoin d'un exemple simple pour comprendre et déjà je peinais.
J'avais créer un premier sujet ici:
https://forum.pcsoft.fr/fr-FR/pcsoft.fr.windev/271062-fenetre-avec-onglet-alimenter-2-tables-probleme-cardinalite/read.awp…
Oui je connais l'ID, et je peux au pire l'afficher dans un champ. Je vais modifier dans ce sens et continuer mes essais.
Et complexifier pour au final avec une table fiche et 6 autres liées dans une seule fenetre. Raison ou tord ?Message modified, March, 27 2024 - 2:40 PM |
| |
| |
| | | |
|
| | |
| |
Registered member 557 messages |
|
Posted on March, 27 2024 - 3:00 PM |
Nous ne connaissons pas la structure du fichier de données pour vous aider d'avantage mais je ne pense pas que vous ayez tort. Il est en effet préférable d'avoir un fichier "Fiche" et des liaisons pour, comme vous le mentionnez, le suivi, etc... L'important étant de bien réfléchir à votre analyse avant de vous lancer. Cdlt |
| |
| |
| | | |
|
| | |
| |
Registered member 3,909 messages Popularité : +227 (347 votes) |
|
Posted on March, 27 2024 - 3:12 PM |
Sh1v4 a écrit :
Je pourrais le faire facilement dans une table unique, mais je pense (A tord ?) qu'il faut mieux séparer la fiche personne, de la fiche suivi (dans l'exemple ici suivi est l'adresse).
Ce n'est pas toi qui décide, c'est la modélisation, qui est le reflet de la réalité. Quoiqu'il en soit, si tu te retrouve avec une table avec 60 colonnes, il y a une forte probabilité que ta modélisation ne soit pas 3 FN. Dans ce cas les problèmes vont survenir par la suite. Une question à se poser est : ai-je besoin d'un historique des adresses ? D'ailleurs comment représentes tu une adresse ? A-t-elle sa "vie propre" au terme données i.e. dans ton MCT as tu des traitements spécifiques uniquement sur l'adresse ? -- Il y a peut être plus simple, mais, ça tourneMessage modified, March, 27 2024 - 3:25 PM |
| |
| |
| | | |
|
| | |
| |
Registered member 32 messages |
|
Posted on March, 27 2024 - 3:51 PM |
Comme je suis entouré de pro, et que je peux avoir votre avis, j'en profite : Le projet pour l'asso, qui permet le suivi des personnes en difficultés. C'est une grande fiche avec des coches ou oui/non qui se complète au fur et à mesure du suivi, (mis à part la table liste-rendez-vous) que j'ai décomposé de cette maniere :
La table fiche va se garnir par un import XLS. Commune et lieux peuvent changer, donc 2 tables sans liaison que l'on peut remplir par un simple formulaire. |
| |
| |
| | | |
|
| | |
| |
Registered member 3,909 messages Popularité : +227 (347 votes) |
|
Posted on March, 27 2024 - 4:34 PM |
Cause impayé doit être une table à part entière (1° forme normale)
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | |
| |
Registered member 32 messages |
|
Posted on March, 27 2024 - 4:56 PM |
Je le concède. C'est une facilité de l'avoir réuni pour l'import dans un seul et même fichier. |
| |
| |
| | | |
|
| | |
| |
Registered member 187 messages |
|
Posted on March, 27 2024 - 6:44 PM |
Cédric_34 a écrit :
Pour la première recherche, le nom est plus évident (connaissez-vous l'ID ?) Pour le second, vous n'allez pas modifier le bon enregistrement si nous ne pointez pas sur cet enregistrement.
là, il y a qq chose qui m'échappe parce que le HlitrecherchePremier placé juste avant la condition pointe justement sur l'enregistrement. https://doc.pcsoft.fr/fr-FR/?3044036 |
| |
| |
| | | |
|
| | |
| |
Registered member 557 messages |
|
Posted on March, 27 2024 - 7:41 PM |
@André STASZEWSKI Bonjour, "HlitrecherchePremier placé juste avant la condition pointe justement sur l'enregistrement", oui mais pour le fichier "Fiche". Sans le HlitrecherchePremier sur le fichier "Details", on modifie l'enregistrement actif qui n'est pas forcément l'enregistrement souhaité. Cdlt |
| |
| |
| | | |
|
| | |
| |
Registered member 32 messages |
|
Posted on March, 28 2024 - 10:10 AM |
Bonjour, en reprenant l'exemple et en l'appliquant avec un HlitrecherchePremier" sur l'IDFiche, cela fonctionne correctement. Mais je me demande si ne commets pas une erreur.
HLitRecherchePremier(Fiche,IDFiche,Fiche.IDFiche)
SI HTrouve() = Faux ALORS EcranVersFichier() Fiche.Identité_du_ménage = SAI_Nom SI HAjoute(Fiche) ALORS Suivi_equipe_mobile.Acompagnement_EM = COMBO_Acompagnement_équipe_mobile Suivi_equipe_mobile.Perte_contact = COMBO_Perte_contact Suivi_equipe_mobile.Relogement = INT_relogement Suivi_equipe_mobile.Situation_stabilisée = INT_situation_stabilise Suivi_equipe_mobile.Réorientation = INT_reorientation Suivi_equipe_mobile.Prise_en_charge_partenaire = INT_prise_en_charge Suivi_equipe_mobile.IDFiche = Fiche.IDFiche HAjoute(Suivi_equipe_mobile) FIN SINON Suivi_equipe_mobile.Acompagnement_EM = COMBO_Acompagnement_équipe_mobile Suivi_equipe_mobile.Perte_contact = COMBO_Perte_contact Suivi_equipe_mobile.Relogement =INT_relogement Suivi_equipe_mobile.Situation_stabilisée = INT_situation_stabilise Suivi_equipe_mobile.Réorientation = INT_reorientation Suivi_equipe_mobile.Prise_en_charge_partenaire = INT_prise_en_charge HModifie(Suivi_equipe_mobile) Fiche.Année = COMBO_annee_de_saisie Fiche.date_saisie= SAI_Date_de_saisie Fiche.CDP = COMBO_CDP Fiche.CDP_date=SAI_Date_CDP Fiche.CQL = COMBO_CDQL Fiche.CQL_date=SAI_Date_CQL Fiche.CFP=COMBO_CFP Fiche.CFP_date=SAI_Date_CFP Fiche.Identité_du_ménage= SAI_Nom Fiche.Identité_prenom=SAI_Prénom Fiche.Téléphone=SAI_Téléphone Fiche.email=SAI_Email Fiche.adresse=SAI_Adresse Fiche.Commune=COMBO_Commune Fiche.Composition_familiale=COMBO_composition_familiale Fiche.Tranche_d_Age=COMBO_age Fiche.Cat_socioprofessionnelle_des_ménages=COMBO_categporie_professionnelle Fiche.Montant_de_la_dette=SAI_Montant_de_la_dette Fiche.Cause_impayé_1=COMBO_cause_impayé_1 Fiche.Cause_impayé_2=COMBO_cause_impayé_2 Fiche.Cause_impayé_3=COMBO_cause_impayé_3
HModifie(Fiche) FIN Ferme("",Vrai)
|
| |
| |
| | | |
|
| | |
| |
Registered member 32 messages |
|
Posted on March, 28 2024 - 10:29 AM |
Ous, j'ai oublié EcranVersFichier() dans le sinon, ce qui m’allège le code. |
| |
| |
| | | |
|
| | |
| |
Registered member 32 messages |
|
Posted on March, 28 2024 - 12:26 PM |
Je ne comprends pas pourquoi j'ai à nouveau une erreur d'intégrité à l'ajout en insérant la partie préconisation.
EcranVersFichier()
HLitRecherchePremier(Fiche,IDFiche,Fiche.IDFiche)
SI HTrouve() = Faux ALORS Fiche.Identité_du_ménage = SAI_Nom SI HAjoute(Fiche) ALORS Suivi_equipe_mobile.Acompagnement_EM = COMBO_Acompagnement_équipe_mobile Suivi_equipe_mobile.Perte_contact = COMBO_Perte_contact Suivi_equipe_mobile.Relogement = INT_relogement Suivi_equipe_mobile.Situation_stabilisée = INT_situation_stabilise Suivi_equipe_mobile.Réorientation = INT_reorientation Suivi_equipe_mobile.Prise_en_charge_partenaire = INT_prise_en_charge Suivi_equipe_mobile.IDFiche = Fiche.IDFiche HAjoute(Suivi_equipe_mobile) Juridique_preconisation.IDJuridique_preconisation = Fiche.IDFiche Juridique_preconisation.Deposer_DALO = INT_Deposer_DALO HAjoute(Juridique_preconisation) FIN SINON Suivi_equipe_mobile.Acompagnement_EM = COMBO_Acompagnement_équipe_mobile Suivi_equipe_mobile.Perte_contact = COMBO_Perte_contact Suivi_equipe_mobile.Relogement =INT_relogement Suivi_equipe_mobile.Situation_stabilisée = INT_situation_stabilise Suivi_equipe_mobile.Réorientation = INT_reorientation Suivi_equipe_mobile.Prise_en_charge_partenaire = INT_prise_en_charge HModifie(Suivi_equipe_mobile) EcranVersFichier() Juridique_preconisation.IDJuridique_preconisation = Fiche.IDFiche Juridique_preconisation.Deposer_DALO = INT_Deposer_DALO HModifie(Juridique_preconisation)
HModifie(Fiche) FIN Ferme("",Vrai)
|
| |
| |
| | | |
|
| | |
| |
Registered member 398 messages Popularité : +13 (13 votes) |
|
Posted on March, 28 2024 - 6:10 PM |
Bonjour,
Sauf erreur de ma part, vous ne faites pas la liaison sur la bonne colonne.
Juridique_preconisation.IDJuridique_preconisation = Fiche.IDFiche
Juridique_preconisation.IDFiche = Fiche.IDFiche |
| |
| |
| | | |
|
| | |
| |
Registered member 187 messages |
|
Posted on March, 28 2024 - 9:28 PM |
Cédric_34 a écrit :
@André STASZEWSKI Bonjour, "HlitrecherchePremier placé juste avant la condition pointe justement sur l'enregistrement", oui mais pour le fichier "Fiche". Sans le HlitrecherchePremier sur le fichier "Details", on modifie l'enregistrement actif qui n'est pas forcément l'enregistrement souhaité. Cdlt
Effectivement, j'ai lu trop vite... Bien vu |
| |
| |
| | | |
|
| | |
| |
Registered member 32 messages |
|
Posted on April, 05 2024 - 3:11 PM |
Merci bchanudet, je n'ai pas eu le temps de me remettre sur ce projet et effectivement le pointage n'est pas le bon.
Pour ma curiosité personnelle : Là on utilise les conditions et le Wlanguage, il n'existe pas d'autres méthodes par requête ou directement en Wyswyg ? J'en profite, je ne trouve pas d'aide sur les liaisons multiple sur les champs. Si vous avez un lien, je suis preneur. |
| |
| |
| | | |
|
| | | | |
| | |
|