Re: Sous totaux par classe de compte

Posté par drcharly93 le 10/10/2009 16:36:23
Bonjour

voici une méthode testé avec une procédure
PROCEDURE proAfficheTotal(pNiveau est un entier, sMemoCpte est une chaîne )
sSql est une chaîne
Rs est une Source de Données

sSql = "SELECT SUM( Montant) AS MNT FROM Ecriture WHERE Compte Like '" + sMemoCpte[[ A pNiveau ]] + "%'"
HExécuteRequêteSQL( Rs, hRequêteDéfaut, sSql )
TableAjouteLigne( Table1, sMemoCpte[[ A pNiveau ]], Rs.Mnt)

cette méthode affiche le contenu dans une table nommé Table1 qui contient 2 colonnes
- Compte
- Montant
Vous pouvez bien entendu modifier ce code pour l'adapter a vos besoins

Méthode de parcours
sSql est une chaine
RsEcr est une source de donnees
sMemoCpte est une chaine

sSql = 
[
SELECT Compte, Montant
FROM 
Ecriture
]
//Penser a ajouter une clause WHERE pour limiter par
//exemple sur une période voulue

SI PAS HExécuteRequêteSQL( RsEcr, hRequêteDéfaut, sSql ) ALORS
	Erreur(HErreurInfo())
	RETOUR
FIN


POUR TOUS RsEcr sur "Compte"

	SI sMemoCpte = "" ALORS sMemoCpte = RsEcr.Compte

	//Totalisation sur compte numéro a 1 chiffre 
 SI sMemoCpte[[ A 1 ]] <> RsEcr.Compte[[ A 1 ]] ALORS
 	proAfficheTotal (3 , sMemoCpte )
 	proAfficheTotal ( 2, sMemoCpte )
 	proAfficheTotal( 1, sMemoCpte )	
 FIN

	//Totalisation sur compte numéro a 2 chiffre
	SI sMemoCpte[[ A 2 ]] <> RsEcr.Compte[[ A 2 ]] ALORS
		proAfficheTotal( 3, sMemoCpte )
		proAfficheTotal( 2, sMemoCpte )
		sMemoCpte = RsEcr.Compte
	FIN 
	
	//Totalisation sur compte numéro a 3 chiffres
	SI sMemoCpte[[ A 3 ]] <> RsEcr.Compte[[ A 3 ]] ALORS
  	proAfficheTotal( 3, sMemoCpte )
  	sMemoCpte = RsEcr.Compte
	FIN
	
	TableAjouteLigne( Table1, RsEcr.Compte, RsEcr.Montant)
	FenRepeint(frmTest)
FIN
proAfficheTotal( 3, sMemoCpte )
proAfficheTotal( 2, sMemoCpte )
proAfficheTotal( 1, sMemoCpte )

Cette contribution était de : http://old.wdforge.org/newbb/viewtopic.php?forum=20&topic_id=6287&post_id=24962