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 :

Réplication Universelle dans une boucle. [WD15]


Sujet :

WinDev

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Décembre 2010
    Messages : 11
    Par défaut Réplication Universelle dans une boucle.
    Bonjour,

    Je réalise une application qui exporte l'agenda d'un commercial vers plusieurs assistantes. Je me suis inspiré de l'exemple WDReplication Universelle.

    J'utilise un fichier ayant le nom des assistante et je demande la réplication dans une boucle POUR TOUT nom du fichier...(j'ai aussi essayé avec Tant que...etc.).

    Il s'avère que Windev sort de la boucle après le premier enregistrement. C'est la commande HcréerReplicaTransportable qui provoque cette erreur. Les autres commandes de réplication ne posent pas de problème.
    De même quand je n'utilise pas de boucle (cas d'un seul abonné), je n'ai pas de problème.

    Quelqu'un a t il une solution ?

    Cordialement.

  2. #2
    Membre Expert
    Avatar de mail.spam
    Homme Profil pro
    Développeur Windev et technicien maintenance
    Inscrit en
    Janvier 2008
    Messages
    1 915
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Windev et technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 915
    Par défaut
    Bonjour,
    et bienvenue sur ce forum.

    Je n'ai pas de solution pour ton problème mais peux tu nous mettre plus d'information.
    Donne nous le code que tu utilise (code de ta boucle) et également les messages d'erreur s'il y en a.
    Car plus tu nous donnes d'information sur ton problème et mieux sera la réponse.

    Merci d'avance.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Décembre 2010
    Messages : 11
    Par défaut
    Bonjour,

    Merci pour ton conseil. Ci dessous la procédure qui est rappelée dans la boucle.

    Cordialement
    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    PROCEDURE AjouteAbonnéSupplémentaire()
    Sablier()
     
    	// Ouvre la fenêtre de progression
    	OuvreFille(FEN_InfoSynchro)
     
    	// On désactive le GFI temporairement pour éviter les effets de scintillement
    	// avec la fenêtre de conflit
    	FenActiveGFI(FEN_Accueil, Faux)
    	FenActiveGFI(FEN_InfoSynchro, Faux)
     
    	// Borne de la jauge
    	FEN_InfoSynchro.JAUGE_TRAITEMENT..BorneMax = 3
     
     
    	// Variables locales
    	sPays est une chaîne = Synchronisation.gsNomAssistante
    	sRéplicaMaitre est une chaîne
    	sRepertoireNouvelAbonne est une chaîne
    	sRéplicaTransportable est une chaîne
     
    	// Définition de l'assistante
     
    	sPays =ParametreAssistantes.NuméroAgenceCommerciale+ParametreAssistantes.Initiales
     
    	// Création du répertoire d'accueil des données
    	sRepertoireNouvelAbonne = Synchronisation.gsRepertoireBase+["\"]+sPays +"\"
     
    	// Crée le répertoire abonné
    	fRepCrée(sRepertoireNouvelAbonne)
     
    	// Création du réplica abonné pour le site
    	ErreurChangeParamètre(epCode)
    	SI HCréeRéplicaAbonné(Synchronisation.gsRepertoireMaitre, sRepertoireNouvelAbonne, sPays, 0) = Faux ALORS
    		// Il n'a pas été possible de créer l'abonné
    		// Traitement du cas ou il a déjà été créé dans ce cas il faut le recréer, sinon abandon de la création avec affichage de la cause...
    		SI ErreurInfo(errCode) = 180020 ALORS
    			// Recréation d'un abonné déjà créé précédemment ...
    			SI HRecréeRéplicaAbonné(Synchronisation.gsRepertoireMaitre, sRepertoireNouvelAbonne, sPays) = Faux ALORS
    				FinProgramme("Echec de création du réplica abonné."+RC+ErreurInfo())
    			FIN
    		SINON 
    			FinProgramme("Echec de création du réplica abonné."+RC+ErreurInfo())
    		FIN
    	FIN
    	ErreurChangeParamètre(epAfficheMessageFinProgramme)
     
     
    	// Transfert de la base HyperFileSQL (maître) dans une nouvelle base correspond à ce nouvel abonné (première synchronisation)
    	sRéplicaMaitre = Synchronisation.gsRepertoireMaitre +["\"]+ cstNomReplicaMaitre
     
    	// Ouverture d'une connexion sur la base HyperFileSQL (Portugal - Maître)
    	OuvreUneConnexion(Synchronisation.gsNumCommercial)
     
    	// Création du réplica transportable avec contenu initial de la base HyperFileSQL
    	HCréeRéplicaTransportable(sRéplicaMaitre,sPays,"")
     
     
    	// Ouverture d'une connexion HyperFileSQL dans le dossier des données du nouvel abonné
    	OuvreUneConnexion(sPays)
    	sRéplicaTransportable = Synchronisation.gsRepertoireMaitre +["\"]+ RPL.Fichier
     
    	// Création du fichier de données  : la base Abonnée
    //	fCopieFichier(Synchronisation.gsRepertoireBase + "\AgendaEvénement.fic",sRepertoireNouvelAbonne)
    //	fCopieFichier(Synchronisation.gsRepertoireBase + "\AgendaEvénement.mmo",sRepertoireNouvelAbonne)
    	HCréation(AgendaEvénement)
     
     
    	// Synchronisation du réplica avec la base Access
    	HSynchroniseRéplica(sRéplicaTransportable, sRepertoireNouvelAbonne+"Replica_"+sPays+".RPL", rplVersAbonné)
     
    	// Il faut effectuer une synchronisation de l'abonné vers le maître également
    	// Le maître sera ainsi "informé" que la synchronisation initiale a bien été faite
    	HCréeRéplicaTransportable(sRepertoireNouvelAbonne+"Replica_"+sPays+".RPL", sPays, "")
    	sRéplicaTransportable = sRepertoireNouvelAbonne +["\"]+ RPL.Fichier
    	// Connexion à la base maître afin de synchroniser ce nouveau réplica abonné...
    	OuvreUneConnexion(Synchronisation.gsNumCommercial)		
    	HSynchroniseRéplica(Synchronisation.gsRepertoireMaitre +["\"]+ cstNomReplicaMaitre, sRéplicaTransportable, rplVersMaître)	
     
    Ferme(FEN_InfoSynchro)
    Sablier(Faux)
    Info("Traitement terminé")

  4. #4
    Membre Expert 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 : 61
    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
    Par défaut
    Hello,
    1 - généralité
    La réplication permet de répliquer (si, si) des données dans deux sens. Et elle met a jour les données déjà répliquées. Donc, je ne vois pas pourquoi tu cherches à savoir si un enreg est déjà répliqué. Si ce dernier n'a pas changé depuis sa dernière répliquation, rien ne se fera. En revanche, si mise à jour il y a, il sera alors repliqué (qu'importe le sens, c'est la synchro des données).

    2- le code
    Dans ton code, je ne vois pas de filtre posé en fonction du commercial.
    En effet, il me semble que c'est lui (son id, son nom, bref,..) qui détermine les assistantes commerciales, non? Et donc, par le biais de l'assistante commerciale, le n° d'agence et donc, le n° de pays, non?
    Si oui, alors, la variable sPays doit être construit pour toutes les occurrences de Commercial+assistante+n° d'agence+Pays (dans l'ordre que tu veux, c'est un répertoire.

    3 - le filtrage
    Je ne vois pas de filtre de posé sur tes fichiers. Mais comme je le décrivais plus haut, il faut filtrer les enregistrements à repliquer en fonction de chaque abonné (par exemple, une cle de type abonne = pays+agence+assistante).
    Ainsi, tu pourras avoir autant d'assitante par agence et par pays que tu veux, et les réplications se feront correctement.
    Pour les filtres, il faudrait connaitre la relation qui existe entre le fichier assistante (qui doit comporter au moins deux liaisons, la premiere avec pays, la seconde avec agence) et le fichier commercial. Et la question qui soutend est:
    Une assistante commerciale peut-elle avoir plusieurs commerciaux. Si oui, alors, on entre dans une table de relation intermédiarie car chaque commercial peut avoir plusieurs assistantes, non?
    Et donc, j'y arrive, le filtre sur la table de relation 'commerciassistante' doit se faire sur idcommerciale et idassistante du type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     hfiltre(commerciassistante,idcommercial, commercial.idcommercial, commercial.idcommercial,"idassistante = "+assistante.idassistante)
    Ainsi tu as deux boucles
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    pour tout commerciale du fichier commercial
         // boucle sur fichier commerciassistante
         pour tout assistante du fichier relaton
              // on envoi dans le replica tous les enreg correspondant
              filtrage des données en fonction du commerciale et d el'assistante
     
     
         // fin du fichier de relation
         fin
     
    // fin boucle commerciale
    fin
    Et voilà, le tour est joué... enfin, il te reste à coder...
    bon dev...

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Décembre 2010
    Messages : 11
    Par défaut Réplication suite
    Bonjour,

    Merci pour ta réponse mais je ne comprends pas.

    Je n'ai qu'un utilisateur qui est le commercial (fichier Maitre) et c'est le nombre d'assistante qui varie. La variable sPays est affecté a l'assistante.

    Je ne comprend pas l'emploi de filtres (je suis débutant en Windev).

    Dans l'attente de ta réponse, je te souhaite un joyeux Noël.

    Cordialement

  6. #6
    Membre Expert 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 : 61
    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
    Par défaut
    Hello,
    Je vais essayer d'apporter des réponses à tes questions.
    pour commencer, ne sois jamais restrictif dans une analyse de besoins, car cela méne souvent à revoir la structure même de l'analyse. Autant faire bien du premier coup, cela évite bien des déboires.
    Je vais prendre un exemple afin d'éclairer mes propos.
    Au départ, tu ne possédes qu'un commercial, mais tout bon logiciel doit permettre de gérer les exceptions, ainsi, la généralité srera toujours d'actualité.
    Donc un commercial a plusieurs assistantes, nous sommes donc dans une relation simple entre le fichier 'commercia'l et le fichier 'assistante' de type
    'un commercial a plusieurs assistantes' mais une 'assistante ne peut avoir plusieurs commerciaux'.
    Pourtant, dans le développement de la société, avec le recrutement d'un nouveau commercial, ton analyse ne tient plus car si dans un pays, deux commerciaux sont présents, alors, la société ne va pas recruter autant d'assistante que de commerciaux. Ainsi, on se retrouve avec une faille dans l'analyse ou il faudre modifier la relation entre commercial et assistante et passer à 'une assistante peut avoir plusieurs commerciaux'. Et entre en jeu un fichier supplémentaire (généré automatiquement par windev) qui va faire le lien entre 'commercial' et 'assistantes'

    Fichier commercial
    IDCOMMERCIAL
    NOM
    PRENOM

    Fichier assistantes
    IDASSISTANTE
    NOM
    PRENOM
    IDPAYS

    Fichier de relation entre 'commercial' et 'assistantes'
    IDRELATION
    IDCOMMERCIAL
    IDASSISTANTE

    Fichier Clients
    IDCLIENT
    IDCOMMERCIAL
    NOM
    PRENOM


    Ce troisième fichier te permettra, en interrogeant le fichier de relation, de connaitre toutes les assistantes de ce commercial et par la même, les pays dans lequel il évolue (ainsi, un commercial peut avoir alors plusieurs pays).

    Cette explication faite, lorsque tu vas vouloir faire la réplication, il est inutile d'envoyer à la chine les informations de la france. Donc, il va falloir filtrer les informations du/des assistantes.
    Il va donc falloir filtrer les données que tu souhaites envoyer à la chine par le biais de filtre sur 'clients'

    Hfiltre(clients,idcommercial, commercial.idcommercial, commercial.idcommercial)

    Si ta relation de fichiers est bien faite, lors de la réplication, ne seront pris que les enregistrements liés au commercial que tu souhaites envoyer en chine. Tu peut même y ajouter un filtre supplementaires sur le fichier 'asistantes' pour dire

    Hfiltre(assistantes,idpays, ......)

    Ainsi, tune répliqueras que les enregistrements nécéssaires à la chine. Gain de temps, facile à porter par mail, ou tout autre moyen.

    Cette analyse succincte est valable aussi pour un seul pays, mais avec plusieurs régions.... (je donne des idées à ceux qui me liront).

    Voilà comment je vois la chose.

    Dernier point, comme je le dis souvent, Windev est un outil qui permet de gagner énormément de temps, lorsque que l'on connait parfaitement l'analyse meurise (pas paul, l'autre), que l'on connait parfaitement l'outil de développement avec ses possibilités et ses limites, et que l'on prend le temps de coucher sur une feuille l'analyse en se posant les vraies questions (pas de restriction mentale et intellectuelle).

    Tu me dis que tu es débutant en Windev, bienvenue alors, mais je pense que tu mets la barre très haute pour commencer, mais comme besoin il y a, tu t'efforceras d'y répondre, c'est motivant. Et quel apprentissage.

    Ne te décourage pas, le chemin sera semé d'embûches, des nuits à passer à coder, mais avec la satisfaction de voir rapidement que ton code fonctionne.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [langage] incrementation de variable dans une boucle
    Par mimilou dans le forum Langage
    Réponses: 15
    Dernier message: 16/04/2004, 13h23
  2. Problème avec TNMSMTP dans une boucle.
    Par Orgied dans le forum Web & réseau
    Réponses: 3
    Dernier message: 07/04/2004, 10h19
  3. swf dans une boucle asp
    Par Chucky69 dans le forum Flash
    Réponses: 11
    Dernier message: 10/02/2004, 17h07
  4. [Vb.net] Indexé un objet crée dans une boucle
    Par picpic dans le forum Windows Forms
    Réponses: 10
    Dernier message: 17/12/2003, 14h37
  5. Pause dans une boucle
    Par HT dans le forum Langage
    Réponses: 4
    Dernier message: 03/06/2003, 08h52

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