1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies. En savoir plus.
  2. Bonjour tout le monde ! Veillez consulter la Politique de forum pour comprendre nos règles, Merci a vous !
    Rejeter la notice

WD Trop de paramètres pour les procédures

Discussion dans 'Windev' créé par C8H10N4O2, Sept 15, 2020.

  1. C8H10N4O2

    C8H10N4O2 New Member

    Inscrit:
    Août 3, 2020
    Messages:
    27
    J'aime reçus:
    5
    J'ai plusieurs procédures/méthodes dans différentes classes qui ont énormément de paramètres, entre 7 et 11 paramètres !! (vive le code hérité)
    Ce sont des méthodes de calcul pour une comptabilité auxiliaire

    Code (Windev):
        PROCÉDURE CalculBalance(psSocCode, piSecteurId est un entier , psDateDebut, psDateFin, pbSansBrouillon est un booléen = Faux)
        Procédure  CalculeLignesEcheancesAG(psSocCode, piSecteurId est un entier , psDateDebut = _CH_VIDE, psDateFin = _CH_VIDE, pbSansBrouillon est un booléen = faux)
        Procédure CalculeBalanceAG(psSocCode, piSecteurId est un entier , psDateDeb, psDateFin, pbParDateEch = faux,pbDetailleNonLettreHorsPeriode = faux, pbSansBrouillon est un Booleen = faux)
        Procédure Calcul_Journaux(piTypeVente,piTypeBque, piTypeAutres,poFiltreGene, psListeSoc_code,psListeAutresJRNType2,psListeAutresJRNType3, psDateDeb, psDateFin,piTransferer = 2, pbSansBrouillon est un booléen = Faux)
        Procédure  CalculeLignesEcheances(psSocCode, piSecteurId est un entier , psDateDebut = _CH_VIDE, psDateFin = _CH_VIDE, pbDetailleNonLettreSurPeriodeAnterieur est un booléen =faux,pbNonLettréUniquement est un booléen= faux,pbSansBrouillon est un Booleen = faux)
        Procédure  CalculeLignesFactures(psSocCode, piSecteurId est un entier , psDateDebut = _CH_VIDE, psDateFin = _CH_VIDE, pbDetailleNonLettreSurPeriodeAnterieur est un booléen=faux,pbNonLettréUniquement est un booléen = faux,pbSansBrouillon est un Booleen = faux)
        Procédure  CalculeLignesRemises(psSocCode, piSecteurId est un entier , psDateDebut = _CH_VIDE, psDateFin = _CH_VIDE, pbDetailleNonLettreSurPeriodeAnterieur est un booléen=faux,pbDetailEcheance est un Boolean= faux,pbNonLettréUniquement est un Boolean= faux,bReglt_POST_PERIODE est un Boolean= vrai,pbSansBrouillon est un Boolean = faux)
        Procédure CalculExtraitCompte(psSocCode, piSecteurId est un entier , psDateDebut = _CH_VIDE, psDateFin = _CH_VIDE, pbNonLettréUniquement est un booléen = faux, pbDetailleNonLettreHorsPeriode est un booléen =faux, pbAvecDetails est un booléen =faux,bReglt_POST_PERIODE est un booléen = vrai,pbSansBrouillon est un booléen = faux)
        Procédure  calculLettragePartiel(psSocCode, piSecteurId est un entier ,pbSansBrouillon est un booléen = faux)
    Sur ces méthodes j'ai des paramètres en commun que vous avez surement repéré.
    Dans ce cas J'ai l'habitude de passer par une structure, là j'aurais ça

    Code (Windev):

    strParamCalcul est une structure
    sSociete est une chaine
    iSecteurId est un entier
    sDateDebut est une chaine
    sDateFin est une chaine
    bSansBrouillon est un booléen
    fin
     
    J'obtiendrais ça :
    Code (Windev):

    Procédure  CalculeLignesFactures(stPa est un strParamCalcul)
    Procédure CalculeBalanceAG(stPa est un strParamCalcul, pbParDateEch = faux,pbDetailleNonLettreHorsPeriode = faux)
    ...
     
    c'est nettement plus lisible.
    De plus ça permet de rajouter facilement un paramètre par la suite. Il suffit de le rajouter dans la structure.
     
    Tags:
  2. C8H10N4O2

    C8H10N4O2 New Member

    Inscrit:
    Août 3, 2020
    Messages:
    27
    J'aime reçus:
    5
    Par contre ça me soulève un soucis : le paramétrage par défaut !
    Ces méthodes ont toutes ", bSansBrouillon est un booléen = faux"
    avec cette structure je suis obligé de ne pas oublier de le renseigner.

    J'avais aussi l'idée d'utiliser un objet au lieu de la structure. De cette façon je pourrais renseigner le paramétrage par défaut dans le constructeur de l'objet.

    Code (Windev):

    CLParamCalcul est une classe
    sSociete est une chaine
    iSecteurId est un entier
    sDateDebut est une chaine
    sDateFin est une chaine
    bSansBrouillon est un booléen
    fin
    ...
    PROCÉDURE Constructeur()
    :bSansBrouillon = faux
    ...
     
    Quelle solution vous adoptez dans des cas similaires ?
     
  3. khaliassas

    khaliassas Active Member

    Inscrit:
    Mar 4, 2019
    Messages:
    446
    J'aime reçus:
    142
    perso avant je faisait beaucoup de structure maintenant j'utilise beaucoup les classe
    tu peux renseigner la valeur par defaut pas besoin de le renseigner dans le constructeur
    CLParamCalcul est une classe
    sSociete est une chaine
    iSecteurId est un entier
    sDateDebut est une chaine
    sDateFin est une chaine
    bSansBrouillon est un booléen=faux
    fin


    par exemple
    en plus tu peux choisir les élément que tu peux ou non sérialiser.
    en générale pour envoyer les info de windev a windev mobile je les passe en json.


    en plus tu peux faire pas mal de calcul auto et de controle
    en effet selon le type de valeur que tu passe pour un parametre cela peut interdire certaine valeur sur d'autre parametres ou meme renseigner directement les valeurs sans avoir a les renseigner lors de la declaration.
     
  4. khaliassas

    khaliassas Active Member

    Inscrit:
    Mar 4, 2019
    Messages:
    446
    J'aime reçus:
    142
    tu pourrais par exemple crée un objet global

    et tu met dedans toutes tes procédures en méthode dedans.

    du coup lors de l'instanciation tu peux passer les paramètres généraux.

    et tu appel via méthode en passant seulement les paramètres nécessaire.
     
  5. trick

    trick Active Member
    MEMBRE WX DUMP TEAM

    Inscrit:
    Jan 1, 2018
    Messages:
    169
    J'aime reçus:
    95
    Salut,

    Perso moi j'utilise les paramètres variables

    Voir aide ci-dessous

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

     
  6. popoy

    popoy Well-Known Member
    MEMBRE WX

    Inscrit:
    Fev 23, 2018
    Messages:
    2,882
    J'aime reçus:
    1,532

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    , ça ne fonctionne pas sur Android
    Personnellement, je crée des procédures
    Avec tous les paramètres nécessaire
    Et je met a vide ceux qui sont Inutiles.
    Par contre j'évite les classes et objet en mobile.
    Mais bon vu que le post est sur wd et pas wm, c'est une bonne idée.
     
  7. C8H10N4O2

    C8H10N4O2 New Member

    Inscrit:
    Août 3, 2020
    Messages:
    27
    J'aime reçus:
    5

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    en plus tu peux faire pas mal de calcul auto et de controle
    en effet selon le type de valeur que tu passe pour un parametre cela peut interdire certaine valeur sur d'autre parametres ou meme renseigner directement les valeurs sans avoir a les renseigner lors de la declaration.
    Cliquez pour agrandir...
    C'est la solution que je préfère, justement grâce aux contrôles que je pourrais rajouter par la suite.


    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    merci pour l'idée

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    oui que du wd, pas de wm
     

Partager cette page

Chargement...