Sous totaux par classe de compte
Stagiaire WDF
Inscrit:
07/05/2009 23:03
Post(s): 14
Bonjour,
Quelqu'un a une idée sur la procédure d'un calcul de totaux et sous totaux par compte.
je m'explique à travers cet exemple ci-dessous:
j'ai des comptes à 04 chiffres , je voudrais calculer le montant par compte à quatre chiffres,
puis à 03 chiffres, puis à 02 chiffres et enfin à 1 chiffre.
un exemple chiffré:
J''ai dans mon fichier des comptes à 04 chiffres avec leur montant. Le fichier est indexé sur le compte
- cpte 2430 Montant: 1000.00
-cpte 2431 Montant: 2000.00
-cpte 2450 montant : 500.00
-cpte 2451 montant : 1500.00
-cpte 2500 montant : 600.00
Donc j'aimerais connaitre la procédure de calcul qui permettra l'affichage avec rupture sur comptes dans l'ordre suivant :
cpte 2430 montant : 1000.00
cpte 2431 montant : 2000.00
s/total cpte 243 montant : 3000.00
cpte 2450 montant : 500.00
cpte 2451 montant : 1500.00
s/total cpte 245 montant : 2000.00
s/total cpte 24 montant : 5000.00

cpte 2500 montant: 600.00
s/total cpte 250 montant : 600.00
s/total cpte 25 montant : 600.00
TOTAL CLASSE 2 MONTANT : 5600.00

Merçi de votre réponse

Contribution le : 04/10/2009 18:21
Créer un fichier PDF de la contribution Imprimer


Re: Sous totaux par classe de compte
Animateur WDF
Inscrit:
02/03/2003 04:07
De Noisy le grand(93)
Post(s): 2745
Bonjour

Dans ton état tu fait un clic doit pour aller dans la description de ton état,
- tu clic sur le bouton Tri/Rupture
-Dans la liste des rupture de l'état tu clic 4 fois sur le bouton +
- tu valide les écrans

A partir de là tu a d'affiché 4 ruptures dans ton état

dans le bloc code HAUT_RUPTURE1 tu un bloc
Rupture ? de HAUT_RUPTURE1
dans ce bloc tu écrit:
Compte est le nom de la rubrique de fichier traité
MaSource est un nom générique représentant de nom de la source en cours
Renvoyer MaSource.Compte[[ 1 ]]


Dans le bloc HAUT_RUPTURE2
Renvoyer MaSource.Compte[[ 1 A 2 ]]


Dans le bloc HAUT_RUPTURE3
Renvoyer MaSource.Compte[[ 1 A 3 ]]


Dans le bloc HAUT_RUPTURE4
Renvoyer MaSource.Compte[[ 1 A 4 ]]


Les totaux sont a afficher dans BAS_RUPTURE de chaque rupture.

Contribution le : 04/10/2009 19:34
_________________
@A+
Contact (privé)......
email : drcharly@wdforge.org
[DrCharly93]
Créer un fichier PDF de la contribution Imprimer


Re: Sous totaux par classe de compte
Stagiaire WDF
Inscrit:
07/05/2009 23:03
Post(s): 14
Bonjour,

Peut être que je me suis mal exprimé, j'ai oublié de te dire
que j'ai fait une application par programmation sur une balance de comptes. la balance m'affiche les comptes à 04 chiffres avec un Total général dans l'ordre suivant

-cpte 2430 Montant: 1000.00
-cpte 2431 Montant: 2000.00
-cpte 2450 montant : 500.00
-cpte 2451 montant : 1500.00
-cpte 2500 montant : 600.00

TOTAL GENERAL : 5600.00
jusqu'içi il n'ya aucun problème

Le problème réside et que je n'arrive pas à cerner, c'est
comment faire la rupture par programmation des sous totaux et totaux par compte à 03 chiffres,02 et 01 chiffre et ceci
suivant l'affichage ci-dessous :

cpte :2430 montant : 1000.00
cpte :2431 montant : 2000.00

S/TOTAL Compte :243 montant : 3000.00

cpte 2450 montant : 500.00
cpte 2451 montant : 1500.00
s/total cpte :245 montant : 2000.00//total des cptes 2450 et 2451
s/total cpte: 24 montant : 5000.00//total des comptes 2430 à 2451

cpte 2500 montant: 600.00
s/total cpte 250 montant : 600.00//total cpte 2500
s/total cpte 25 montant : 600.00//total cpte 2500

TOTAL CLASSE 2 MONTANT : 5600.00 // total général des comptes qui commencent par <<2>>

Contribution le : 05/10/2009 15:35
Créer un fichier PDF de la contribution Imprimer


Re: Sous totaux par classe de compte
Animateur WDF
Inscrit:
02/03/2003 04:07
De Noisy le grand(93)
Post(s): 2745
Bonjour

