|
Inicio → 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 |
Iniciado por Sh1v4, mar., 26 2024 2:19 PM - 31 respostas |
| |
| | | |
|
| |
Membro registado 32 mensagems |
|
Publicado em março, 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. |
| |
| |
| | | |
|
| | |
| |
Membro registado 450 mensagems Popularité : +31 (43 votes) |
|
Publicado em março, 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 |
| |
| |
| | | |
|
| | |
| |
Membro registado 32 mensagems |
|
Publicado em março, 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 ?Mensagem modificada, março, 26 2024 - 3:24 PM |
| |
| |
| | | |
|
| | |
| |
Membro registado 16 mensagems |
|
Publicado em março, 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. |
| |
| |
| | | |
|
| | |
| |
Membro registado 32 mensagems |
|
Publicado em março, 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. |
| |
| |
| | | |
|
| | |
| |
Membro registado 3.891 mensagems Popularité : +227 (347 votes) |
|
Publicado em março, 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 tourneMensagem modificada, março, 26 2024 - 6:00 PM |
| |
| |
| | | |
|
| | |
| |
Membro registado 450 mensagems Popularité : +31 (43 votes) |
|
Publicado em março, 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
|
| |
| |
| | | |
|
| | |
| |
Membro registado 3.891 mensagems Popularité : +227 (347 votes) |
|
Publicado em março, 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 |
| |
| |
| | | |
|
| | |
| |
Membro registado 450 mensagems Popularité : +31 (43 votes) |
|
Publicado em março, 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. |
| |
| |
| | | |
|
| | |
| |
Membro registado 32 mensagems |
|
Publicado em março, 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. |
| |
| |
| | | |
|
| | |
| |
Membro registado 32 mensagems |
|
Publicado em março, 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.Mensagem modificada, março, 27 2024 - 9:33 AM |
| |
| |
| | | |
|
| | |
| |
Membro registado 32 mensagems |
|
Publicado em março, 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. |
| |
| |
| | | |
|
| | |
| |
Membro registado 546 mensagems |
|
Publicado em março, 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 |
| |
| |
| | | |
|
| | |
| |
Membro registado 450 mensagems Popularité : +31 (43 votes) |
|
Publicado em março, 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 Mensagem modificada, março, 27 2024 - 12:18 PM |
| |
| |
| | | |
|
| | |
| |
Membro registado 186 mensagems |
|
Publicado em março, 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 |
| |
| |
| | | |
|
| | |
| |
Membro registado 32 mensagems |
|
Publicado em março, 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. |
| |
| |
| | | |
|
| | |
| |
Membro registado 546 mensagems |
|
Publicado em março, 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. |
| |
| |
| | | |
|
| | |
| |
Membro registado 450 mensagems Popularité : +31 (43 votes) |
|
Publicado em março, 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 |
| |
| |
| | | |
|
| | |
| |
Membro registado 32 mensagems |
|
Publicado em março, 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 ?Mensagem modificada, março, 27 2024 - 2:40 PM |
| |
| |
| | | |
|
| | |
| |
Membro registado 546 mensagems |
|
Publicado em março, 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 |
| |
| |
| | | |
|
| | |
| |
Membro registado 3.891 mensagems Popularité : +227 (347 votes) |
|
Publicado em março, 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 tourneMensagem modificada, março, 27 2024 - 3:25 PM |
| |
| |
| | | |
|
| | |
| |
Membro registado 32 mensagems |
|
Publicado em março, 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. |
| |
| |
| | | |
|
| | |
| |
Membro registado 3.891 mensagems Popularité : +227 (347 votes) |
|
Publicado em março, 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 |
| |
| |
| | | |
|
| | |
| |
Membro registado 32 mensagems |
|
Publicado em março, 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. |
| |
| |
| | | |
|
| | |
| |
Membro registado 186 mensagems |
|
Publicado em março, 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 |
| |
| |
| | | |
|
| | |
| |
Membro registado 546 mensagems |
|
Publicado em março, 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 |
| |
| |
| | | |
|
| | |
| |
Membro registado 32 mensagems |
|
Publicado em março, 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)
|
| |
| |
| | | |
|
| | |
| |
Membro registado 32 mensagems |
|
Publicado em março, 28 2024 - 10:29 AM |
Ous, j'ai oublié EcranVersFichier() dans le sinon, ce qui m’allège le code. |
| |
| |
| | | |
|
| | |
| |
Membro registado 32 mensagems |
|
Publicado em março, 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)
|
| |
| |
| | | |
|
| | |
| |
Membro registado 397 mensagems Popularité : +13 (13 votes) |
|
Publicado em março, 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 |
| |
| |
| | | |
|
| | |
| |
Membro registado 186 mensagems |
|
Publicado em março, 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 |
| |
| |
| | | |
|
| | |
| |
Membro registado 32 mensagems |
|
Publicado em abril, 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. |
| |
| |
| | | |
|
| | | | |
| | |
|