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 Requête avec report des soldes précédents

Discussion dans 'Windev' créé par ptrous, Nov 10, 2019.

  1. ptrous

    ptrous Member

    Inscrit:
    Oct 28, 2019
    Messages:
    44
    J'aime reçus:
    10
    Bonjour à tous j ai un souci ,dans mon mini application de compte bancaire .Je m explique,le compte à subit 7 mouvement entre la période du 29/10/2019 au 01/11/2019 ce qui lui donne un solde Crediteur de 121307 ce qui est normal car ma requête fait un select from.....sum((...)) avec paramètre les 2 bornes de mes date ,mais la pour avoir les bon soldes il faut faire le parcours de tout le fichier ce qui est normal

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


    maintenant lorsque j exclu les date antérieurs j ai un solde créditeur de 6307 (qui n est pas le bon solde en compte)

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



    Alors ce que je voudrais faire s est de pouvoir par exemple en date du 01/11/2019 au 01/11/2019 avoir le solde du 29/10/2019 au 31/10/2019 qui sera comme repport de ces dates (car on peut décider de connaitre le solde d un compte et si jamais l individu a un compte ouvert par exemple en 1995 et que son derniers mouvement a lieu le 01/11/2019 on peut décider d éditer son compte de du 20/01/2018 au 01/11/2019 mais il faudrait que le système puisse prendre en compte les element de 1995 au 20/01/2018 qu il devra reporter sous forme de solde précédent et ce solde sera additionné à celle du 20/01/2018 au 01/11/2019 et la on pourra un bon solde)

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


    voici à quoi ressemble mon etat

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



    mon analyse

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



    mon code
    [windev]SELECT
    Mouvement.IDMouvement AS IDMouvement,
    Mouvement.Piece_comptable AS Piece_comptable,
    Mouvement.Date_Mouv AS Date_Mouv,
    Ecr_compt.Num_Compte AS Num_Compte,
    Compte.Lib_Compte AS Lib_Compte,
    Mouvement.Code_Journal AS Code_Journal,
    Ecr_compt.Description_Ecr AS Description_Ecr,
    Mouvement.Valider AS Valider,
    Ecr_compt.Credit_Ecr AS Credit_Ecr,
    SUM(( Ecr_compt.Credit_Ecr - Ecr_compt.Debit_Ecr ) ) AS Solde,
    Ecr_compt.Debit_Ecr AS Debit_Ecr
    FROM
    Mouvement,
    Ecr_compt,
    Compte
    WHERE
    Compte.Num_Compte = Ecr_compt.Num_Compte
    AND Mouvement.IDMouvement = Ecr_compt.IDMouvement
    AND
    (
    Mouvement.Valider = 1
    AND Mouvement.Date_Mouv BETWEEN {ParamDate_Mouv} AND {ParamDate_Mouv1}
    AND Ecr_compt.Num_Compte = {ParamNum_Compte}
    )
    GROUP BY
    Mouvement.IDMouvement,
    Mouvement.Piece_comptable,
    Mouvement.Date_Mouv,
    Ecr_compt.Num_Compte,
    Mouvement.Code_Journal,
    Ecr_compt.Description_Ecr,
    Mouvement.Valider,
    Ecr_compt.Credit_Ecr,
    Ecr_compt.Debit_Ecr,
    Compte.Lib_Compte
    [/windev]

    Merci
     

    Fichiers attachés:

    Tags:
  2. c2f

    c2f Member
    MEMBRE WX

    Inscrit:
    Fev 16, 2018
    Messages:
    74
    J'aime reçus:
    53
    Bonjour
    La solution la plus simple est de rajouter une rubrique solde et de recalculer le solde a chaque opération effectuée au fur et a mesure
    Ce qui permettra lors d'une requête entre deux dates d'avoir le solde initial sur le premier enregistrement et le solde final sur le dernier
    C'est en tout cas comme ceci que je l'ai géré pour un client
    Bonne journée
     
  3. Yusep

    Yusep Active Member
    DUMP TEAM

    Inscrit:
    Jan 3, 2018
    Messages:
    203
    J'aime reçus:
    155
    Bonjour.
    Executes la requete avec la periode precedente.
    Garde le resultat dans une variable.
    Executes la requete avec la periode actuelle et recupere le contenu de la variable.
    Et voila.
     
  4. ptrous

    ptrous Member

    Inscrit:
    Oct 28, 2019
    Messages:
    44
    J'aime reçus:
    10

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

    Bonjour.
    Executes la requete avec la periode precedente.
    Garde le resultat dans une variable.
    Executes la requete avec la periode actuelle et recupere le contenu de la variable.
    Et voila.
    Cliquez pour agrandir...
    Dans ce cas il va falloir remplir mon état par programmation .?
     
  • Yusep

    Yusep Active Member
    DUMP TEAM

    Inscrit:
    Jan 3, 2018
    Messages:
    203
    J'aime reçus:
    155
    Non.
    Juste ajouter a l'etat le contenu de la variable au debut.
     
    ptrous apprécie ceci.
  • ptrous

    ptrous Member

    Inscrit:
    Oct 28, 2019
    Messages:
    44
    J'aime reçus:
    10
    Bonsoir à vous voici le code que je met à l ouverture de mon état
    [windev]
    //Déclaration des variables permettant de faire la sommes sur rupture Credit et Debit de la requete "REQ_Grand_Livre"
    // avec 2 bornes Min et Max ---Mouvement.Date_Mouv BETWEEN {ParamDate_Mouv} AND {ParamDate_Mouv1}---sur date
    rSomme_Grand_Livre_C, rSomme_Grand_Livre_D est un réel
    //Déclaration des variables permettant de faire la sommes sur rupture Credit et Debit de la requete "REQ_Grand_Livre_Prec"
    // avec une seule borne 'Mouvement.Date_Mouv < {ParamDate_Mouv1}' sur date ce qui nous permettra de ressortir les valeur qui sont en deca des bornes
    rsomme_Grand_Livre_Prec_C,rSomme_Grand_Livre_Prec_D est un réel

    //*****
    HExécuteRequête(REQ_Grand_Livre_Prec,hRequêteDéfaut,FEN_Rapport_cmpt_gle.SAI_Date3,FEN_Rapport_cmpt_gle.SAI_compte_aux)
    POUR TOUT REQ_Grand_Livre_Prec
    rsomme_Grand_Livre_Prec_C +=REQ_Grand_Livre_Prec.Credit_Ecr
    rSomme_Grand_Livre_Prec_D +=REQ_Grand_Livre_Prec.Debit_Ecr
    Lib_solde_prec_solde=(rsomme_Grand_Livre_Prec_C-rSomme_Grand_Livre_Prec_D)
    FIN
    Lib_solde_prec_credit=rsomme_Grand_Livre_Prec_C
    Lib_solde_prec_debit=rSomme_Grand_Livre_Prec_D


    HExécuteRequête(REQ_Grand_Livre,hRequêteDéfaut,FEN_Rapport_cmpt_gle.SAI_Date3,FEN_Rapport_cmpt_gle.SAI_Date4,FEN_Rapport_cmpt_gle.SAI_compte_aux)
    POUR TOUT REQ_Grand_Livre
    rSomme_Grand_Livre_C +=REQ_Grand_Livre.Credit_Ecr
    rSomme_Grand_Livre_D +=REQ_Grand_Livre.Debit_Ecr
    FIN

    CALC_Credit_Ecr=(rsomme_Grand_Livre_Prec_C+rSomme_Grand_Livre_C)
    CALC_Debit_Ecr=(rSomme_Grand_Livre_Prec_D+rSomme_Grand_Livre_D)

    HExécuteRequête(REQ_GL,hRequêteDéfaut,FEN_Rapport_cmpt_gle.SAI_compte_aux)

    [/windev]
    et voici le code que je met à Lecture des données de l etat

    [windev]LIB_Solde +=(LIB_Credit_Ecr1-LIB_Debit_Ecr1)[/windev]
    j ai ce résultat lorsque j execute entre 2 date

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


    mais en temps normal je devrais avoir ceci (surement parceque ici je parcour tout)

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


    il doit y avoir un dédail qui m échape surtout sur ce code LIB_Solde +=(LIB_Credit_Ecr1-LIB_Debit_Ecr1)
     
  • PhantomX

    PhantomX Member

    Inscrit:
    Juil 11, 2018
    Messages:
    78
    J'aime reçus:
    61
    Personnellement, je me sert rarement des calculs dans un état.
    Je créer plutôt un tableau de structure et ensuite je passe ma variable à l'état qui ne fait qu'affiché le résultat.
    Je trouve ça beaucoup plus simple car on peut facilement déboguer notre code qui exécute les calculs.

    Tu n'as qu'à ajouter dans l'ouverture de ton État
    PROCÉDURE ETAT_Transaction(tMesDonnees est un tableau de stTransaction) (comme à l'ouverture d'une fenêtre)

    Tu déclare un variable de type tableau de structure (stTransaction pour mon exemple)

    tDonnnes est un tableau de stTransaction

    Tu exécute ta requête
    Remplie ta variable tDonnees en parcourant ta Requête avec un POUR TOUT, tout en exécutant tes calculs au passage

    Et tu fait un IImprimeEtat(ETAT_Transaction, tDonnnes)

    Dans ton état il ne te reste qu'à binder tes libellés à ta variable et le tour est jouer.

    Je sais pas si c'est clair, mais bon, moi je me comprend :p
     
    ptrous apprécie ceci.
  • ptrous

    ptrous Member

    Inscrit:
    Oct 28, 2019
    Messages:
    44
    J'aime reçus:
    10

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

    Personnellement, je me sert rarement des calculs dans un état.
    Je créer plutôt un tableau de structure et ensuite je passe ma variable à l'état qui ne fait qu'affiché le résultat.
    Je trouve ça beaucoup plus simple car on peut facilement déboguer notre code qui exécute les calculs.

    Tu n'as qu'à ajouter dans l'ouverture de ton État
    PROCÉDURE ETAT_Transaction(tMesDonnees est un tableau de stTransaction) (comme à l'ouverture d'une fenêtre)

    Tu déclare un variable de type tableau de structure (stTransaction pour mon exemple)

    tDonnnes est un tableau de stTransaction

    Tu exécute ta requête
    Remplie ta variable tDonnees en parcourant ta Requête avec un POUR TOUT, tout en exécutant tes calculs au passage

    Et tu fait un IImprimeEtat(ETAT_Transaction, tDonnnes)

    Dans ton état il ne te reste qu'à binder tes libellés à ta variable et le tour est jouer.

    Je sais pas si c'est clair, mais bon, moi je me comprend :p
    Cliquez pour agrandir...
    je vais essayé cette méthode comme je suis débutant cela me permettra de mieux cerner en cas de blocus je vous reviens.
     
  • trick

    trick Active Member
    MEMBRE WX DUMP TEAM

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

    En fait tu as 2 cas dans ton édition

    Cas 1 :

    Si solde précédent <> 0

    Il faut que tu fasse sur ta première ligne de données

    LIB_Solde = Solde Précédent + (LIB_Credit_Ecr1-LIB_Debit_Ecr1)

    Et ensuite sur la 2eme et les autres lignes

    LIB_Solde += (LIB_Credit_Ecr1-LIB_Debit_Ecr1)

    Ce qui donne pour la 1ere ligne

    LIB_Solde = 137 207,00 + (2500-0) -> 139 707

    Cas 2 :

    Si solde précédent = 0

    sur toutes les lignes

    LIB_Solde += (LIB_Credit_Ecr1-LIB_Debit_Ecr1)
     
    #9 trick, Nov 14, 2019
    Dernière édition: Nov 14, 2019
  • ptrous

    ptrous Member

    Inscrit:
    Oct 28, 2019
    Messages:
    44
    J'aime reçus:
    10
    exactement ce que j ai penssé mais depuis la je parviens pas à établir le code windev
     
  • ptrous

    ptrous Member

    Inscrit:
    Oct 28, 2019
    Messages:
    44
    J'aime reçus:
    10
    [windev]
    //ceci donne
    SI Lib_solde_prec_solde =0 ALORS
    LIB_Solde += (LIB_Credit_Ecr1-LIB_Debit_Ecr1)
    FIN
    //par contre celui ci ne donne pas
    SI Lib_solde_prec_solde <> 0 ALORS
    LIB_Solde =Lib_solde_prec_solde + (LIB_Credit_Ecr1-LIB_Debit_Ecr1)
    LIB_Solde += (LIB_Credit_Ecr1-LIB_Debit_Ecr1)
    FIN

    [/windev]

    Pour le moment voila ce que j ai pu coder
     
  • trick

    trick Active Member
    MEMBRE WX DUMP TEAM

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

    Dans la Lecture des données de l etat il faut que tu mette un compteur , il faut déclarer le compteur dans l'init de letat

    // init de l'etat //

    Ncpt est un entier

    // Bloc Lecture des données //
    SI Lib_solde_prec_solde =0 ALORS
    LIB_Solde += (LIB_Credit_Ecr1-LIB_Debit_Ecr1)
    Sinon
    Si ncpt = 1 alors
    LIB_Solde = Lib_solde_prec_solde + (LIB_Credit_Ecr1-LIB_Debit_Ecr1)
    Sinon
    LIB_Solde += (LIB_Credit_Ecr1-LIB_Debit_Ecr1)
    FIN
    FIN

    ncpt ++
     
  • trick

    trick Active Member
    MEMBRE WX DUMP TEAM

    Inscrit:
    Jan 1, 2018
    Messages:
    169
    J'aime reçus:
    95
    Re nouveau code le compteur était mal placé

    Dans la Lecture des données de l etat il faut que tu mette un compteur , il faut déclarer le compteur dans l'init de letat

    // init de l'etat //

    Ncpt est un entier

    // Bloc Lecture des données //
    ncpt ++

    SI Lib_solde_prec_solde =0 ALORS
    LIB_Solde += (LIB_Credit_Ecr1-LIB_Debit_Ecr1)
    Sinon
    Si ncpt = 1 alors
    LIB_Solde = Lib_solde_prec_solde + (LIB_Credit_Ecr1-LIB_Debit_Ecr1)
    Sinon
    LIB_Solde += (LIB_Credit_Ecr1-LIB_Debit_Ecr1)
    FIN
    FIN
     
  • ptrous

    ptrous Member

    Inscrit:
    Oct 28, 2019
    Messages:
    44
    J'aime reçus:
    10
    Bonsoir
    Merci ça plus marché
    Merci pour tous

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



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


    Problème resolu
     
  • Partager cette page

    Chargement...