IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

Modification d'un enregistrement


Sujet :

WinDev

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 107
    Points : 77
    Points
    77
    Par défaut Modification d'un enregistrement
    bonjour a vous.

    je souhaiterais modifier l'enregistrement de ma fenêtre commande.
    l'enregistrement est OK.
    Mais quand je sélectionne ma fenêtre et que je clic sur modifier.

    il me renvoie une fenêtre vide.

    Declaration globale fenetre commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PROCEDURE affiche(couv,CCde)
    initialisation commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    MAT_PRI_TOTAL est un entier=0
     
    SI couv=1 ALORS
    	Incremente_IdCde()
    	CDE_CLI_DAT=DateSys
    SINON
    	SI HLitRecherche(COMMANDE,CDE_NUM,CCde,hIdentique) ALORS
    		CDE_NUM=COMMANDE.CDE_NUM
    		CDE_CLI_DAT=COMMANDE.CDE_CLI_DAT
    		SI HLitRecherche(CLIENT,CLI_ID,CLIENT.CLI_ID,hIdentique) ALORS
    			LibRais=CLIENT.CLI_NOM
    			Libtel=CLIENT.CLI_TEL
    			LibFax=CLIENT.CLI_FAX
    		FIN
    		HFiltre(DETAIL_CDE_CLI,CDE_NUM,COMMANDE.CDE_NUM,COMMANDE.CDE_NUM)
    		HLitPremier(DETAIL_CDE_CLI,CDE_NUM)
    		TANTQUE PAS HEnDehors
    			TableAjouteLigne(Table_DETAIL_CDE_CLI,DETAIL_CDE_CLI.MAT_COD,DETAIL_CDE_CLI.CLI_QTE_CDE,...
    			DETAIL_CDE_CLI.CDE_CLI_PRI,MAT_PRI_TOTAL)
     
    			HLitSuivant(DETAIL_CDE_CLI,CDE_NUM)
    		FIN
     
    	FIN
     
    FIN
    bouton validé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    i est un entier=0 //
    SI OuiNon("Voulez-vous valider ces informations?") ALORS
    	SI Vclient<>0 ALORS
    		SI PAS HLitRecherche(COMMANDE,CDE_NUM,CDE_NUM,hIdentique) ALORS
    			Incremente_IdCde()
    			COMMANDE.CDE_NUM=CDE_NUM
    		    COMMANDE.CLI_ID=Vclient
                COMMANDE.CDE_CLI_LIB=CDE_CLI_LIB
                COMMANDE.CDE_CLI_DAT=CDE_CLI_DAT
    			COMMANDE.CDE_CLI_MNT_HT=CDE_CLI_MNT_HT
    			COMMANDE.CDE_CLI_TVA=CDE_CLI_TVA
    			COMMANDE.CDE_CLI_MNT_TTC=CDE_CLI_MNT_TTC
    			COMMANDE.CDE_CLI_REMISE=CDE_CLI_REMISE
    			COMMANDE.CDE_CLI_NETAPAYER=CDE_CLI_NETAPAYER
    			SI HAjoute(COMMANDE) ALORS
    				POUR i=1 A TableOccurrence(Table_DETAIL_CDE_CLI)
    					SI Table_DETAIL_CDE_CLI[i]<>"" ET Table_DETAIL_CDE_CLI[i]<>0 ALORS
    					DETAIL_CDE_CLI.CDE_NUM=CDE_NUM
    					DETAIL_CDE_CLI.MAT_COD=Table_DETAIL_CDE_CLI.MAT_COD[i]
    					DETAIL_CDE_CLI.CLI_QTE_CDE=Table_DETAIL_CDE_CLI.CDE_QTE_CLI[i]
    					HAjoute(DETAIL_CDE_CLI)
    					FIN
    				FIN
    				SI OuiNon("Facture validée, Voulez-vous l'imprimer") ALORS
    			//	iInitRequeteEtat(EtatCommande,CDE_NUM)
    			//	iAperçu(i100)
    		//		iImprimeEtat(EtatCommande)
    				SINON
    					RAZ()
    					TableSupprimeTout(Table_DETAIL_CDE_CLI)
    					Incremente_IdCde()
    					EcranPremier(CDE_CLI_DAT)
    				FIN
    			FIN
    		FIN
    	SINON
    		Info("Veuillez sélectionner un client S.V.P")
    		EcranPremier(Btn_client)
    	FIN
     
    SINON
    	RepriseSaisie(CDE_CLI_DAT)	
    FIN
    Bouton modifier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    i est un entier=0
    MaCde est un entier=0
     
    i=TableSelect(Table_Requete_Liste_CDE)
    SI i=-1 ALORS RETOUR
    monindice=i
     
    MaCde=Table_Requete_Liste_CDE.CDE_NUM[i]
    Ouvre(FEN_CDE_CLIENT,2,MaCde)
    //affiche_produit(Recherche)
    TableSelectPlus(Table_Requete_Liste_CDE,monindice)
    J'ai beau cherche je ne vois pas l'erreur.


    MERCI de votre aide.


    PS: description fenêtre plus code en pdf (piece jointe)

  2. #2
    Membre chevronné Avatar de EDM-TAHITI
    Homme Profil pro
    Directeur Service informatique et projet développement
    Inscrit en
    Janvier 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Directeur Service informatique et projet développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2010
    Messages : 994
    Points : 1 995
    Points
    1 995
    Par défaut
    Hello,
    Je constate que tu utuilises une variable qui sert à savoir si la fiche est en création ou en modification (variable couv, sauf erreur).
    A la vue de ton code, tu as une procédure qui s'appelle Increment_IDCde. Je suppose que c'est un appel récursif sur la base en cours.
    Donc, lorsque tu es en Création (couv = 1), tu monte un enregistrment en mémoire, un identifiant, bref, tu initialises un déplacement dans dans fichier pour pointer sur le dernier enreg lu (1er probleme).
    Ensuite, tu vas chercher le detail de la commande. Pour les deux recherche, beaucoup passe directement par Hlitrecherche, ce que je ne fais jamais car il est impossible de gérer réellement les évenements. Je m'explique...
    dans ton code, tu utilises

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    01 - SI HLitRecherche(COMMANDE,CDE_NUM,CCde,hIdentique) ALORS
    02 - 		CDE_NUM=COMMANDE.CDE_NUM
    03 - 		CDE_CLI_DAT=COMMANDE.CDE_CLI_DAT
    04 -		SI HLitRecherche(CLIENT,CLI_ID,CLIENT.CLI_ID,hIdentique) ALORS
    			LibRais=CLIENT.CLI_NOM
    			Libtel=CLIENT.CLI_TEL
    			LibFax=CLIENT.CLI_FAX
    		FIN
    		HFiltre(DETAIL_CDE_CLI,CDE_NUM,COMMANDE.CDE_NUM,COMMANDE.CDE_NUM)
    		HLitPremier(DETAIL_CDE_CLI,CDE_NUM)
    		TANTQUE PAS HEnDehors
    			TableAjouteLigne(Table_DETAIL_CDE_CLI,DETAIL_CDE_CLI.MAT_COD,DETAIL_CDE_CLI.CLI_QTE_CDE,...
    			DETAIL_CDE_CLI.CDE_CLI_PRI,MAT_PRI_TOTAL)
     
    			HLitSuivant(DETAIL_CDE_CLI,CDE_NUM)
    		FIN
     
    	FIN
    Voilà déja ce que je propose comme réflexion

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    Si HRECHERCHE(COMMANDE,CDE_NUM, CCde, hidentique) alors
        // ok, l'eneg existe, on le monte et on point dessus
        HLITRECHERCHE(COMMANDE,CDE_NUM, CCde, hidentique) 
        // traitement d'affichage -> envois les données fichiers à l'ecran
        fichierversecran(mafenetre..nom, COMMANDE)
        // Monte l'enreg de client en rapport avec Commande
        // Erreur je pense sur fichier client, appel d'une variables non initialisée
        HRECHERCHE(CLIENT, CLI_ID, COMMANDE.CLI_ID, hidentique) 
        Si htrouve(client) alors
             // monte enreg en mémoire
             HLITRECHERCHE(CLIENT, CLI_ID, COMMANDE.CLI_ID, hidentique) 
             // on passe les variables à l'ecran
             fichiersversecran(mafenetre..non, client)
             // on monte les commandes liees
             HRECHERCHE(DETAIL, CDE_CLI,CDE_NUM)
             si htrouve(detail) alors
                   // monte enregs dans la table
                   // amorce le parcours de la clé
                   HLITRECHERCHE(DETAIL, CDE_CLI,CDE_NUM)
                   tantque htrouve(detail)
                     // insere toutes les lignes dans la table
                     tableajouteligne(..............) 
                    // fin du tantque htrouve(detail)
                    fin
              sinon
                  // erreur de lecture
                  info("Impossible de lire les commande pour ce client et cette commande")
             // fin de si htrouve(detail)
             fin
         sinon
             info("erreur", "Imopossible de lire le client pour la commande")
        // fin de si htrouve(client)
        fin
    sinon
        // l'enregsitrement n'est pas trouvé
        Info("Erreur","pas d'enreg pour la commande "+CCde)
    // fin du si hrecherche
    FIN
    Ensuite, li te faut gérer l'etat de ta fenetre

    Procedure affiche_fenetre(_COUV)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    selon _COUV
     
        cas 1
              // la fenetre est en création
              //
              // fenetre en creation, efface tous les champs et le spointeurs fichiers
              hraz()
              raz()
     
        cas 0
              // la fenetre est en modification
              // tu vas chercher tous les codes nécessaire à l'affichage des données
     
     
    // fin du selon couv
    fin
    Et faire la procedure d'enreg
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    procedure enregistre_fiche(_COUV)
    selon _COUV
     
        cas 1
              // la fenetre est en création
              //
              // fenetre en creation, efface tous les champs et le spointeurs fichiers
              // on transfert les données écrans vers le fichier
              ecranversfichiers(mafenetre..nom, COMMANDE)
              // faire la boucle pour mettre a jour le fichier detail
     
     
              // ajoute la fiche
              si pas hajoute(commande) alors
                  // info utilisateur
                  info("erreur d'ajoute de la fiche)
              sinon
                  // ok, fiche enregistrée, on modifie le statut de la fenetre
                  _COUV = 0 // passe en modification
              // fin du si pas hajoute
              fin
     
     
        cas 0
              // la fenetre est en modification
              // tu vas chercher tous les codes nécessaire à l'affichage des données
              // modifie la fiche
              si pas hmodifie(commande) alors
                  // info utilisateur
                  info("erreur de modification de la fiche)
              // fin du si pas hajoute
              fin
     
     
    // fin du selon couv
    fin
    Avec ce type de code, tu n'utilise plus pour le bouton modifier la commande qui te fait tout perdre à savoir

    ouvre(fen_cde_client,....)

    Voilà, c'est pas un code complet, mais il te donne la philosophie d'ouverture de fiche (fenetre) avec un statut d'entrée (Création ou Modification) qui détermine comment va se comporter la fenetre.
    Amicalement
    le savoir est dans les livres, 'the magic touch F1'
    Amicalement
    Eric

Discussions similaires

  1. modification d'un enregistrement par une requete
    Par tzinzin dans le forum Access
    Réponses: 7
    Dernier message: 23/03/2006, 20h36
  2. date de modification d'un enregistrement
    Par xycoco dans le forum Access
    Réponses: 3
    Dernier message: 15/11/2005, 21h47
  3. [IBquery]modification manuelle d'enregistrement
    Par dudux dans le forum Bases de données
    Réponses: 5
    Dernier message: 27/06/2005, 20h53
  4. TDBlookupcombo et modification d'un enregistrement existant
    Par delphim dans le forum Bases de données
    Réponses: 1
    Dernier message: 19/04/2005, 12h11
  5. Gestion des modifications pour un enregistrement
    Par Pascal Jankowski dans le forum Bases de données
    Réponses: 3
    Dernier message: 10/03/2004, 14h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo