|
Indirection |
|
Animateur WDF
Inscrit: 22/11/2002 11:40
De Toulon
Post(s): 126
|
Bonjour C'anonyme qui à réussi à trouver le temps de ce connecter Voilà le souci d'aujourd'hui. J'ai un un certains nombre de champs à rendre visibles Ces champs sont noté Rub_TVATx1 Rub_TVATx2 Rub_TVATx3 et ainsi de suite Ce bout de code est coinsé dans une boucle Niteration // On rend les champs visibles P_ChampVisible("Rub_TVATx"+Niteration) Mais mon souci c'est que j'ai une erreur dans la procédure Erreur à la ligne 3 du traitement Procédure locale P_ChampVisible. Propriété interdite PROCEDURE P_ChampVisible(P_champ) // but >> Rendre un champ invisible P_champ..Visible=Vrai Il semblerait que les "" qui entourent mon parametre pose souci. Si vous avez des idées je suis preneur William
Contribution le : 18/02/2004 09:47
|
_________________
Vous pouvez me joindre william at wdforge.org
ou sur Msn
joindreWilliam at hotmail.com en instantanée ......
|
|
Re: Indirection |
|
Animateur WDF
Inscrit: 02/03/2003 04:07
De Noisy le grand(93)
Post(s): 2745
|
Voici a quoi doit ressemble ta procédure: Cette procedure permet de rendre tout objet visible ou invisible selon la valeur passée à la procédure Un champ ou meme un groupe de champs. Cette procédure utilise l'indirection Code de la procédure
P_ObjetVisible(P_Objet,pEtat)
{P_Objet}..Visible=pEtat
Appel de la procédure
P_ObjetVisible("Rub_TVATx"+Niteration,Vrai)
Contribution le : 18/02/2004 10:01
|
|
|
Re: Indirection |
|
Animateur WDF
Inscrit: 22/11/2002 11:40
De Toulon
Post(s): 126
|
Bonjour je teste tout de suite avec les {} je n'ai pas besoin de faire passer l'état en param car s'il ne sont pas dans la boucle ils restent invisbles
Merci
William
Contribution le : 18/02/2004 10:16
|
|
|
Re: Indirection |
|
Animateur WDF
Inscrit: 22/11/2002 11:40
De Toulon
Post(s): 126
|
Chat marche je n'ai plus l'erreur. Merci William
Contribution le : 18/02/2004 10:17
|
|
|
Re: Indirection |
|
Animateur WDF
Inscrit: 22/11/2002 11:40
De Toulon
Post(s): 126
|
Re
Encore une question. Je n'ai pas réussi a me mettre à la POO non pas que le concept m'échappe mais la rédaction sous WD me pose souci.
Si le coeur vous en dit je suis preneur
Voici tout mon code pour faire ce que je voulais
C'est pour une facture ou devis mais le client veut avoir le détail de TVA. il peut en avoir plusieurs sur le meme corps
Pour cela j'ai stocké le tva en base avec des séparateurs "/"
Si on pouvait m'aider dans la rédaction des différents éléments constructeur, méthodes et autres se serait bien pour que je puisse me faire les dents.
Cordialelement William
Dans l'état j'ai mis
// Exemple de tva stocké en base 19.6=2.458194/5.5=5.21327/
// Nbr de TVA NnbrTVA=ChaîneOccurrence(Req_Facture.TvaLigne,"/")
// Lecture du premier P_PostionTvaMt(Req_Facture.TvaLigne,1,1,PositionOccurrence(Req_Facture.TvaLigne,"/",1),1) POUR Niteration=2 A NnbrTVA // Extract, les champs sont mis a jour par une procedure en cascade // Remise à zero pour assurer CTVAMt="";cTVATx="";NrechEgale="";NRechFin="" P_PostionTvaMt(Req_Facture.TvaLigne,Niteration,NRechDebut,PositionOccurrence(Req_Facture.TvaLigne,"/",Niteration),Niteration) FIN // pour Niteration=1 à NnbrTVA
// calcul du montant de TVA sur toutes les TVA // il y a 5 champs pour le moment, mais on pourrait faire passe en param // On met le champs à zéro pour eviter les cumuls Rub_TotalTVA=0 POUR Niteration=1 A 5 Rub_TotalTVA+={"Rub_TVAVal"+Niteration} FIN // Pour Niteration=1 à 5
Les procédures sont les suivantes PROCEDURE P_PostionTvaMt(P_donnee,P_rang,P_deb,p_fin,P_iteration) // But >> rechercher la partie qui contient le tx et le montant // 19.6=2.458194/5.5=5.21327/ NRechFin=PositionOccurrence(Req_Facture.TvaLigne,"/",P_rang)
// Position du "=" NrechEgale=F_PositionEgale(P_donnee,P_deb) // On extrait le Tx TVA cTVATx=P_donnee[[P_deb A NrechEgale-1]] // On extrait le montant CTVAMt=P_donnee[[NrechEgale+1 A p_fin-1]]
// On prévoit p_deb le retour sur cette procédure NRechDebut=p_fin+1
//// On rend les champs visibles P_ChampVisible("Rub_TVATx"+P_iteration) P_ChampVisible("Rub_TVAVal"+P_iteration)
// On assigne les valeurs P_ChampsValeur("Rub_TVATx"+P_iteration,cTVATx) P_ChampsValeur("Rub_TVAVal"+P_iteration,CTVAMt)
PROCEDURE F_PositionEgale(p_donner,P_Debut)
// but >> recbercher la position du Egale //NrechEgale=Position(Req_Facture.TvaLigne,"=",P_debut) RENVOYER Position(p_donner,"=",P_Debut)
PROCEDURE P_ChampVisible(P_champ) // but >> Rendre un champ invisible {P_champ}..Visible=Vrai
PROCEDURE P_ChampsValeur(P_champ,P_valeur) // but >> assigner la valeur à un champ {P_champ}=P_valeur
Contribution le : 18/02/2004 11:42
|
|
|
Re: Indirection |
|
Animateur WDF
Inscrit: 26/06/2002 16:24
De wdforge.org
Post(s): 2822
|
Bonjour, Nous publions ces dossiers et documentation a titre d'information mais aussi d'exemple... Voici donc des exemples illustré de classes. - cZO mini classe pour les validations automatique de Zones Obligatoires. - cIni classe plus complexe pour la gestion des INI. Le portage en classe de votre code devrait ne pas poser de problème. Merci au passage de lire l'aide en ligne sur le sujet. Bon courage.
Contribution le : 18/02/2004 12:06
|
|
|
Re: Indirection |
|
Animateur WDF
Inscrit: 02/03/2003 04:07
De Noisy le grand(93)
Post(s): 2745
|
Salut William, Un début d' ébauche
//*** Déclaration de cTVA ***
cTVA est une classe
mTabTVATaux est un tableau de 0 réels //Tableau de taux de TVA
mTabTVAMontant est un tableau de 0 réels //Il faut peut être utiliser un monétaire
mNbrLignes est un entier //Nombre de ligne
FIN
//*** Methdode meth_TVALignesAffecte ***
PROCEDURE meth_TVALignesAffecte(pValeur est une chaîne)
sUneLigne est une chaîne
sUnTaux est une chaîne
sunMontant est une chaîne
i est un entier
SI SansEspace(pValeur) = "" ALORS RETOUR //ne fait rien si pvaleur est vide
SI Droite(pValeur) <> "/" ALORS pValeur = "/" //on rajoute / en fin si il n'existe pas
:mNbrLignes = ChaîneOccurrence (pValeur,"/")//On récupère le nombre de ligne
Dimension(:mTabTVATaux,:mNbrLignes)//On redimensionne le tableau
Dimension(:mTabTVAMontant,:mNbrLignes)//On redimensionne le tableau
BOUCLE //Pour lire toutes les lignes
i++
sUneLigne = ExtraitChaîne (pValeur,i,"/")//On récupère une ligne
SI SansEspace(sUneLigne) = "" ALORS SORTIR //Si on a plus de lignes alors on sort
sUnTaux = ExtraitChaîne(sUneLigne,1,"=") //On récupère le taux de la tva
sunMontant = ExtraitChaîne(sUneLigne,2,"=") //On récupère le montant
:mTabTVATaux[i] = Val(sUnTaux)
:mTabTVAMontant[i] = Val(sunMontant)
FIN
//*** meth_TVALignesAffecte ***
PROCEDURE meth_TVALignesAffecte(pValeur est une chaîne)
sUneLigne est une chaîne
sUnTaux est une chaîne
sunMontant est une chaîne
i est un entier
SI SansEspace(pValeur) = "" ALORS RETOUR //ne fait rien si pvaleur est vide
SI Droite(pValeur) <> "/" ALORS pValeur += "/" //on rajoute / en fin si il n'existe pas
:mNbrLignes = ChaîneOccurrence(pValeur,"/") //On récupère le nombre de ligne
Dimension(:mTabTVATaux,:mNbrLignes) //On redimensionne le tableau
Dimension(:mTabTVAMontant,:mNbrLignes) //On redimensionne le tableau
BOUCLE //Pour lire toutes les lignes
i++
sUneLigne = ExtraitChaîne(pValeur,i,"/")//On récupère une ligne
SI SansEspace(sUneLigne) = "" ALORS SORTIR //Si on a plus de lignes alors on sort
sUnTaux = ExtraitChaîne(sUneLigne,1,"=")//On récupère le taux de la tva
sunMontant = ExtraitChaîne(sUneLigne,2,"=") //On récupère le montant
:mTabTVATaux[i] = Val(sUnTaux)
:mTabTVAMontant[i] = Val(sunMontant)
FIN
//*** meth_GetTotalTVA ***
PROCEDURE meth_GetTotalTVA()
nMontantTVA est un réel
i est un entier
SI :mNbrLignes = 0 ALORS RENVOYER 0
POUR i = 1 A :mNbrLignes
nMontantTVA += :mTabTVAMontant[i]
FIN
RENVOYER nMontantTVA
//*** meth_MAJChamps ***
PROCEDURE meth_MAJChamps(pPrefixeChampsTaux est une chaîne, pPrefixChampsMontant est une chaîne)
i est un entier
POUR i = 1 A :mNbrLignes
{pPrefixeChampsTaux+i}..Visible = Vrai
{pPrefixeChampsTaux+i}..Valeur = :mTabTVATaux
{pPrefixChampsMontant+i}..Visible = Vrai
{pPrefixChampsMontant+i}..Valeur = :mTabTVAMontant
FIN
Pour utiliser cette classe
TVA est un objet cTVA
TVA:meth_TVALignesAffecte(Req_Facture.TvaLigne)
TVA:meth_MAJChamps("Rub_TVATx", "Rub_TVAVal")
Contribution le : 19/02/2004 01:30
|
|
|
Re: Indirection et POO |
|
Animateur WDF
Inscrit: 22/11/2002 11:40
De Toulon
Post(s): 126
|
Waou!!! Grand merci drcharly93
Je regarde et je vous tiens au courant. Par contre encore une question. Je me la pose en pensant à une classe télécharger ici, pour les champs obligatoire.
Le fonctionnement de cette classe semble simple mais comment la mettre en pratique??
Dois-je la construire à chaque lancememnt de la fenêtre et la détruire à la fermeture? et si ce n'est pas le cas comment faire la différence si je fais appel plusieurs fois à cette classe dans la cas de plusieurs fenêtres ouvertes en même temps??
je crois que c'est ce qu'on nomme les instances?? Bref un nom En même temps que je tape je vois une ligne de code TVA est un objet Ctva si j'avais une deuxième fenêtre il suffirait de mettre TVA2 est un objet Ctva C ça??
Merci encore
William
Contribution le : 19/02/2004 08:03
|
|
|
Re: Indirection et POO |
|
Animateur WDF
Inscrit: 26/06/2002 16:24
De wdforge.org
Post(s): 2822
|
Citation : Le fonctionnement de cette classe semble simple mais comment la mettre en pratique??
Dois-je la construire à chaque lancememnt de la fenêtre et la détruire à la fermeture? et si ce n'est pas le cas comment faire la différence si je fais appel plusieurs fois à cette classe dans la cas de plusieurs fenêtres ouvertes en même temps??
cZo est à déclarer globale à chaque fenêtre ,il s'agit là de l'application de la portée des variable. Comme l'indique la documentation l'instance est à déclarer dans l'init de la fenêtre utilisatrice...
// Déclarations de Mafanêtre
GLOBAL
oZO est un cZO // crée une instance pour la fenêtre
...
// init d'un champ de la fenêtre
oZO:Ajoute(MoiMeme..Nom) // Utilise une méthode de l'instance.
Le fait d'avoir une instance pour chaque fenêtre leur permet d'avoir leur propre liste de zone (membre m_cZO)... et donc de ne pas mélanger les listes de zone obligatoires dans un objet global au projet... Pour votre classe, effectivement il faut l'instancier pour l'exploiter... l'instance est alors une variable dont il faut configurer la portée en fonction de l'utilisation (locale, globale fenêtre, globale projet). oTVA est un cTVA // instanciation
...
oTVA:Méthode(paramètre) // utilisation de l'instance
Contribution le : 19/02/2004 09:02
|
|
|
Re: Indirection et POO |
|
Animateur WDF
Inscrit: 22/11/2002 11:40
De Toulon
Post(s): 126
|
Re Ok donc mon raisonnement était juste grand merci pour votre aide et moi je continue à gratter de mon coté je sens que ce que j'avais lu va être juste. Une fois gouté à la POO on ne peut plus s'en passer William
Contribution le : 19/02/2004 09:07
|
|
Vous ne pouvez pas débuter de nouveaux sujets.
Vous pouvez voir les sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.
|
Connexion
Menu
Chercher WDForge
Chercher Web
Partenaires
|