|
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, 26,mar. 2024 14:19 - 31 respuestas |
| |
| | | |
|
| |
Miembro registrado 32 mensajes |
|
Publicado el 26,marzo 2024 - 14:19 |
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. |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 450 mensajes Popularité : +31 (43 votes) |
|
Publicado el 26,marzo 2024 - 14:48 |
Bonjour
fiche.nom = sai_nom SI HAjoute(fiche) ALORS details.adresse = sai_adresse details.idfiche = fiche.Identifiant HAjoute(details) FIN
cdlt
DG |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 32 mensajes |
|
Publicado el 26,marzo 2024 - 15:23 |
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 ?Mensaje modificado, 26,marzo 2024 - 15:24 |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 16 mensajes |
|
Publicado el 26,marzo 2024 - 15:48 |
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. |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 32 mensajes |
|
Publicado el 26,marzo 2024 - 16:52 |
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. |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 3.891 mensajes Popularité : +227 (347 votes) |
|
Publicado el 26,marzo 2024 - 17:52 |
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 tourneMensaje modificado, 26,marzo 2024 - 18:00 |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 450 mensajes Popularité : +31 (43 votes) |
|
Publicado el 26,marzo 2024 - 17:58 |
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
|
| |
| |
| | | |
|
| | |
| |
Miembro registrado 3.891 mensajes Popularité : +227 (347 votes) |
|
Publicado el 26,marzo 2024 - 18:00 |
L'inconvénient de HEnregistre est qu'il ne déclenche pas les triggers.
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 450 mensajes Popularité : +31 (43 votes) |
|
Publicado el 27,marzo 2024 - 09:07 |
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. |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 32 mensajes |
|
Publicado el 27,marzo 2024 - 09:12 |
@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. |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 32 mensajes |
|
Publicado el 27,marzo 2024 - 09:26 |
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.Mensaje modificado, 27,marzo 2024 - 09:33 |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 32 mensajes |
|
Publicado el 27,marzo 2024 - 10:32 |
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. |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 546 mensajes |
|
Publicado el 27,marzo 2024 - 10:35 |
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 |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 450 mensajes Popularité : +31 (43 votes) |
|
Publicado el 27,marzo 2024 - 12:18 |
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 Mensaje modificado, 27,marzo 2024 - 12:18 |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 186 mensajes |
|
Publicado el 27,marzo 2024 - 12:30 |
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 |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 32 mensajes |
|
Publicado el 27,marzo 2024 - 12:42 |
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. |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 546 mensajes |
|
Publicado el 27,marzo 2024 - 12:54 |
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. |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 450 mensajes Popularité : +31 (43 votes) |
|
Publicado el 27,marzo 2024 - 13:50 |
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 |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 32 mensajes |
|
Publicado el 27,marzo 2024 - 14:14 |
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 ?Mensaje modificado, 27,marzo 2024 - 14:40 |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 546 mensajes |
|
Publicado el 27,marzo 2024 - 15:00 |
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 |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 3.891 mensajes Popularité : +227 (347 votes) |
|
Publicado el 27,marzo 2024 - 15:12 |
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 tourneMensaje modificado, 27,marzo 2024 - 15:25 |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 32 mensajes |
|
Publicado el 27,marzo 2024 - 15:51 |
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. |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 3.891 mensajes Popularité : +227 (347 votes) |
|
Publicado el 27,marzo 2024 - 16:34 |
Cause impayé doit être une table à part entière (1° forme normale)
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 32 mensajes |
|
Publicado el 27,marzo 2024 - 16:56 |
Je le concède. C'est une facilité de l'avoir réuni pour l'import dans un seul et même fichier. |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 186 mensajes |
|
Publicado el 27,marzo 2024 - 18:44 |
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 |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 546 mensajes |
|
Publicado el 27,marzo 2024 - 19:41 |
@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 |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 32 mensajes |
|
Publicado el 28,marzo 2024 - 10:10 |
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)
|
| |
| |
| | | |
|
| | |
| |
Miembro registrado 32 mensajes |
|
Publicado el 28,marzo 2024 - 10:29 |
Ous, j'ai oublié EcranVersFichier() dans le sinon, ce qui m’allège le code. |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 32 mensajes |
|
Publicado el 28,marzo 2024 - 12:26 |
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)
|
| |
| |
| | | |
|
| | |
| |
Miembro registrado 397 mensajes Popularité : +13 (13 votes) |
|
Publicado el 28,marzo 2024 - 18:10 |
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 |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 186 mensajes |
|
Publicado el 28,marzo 2024 - 21:28 |
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 |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 32 mensajes |
|
Publicado el 05,abril 2024 - 15:11 |
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. |
| |
| |
| | | |
|
| | | | |
| | |
|