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 :

Requête avec report des soldes précédents


Sujet :

WinDev

  1. #1
    Membre régulier
    Requête avec report des soldes précédents
    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


    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)



    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)


    voici à quoi ressemble mon etat


    Merci

  2. #2
    Membre éprouvé
    Bonjour
    Executes la requete pour la premiere periode. Mets le resultat dans une variable.

  3. #3
    Membre chevronné
    Bonjour,
    Si nous avions ton analyse et/ou la requête qui alimente l'état, ce serait plus simple.
    Il y a peut être plus simple, mais ça tourne

  4. #4
    Membre régulier
    Citation Envoyé par Voroltinquo Voir le message
    Bonjour,
    Si nous avions ton analyse et/ou la requête qui alimente l'état, ce serait plus simple.
    Bonjour



    Code SQL :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
    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


    et je rempli mon état par

  5. #5
    Membre régulier
    Citation Envoyé par Yusep Voir le message
    Bonjour
    Executes la requete pour la premiere periode. Mets le resultat dans une variable.
    Dans ce cas il va falloir au préalable remplir mon état par programmation .?

  6. #6
    Rédacteur/Modérateur

    Tu as en gros 2 façons d'opérer.

    1. Modifier la requête pour qu'elle renvoie une ligne de plus que la requête actuelle. Cette ligne va arriver en premier, et elle apparaîtra en 1er dans le document.
    2. Laisser la requête comme elle est. Modifier l'Etat en ajoutant une ligne en 'entête de page' ou dans 'entete de document', puis faire en sorte d'écrire les bonnes données dans cette nouvelle ligne.

    Les 2 plans sont valables.

    Yusep semble partir vers l'option 2. Voroltinquo semble partir vers l'option 1.

    Il faut que tu définisses ton plan (option 1 ou option 2), et ensuite, les gens pourront t'aider.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  7. #7
    Membre régulier
    je suis partant pour l'option1 Modifier la requête pour qu'elle renvoie une ligne de plus que la requête actuelle. Cette ligne va arriver en premier, et elle apparaîtra en 1er dans le document

  8. #8
    Rédacteur/Modérateur

    Donc dans ce cas, il faut faire quelque chose comme ça :

    Code SQL :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select Mouvement.IDMouvement AS IDMouvement,	  etc etc 
    from  etc etc 
    UNION
    select  etc etc etc


    Après le mot UNION, c'est ta requête actuelle, pas de changement.
    Avant le mot UNION, il faut mettre une requête qui va renvoyer une seule ligne, avec les données que tu veux afficher dans la 1ère ligne de ton rapport.

    Les 2 requêtes doivent renvoyer le même nombre de colonnes, dans le même ordre.
    Il faut regarder l'aide sur le mot UNION si tu ne connais pas.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  9. #9
    Membre régulier
    Bonsoir finalement j ai choisi l'option 2 qui m était plus abordable j ai pu avoir à quelque chose

    voici le code que je met à l ouverture de mon état

    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
     
        //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)


    et voici le code que je met à Lecture des données de l etat
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
     
    LIB_Solde +=(LIB_Credit_Ecr1-LIB_Debit_Ecr1)


    j ai ce resultat


    mais entemps normal je devrai avoir ceci



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

  10. #10
    Membre régulier
    Bonjour j ai pu trouver la solution Merci
    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
      SI Lib_solde_prec_solde  =0 ALORS
      	LIB_Solde = (LIB_Credit_Ecr1-LIB_Debit_Ecr1)+LIB_Solde
     
      FIN
     
     
     SI Lib_solde_prec_solde  <> 0 ALORS
     	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)+LIB_Solde	
    FIN
    FIN
    ncpt ++

###raw>template_hook.ano_emploi###