vous pouvez dans ce cas utiliser la solution suivante qui peut être adapter à votre guise

1 - Création d'une requete de stockage temporaire
Cette requête devrait être construite sur le fichier qui contient les N° de compte et les montants, généralement ce fichier est appelé Ecriture
Rs est une source de donnees
sSql est une chaine

sSql = 
[
SELECT TOP1 Compte, Montant
FROM 
Ecriture
]
//TOP 1 pour ne récupérer qu'un seul enregistrement
SI pas HExecuteRequeteSQL( Rs, hRequeteDefaut, sSql ) Alors
 Erreur(HErreurInfo())
 Retour
Fin

//On suprime de la requête l'enregistrement

HLitPremier(Rs)
Si Pas HEndohors(Rs) Alors HSupprime(Rs)
Le HSupprime ne supprime pas ici physiquement dans le fichier mais uniquement dans la requête elle même

Alimentation de la requête
Ici on va remplir la requete avec le contenu du parcours du fichier des ecritures qui devra obligatoirement être parcouru sur le N° de compte afin d'effectuer la totalisation des sous comptes et bien entendu filtrer sur les écritures ciblées.
[code]
sCleParcours est une chaine
sFiltre est une chaine
sMemoCpte est une chaine
nMnt est un tableau de 3 monetaire

sFiltre = //Mettre ici la condition du filtre voir aide en ligne
sCleParcours = HFiltre(Ecritures, Compte, sFiltre )
POUR TOUS Ecriture SUR sCleParcours
 
 Si sMemoCpte = "" Alors sMemoCpte = Ecriture.Compte

 //Totalisation sur compte numéro a 1 chiffre
 Si sMemoCpte[[ A 1 ]] <> Ecriture.Compte[[ A 1 ]] Alors
  Rs.Compte = sMemoCpte[[ A 1 ]]
  Rs.Montant = nMnt[1] + nMnt[2] + nMnt[3]
  nMnt[3] = 0
  nMnt[2] = 0 
  nMnt[1] = 0
  HAjoute( Rs )
 Fin 

 //Totalisation sur compte numéro a 2 chiffres
 Si sMemoCpte[[ A 2 ]] <> Ecriture.Compte[[ A 2 ]] Alors
  Rs.Compte = sMemoCpte[[ A 2 ]]
  Rs.Montant = nMnt[2] 
  nMnt[3] = 0
  nMnt[2] = 0
  HAjoute( Rs )
 Fin

 //Totalisation sur compte numéro a 3 chiffres
 Si sMemoCpte[[ A 3 ]] <> Ecriture.Compte[[ A 3 ]] Alors
  Rs.Compte = sMemoCpte[[ A 3 ]]
  Rs.Montant = nMnt[3]
  nMnt[2] += nMnt[3]
  nMnt[3] = 0
  HAjoute( Rs )
  sMemoCpte = Ecriture.Compte
 Fin

 nMnt[3] += Rs.Montant
Fin


Ceci est saisie à la volée il faut peut etre revoir le concept mais l'idée est là, vous avec une requete qui contient les montants par classe

Contribution le : 06/10/2009 13:50
_________________
@A+
Contact (privé)......
email : drcharly@wdforge.org
[DrCharly93]
Créer un fichier PDF de la contribution Imprimer


Re: Sous totaux par classe de compte
Stagiaire WDF
Inscrit:
07/05/2009 23:03
Post(s): 14
Bonsoir,

j'ai suivi la procédure que vous m'aviez transmise, le problème, et que je n'arrive pas à visualier le contenu du
fichier temporaire, malgré que lors du lancement de la procédure, il n'ya aucun renvoi d'erreur.Etant donné que
c'est la première fois que j'utilisais la création d'une
requête de stockage temporaire, j'aimerais savoir la démarche
à faire pour que je puisse visualiser le contenu du fichier
crée temporairement.

Cordialement votre.

Contribution le : 07/10/2009 22:13
Créer un fichier PDF de la contribution Imprimer


Re: Sous totaux par classe de compte
Animateur WDF
Inscrit:
02/03/2003 04:07
De Noisy le grand(93)
Post(s): 2745
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 )

Contribution le : 10/10/2009 16:36
_________________
@A+
Contact (privé)......
email : drcharly@wdforge.org
[DrCharly93]
Créer un fichier PDF de la contribution Imprimer



 Haut   Précédent   Suivant




Enregistrer votre réponse
CompteNom   Mot de passe   Authentification
Message:


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.

[Recherche avancée]


Connexion
Menu
Chercher WDForge
Chercher Web
Partenaires
Visualiser tous les Partenaires...
WinDev, WebDev, WinDev Mobile et HyperFile sont des marques déposées par PCSoft. |  Voter |  Legal |  Contact |   XOOPS 2.0.13.2