Newsgroup: it.comp.appl.access
Titolo: somme con riporti nei sottoreport

ciao a tutti, ho il seguente problema:
ho un report per generare i totali di due gruppi di prodotti A e B (i dati
provengono da una tabella che contiere ANNO, MESE, DATA, TIPO, DESCRIZIONE,
IMPORTO, PAGATO)
ottengo il totale dell'importo prodotti del mese e il progressivo dei
singoli record di quel mese per il gruppo A e B (tramite due sottoreport
collegati al report principale per i campi anno e mese)
Il progressivo lo ottengo con un 2° campo IMPORTO inserito nel corpo del
sottoreport impostato per sommare tutto
MESE	GRUPPO	DATA	TIPO 	DESCRIZIONE	IMPORTO	PAGATO	PROGRESSIVO
								(importo somma tutto)
GIUGNO
	A(sottoreport 1)
		01/06	aaa	abc		100		100	
		10/06	BBB	def		50		150
	B(sottoreport 2)
		03/06	fff	abc		30		30
		15/06	sss	sdg		100		130
					TOTALE A+B GIUGNO 280
LUGLIO
	A(sottoreport 1)	
		10/07	ASA	fdfg		500		500	(vorrei 650)
		20/07	ss	gfh		100		600	(vorrei 750)
	B(sottoreport 2)	
		04/07	hhg	kl		50		50	(vorrei 180)
		25/07	sfds	r		10		60	(vorrei 240)
					TOTALE A+B LUGLIO 660		
AGOSTO
	A(sottoreport 1)	
		01/08	sde	qw		10		10	(vorrei 760)
	B(sottoreport 2)
		15/08	ffgf	kk		200		200	(vorrei 440)	
					TOTALE A+B AGOSTO 210
quello che non riesco proprio a ottenere è il riporto del progressivo per
entrambi i gruppi nel mese successivo, ma ogni mese il progressivo riparte
da zero
sono 2giorni che provo senza costrutto. sapete aiutarmi?
grazie

 ha scritto nel messaggio 
news:1nggybuz1emy0$.pmraho36t99e.dlg@40tude.net...

Secondo me non dovresti utilizzare dei sottoreport ma un unico report che 
stampa/elabora i dati raggruppati.
Nel tuo caso il raggruppamento dovrebbe essere:
- Gruppo
- Anno
- Mese
Nel piè di pagina di ogni gruppo puoi effettuare la somma/totali del gruppo; 
nel piè di pagina del report hai la somma/totali di tutti dati...
Ciao.
-- 
Sergio MAZZA 

 Ciao.
Ok ci provo
per adesso grazie
ciao



ci sono riuscito!
per ogni mese ottengo una pagina tipo
mese1
	gruppo1
		record 1	importo		progressivo1 (=importo)
		record 2	importo		progressivo1
		record 3	importo		progressivo1
	gruppo2
		record 1	importo		progressivo2 (=importo)
		record 2	importo		progressivo2
		record 3	importo		progressivo2
mese2
	gruppo1
		record 1	importo		progressivo1 (+riporto progressivo1 mese 1)
		record 2	importo		progressivo1
		record 3	importo		progressivo1
	gruppo2
		record 1	importo		progressivo2 (+riporto progressivo2 mese 1)
		record 2	importo		progressivo2
		record 3	importo		progressivo2
ecc.
tramite l'evento print del corpo ottengo il progressivo del gruppo (dal
secondo mese sommo il riporto del mese precedente)
tramite l'evento print del piepagina gruppo ottengo il riporto del gruppo
per il mese successivo
FUNZIONA BENISSIMO A VIDEO !!!
Quando stampo ottengo importi progressivi completamente diversi ogni
volta!?!?!?!?!
PERCHE' ?
ciao

 ha scritto nel messaggio 
news:zs85bvm079kw.1n0lhhmtuywmu$.dlg@40tude.net...

Non ho capito il fatto del riporto, forse perché non ne ho bisogno...
Ciao.
-- 
Sergio MAZZA 

 Ciao.
provo a spiegarmi meglio
giugno
	gruppo1
		record 1	100		100
		record 2	2000		2100
		record 3	500		2600
	gruppo2
		record 1	500		500
		record 2	50		550
		record 3	100		650
luglio
	gruppo1
		record 1	300		2900
		record 2	1000		3900
		record 3	100		4000
	gruppo2
		record 1	1000		1650
		record 2	200		1850
		record 3	100		1950
agosto
	gruppo1
		record 1	100		4100
		record 2	200		4300
		record 3	100		4400
	gruppo2
		record 1	600		2550
		record 2	100		2650
		record 3	150		2800
io ho usato print del piè pagina del gruppo per scrivere in una casella di
testo nel report non visibile il valore del progressivo raggiunto dal
gruppo in quel mese
poi con print del corpo al cambio di mese vado a leggere il valore scritto
nella casella di testo per sapere il riporto del mese precedente e lo sommo
all'importo del record 1 per proseguire con il progressivo.
perchè quando stampo ottengo valori diversi da quelli che vedo a video?
ho provato a utilizzare gli eventi format di corpo e piepagina ma a quel
punto non ottenevo i valori corretti nemmeno a video.
c'è un altro sistema meno cervellotico?
oppure dove sbaglio?
ciao

 ha scritto nel messaggio news:19l09bsmu8j7v$.9uqsuhwc3b02$.dlg@40tude.net...

Ripeto; io non capisco che significa, per te, il termine "progressivo". A me ricorda una sequenza di numeri es. 1,2,3,4,5 etc. etc. 
E' questo che intendi?
Oppure intendi eseguire le somme di ogni gruppo e il totale dei gruppi?
Se è la seconda, non hai bisogno di gestire nessun evento, basta che nel piè di pagina di ogni gruppo inserisci una casella di testo 
non associata e nell'origine controllo ci scrivi Somma(nomeCampoDaSommare)...
Ciao.
-- 
Sergio MAZZA 

 non associata e nell'origine controllo ci scrivi Somma(nomeCampoDaSommare)...
NO
non riesco a spiegarmi
per progressivo intendo che l'importo del 2° record viene sommato
all'importo del 1° record, l'importo del 3° record viene sommato alla somma
dei primi 2, l'importo del 4° record viene sommato alla somma dei primi 3.
questo per entrambi i gruppi nello stesso mese
per il secondo mese l'importo del 1° record viene sommato all'importo
totale dei record del mese precedente, l'importo del 2° record viene
sommato alla somma precedente, l'importo del 3° record viene sommato alla
somma precedente, l'importo del 4° record viene sommato alla somma
precedente ecc.
anche questo per entrambi i gruppi
volendo una struttura:
mese
	gruppo
		n record	importo 	importo
	gruppo
		n record	importo 	progressivo
mese
	gruppo
		n record	importo 	progressivo
	gruppo
		n record	importo 	progressivo
mese
	gruppo
		n record	importo 	progressivo
	gruppo
		n record	importo 	progressivo
non posso usare la casella di testo non associata con somma(importo) come
origine e somma parziale su tutto perchè mi somma insieme gli importi del
gruppo 1 e del gruppo 2 
se invece imposto la casella di testo con somma su gruppo ottengo il totale
degli importi del gruppo per ogni mese, ma non è quello che cerco
spero di essere stato più chiaro
ciao

 ha scritto nel messaggio news:1mt9x9d7nmx1h.1...@40tude.net...

Guarda se l'esempio sul sito comune può esserti d'aiuto:
www.sitocomune.com
 Sezione Queries
2.16 Come si può ottenere il totale progressivo di un campo in una query e come si può numerare progressivamente le righe di una 
query?
Ciao.
-- 
Sergio MAZZA 

 Ciao.
sono riuscito sulla base della queries 2.1 ad ottenere la generazione di un recordset contenente i dati estratti dalla
tabella "voci2" aggiunge ad ogni record un campo che contiene il progressivo che mi serve, tramite Function
Progressione, e che tiene conto del gruppo di appartenenza del record.
Public Function Progressione(Valore As String) As Integer
   If Valore = "Azzera" Then
      rval1 = 0
      rval2 = 0
    Else
       If modo1 = "u" Then
            rval1 = rval1 + impo
            Progressione = rval1
        Else
            rval2 = rval2 + impo
            Progressione = rval2
        End If
   End If
End Function
Sub ricerca()
Dim cmd1 As Command
Dim str1 As String
Dim rst1 As Recordset
Set rst1 = New ADODB.Recordset
'imposta il comando per ricercare i record in base ad una query
Set cmd1 = New ADODB.Command
    With cmd1
    .ActiveConnection = CurrentProject.Connection
    .CommandText = "SELECT [voci2].[anno] AS Espr1, [voci2].[mese] AS Espr2, [voci2].[modo] AS Espr3, [voci2].[data] AS
		   	Espr4, [voci2].[importo] AS Espr5, Progressione((importo)) AS Progressione 
			FROM [VOCI2] 
			WHERE (((Progressione(""Azzera"")) = 0)) 
			ORDER BY voci2.anno, voci2.mese, voci2.modo desc, voci2.data;"
        .CommandType = adCmdText
        .Execute
    End With
rst1.Open cmd1, , adOpenKeyset, adLockOptimistic
end Sub
avevo pensato di inserire i dati del recordset in una tabella di appoggio da usare come dati del report, inserendivi i
record con addnew
rst1.Open cmd1, , adOpenKeyset, adLockOptimistic
Do Until rst1.EOF
    For Each fldMyField In rst1.Fields
        impo = rst1(4) 'usati per avere l'importo in Function Progressione
        modo1 = rst1(2) 'usati per controllare il gruppo in Function Progressione
 
        Dim cn As ADODB.Connection
            Dim rs As ADODB.Recordset
            Dim stringa As String
            Set rs = New ADODB.Recordset
            With rs
                .ActiveConnection = CurrentProject.Connection
                .CursorType = adOpenKeyset
                .LockType = adLockOptimistic
                .Source = "SELECT * FROM provvisoria"
                .Open
            End With
 
            rs.AddNew
            rs("anno") = rst1(0)
            rs("mese") = rst1(1)
            rs("modo") = rst1(2)
            rs("data") = rst1(3)
            rs("importo") = rst1(4)
            rs("progressivo") = rst1(5)
            rs.Update
 
            Set cn = Nothing
            Set rs = Nothing
 
        rst1.MoveNext
    Next fldMyField
Loop
ma ad ogni record quando giungo al campo progressivo il codice passa nuovamente alla Function Progressione per calcolare
il progressivo alterando il valore corretto.
non sono riuscito a trovare la soluzione
allora l'intenzione sarebbe quella di generare il report da questo recordset, che avendo gią inserito il progressivo non
mi fa usare gli eventi delle sezioni.
come faccio?
ciao

 ciao
Leggendo il suggerimento del sito comune che hai utilizzato, mi viene 
spontaneo chiederti se non hai pensato a trasformare la query di selezione 
in query di creazione tabella invece di utilizzare i recordset.
Ti ritroveresti subito pronta l'origine dati del report...
Ciao.
-- 
Sergio MAZZA 



Ottimo! ci riesco 
Set cmd1 = New ADODB.Command
    With cmd1
    .ActiveConnection = CurrentProject.Connection
    .CommandText = "SELECT [voci2].[anno] AS Espr1, [voci2].[mese] AS Espr2, [voci2].[modo] AS Espr3, [voci2].[data] AS
Espr4, [voci2].[importo] AS Espr5, " & _
                            "Progressione((importo)) AS Progressione INTO prov " & _
                            "FROM [VOCI2] " & _
                            "WHERE (((Progressione(""Azzera"")) = 0)) " & _
                            "ORDER BY voci2.anno, voci2.mese, voci2.modo desc, voci2.data;"
        .CommandType = adCmdText
        .Execute
    End With
l'unico problema è che non viene calcolato il campo progressivo dopo l'inserimento di INTO prov...
quando controllavo nella finestra immediata tramite Debug.Print i record estratti veniva cancolato
questo perchè il progressivo veniva calcolato ad ogni interrogazione del recordest rst1(5) eseguita da Debug.Print
ora mi sembra di capire che essendo una Query di creazione tabella non genera alla fine un recordset e quindi non leggo
l'importo di ogni record per incrementare il progressivo tramite Function Progressione.
quindi "pesco una carta imprevisti e torno alla partenza".
ciao

 ciao
Ciao.
-- 
Sergio MAZZA 



scusa la mia estrema ignoranza in materia ma la chiamata nonè già nella
query in un campo calcolato?
Set cmd1 = New ADODB.Command
    With cmd1
    .ActiveConnection = CurrentProject.Connection
    .CommandText = "SELECT [voci2].[anno] AS Espr1, [voci2].[mese] AS
		Espr2, [voci2].[modo] AS Espr3, [voci2].[data] AS Espr4,
 		[voci2].[importo] AS Espr5, " & _
                "Progressione((importo)) AS Progressione INTO prov " & _
                "FROM [VOCI2] " & _
                "WHERE (((Progressione(""Azzera"")) = 0)) " & _
                "ORDER BY voci2.anno, voci2.mese, voci2.modo, voci2.data;"
        .CommandType = adCmdText
        .Execute
    End With
pensavo fosse "Progressione((importo)) AS Progressione" il campo calcolato
ho notato che tutto ciò che segue INTO prov non varia il risultato
ciao

 ho notato che tutto ciò che segue INTO prov non varia il risultato
Cioè crea la tabella e nel campo non trovi valori modificati?




esatto
crea la tabella con le colonne 
espr1, espr2, espr3, espr4, espr5, progressivo
per ogni record inserisce i valori da espr1 a espr5 mentre progressivo è
sempre 0
questo perchè, mi sembra, quando crea la tabella e inserisce i record,
effettua la chiamata a Function Progressione che deve sommare l'importo
(impo) a progressivo precedente (rval1 o rval2), ma impo è sempre vuoto
perchè lo riempivo dopo leggendolo dal recordset (che con INTO non viene
creato)
ciao

 ciao
(cerco di capire) Ma allora se fai prima il calcolo di [impo], sempre in quella tabella, e poi fai girare la query del progressivo 
(stavolta in aggiornamento invece di creazione)?
Ciao.
-- 
Sergio MAZZA 



scusa cosa intendi per fare il calcolo in quella tabella?
e come faccio?
poi se faccio girare la query del progressivo in aggiornamento posso
inserirlo nella tabella?
ciao

 ciao
Si tratta di separare in due le operazioni; prima il calcolo di [impo] e poi 
il [progressivo]...
Ciao.
-- 
Sergio MAZZA 



non mi mandare a quel paese, e sopratutto non so perchè ma ho ripescato un
aversione precedente del codice e adesso funziona tutto.
Set cmd2 = New ADODB.Command
    With cmd2
    .ActiveConnection = CurrentProject.Connection
    .CommandText = "SELECT [voci2].[anno] AS Espr1, [voci2].[mese] AS
			Espr2, [voci2].[modo] AS Espr3, [voci2].[data] AS 
			Espr4, [voci2].[importo] AS Espr5, " & _
                   "Progressione((importo)) AS Progressione " & _
                   "FROM [VOCI2] " & _
                   "WHERE (((Progressione(""Azzera"")) = 0)) " & _
                   "ORDER BY voci2.anno, voci2.mese, voci2.modo desc,
			voci2.data;"
        .CommandType = adCmdText
        .Execute
    End With
rst2.Open cmd2, , adOpenKeyset, adLockOptimistic
Do Until rst2.EOF
    For Each fldMyField In rst2.Fields
        If rst2.EOF = "falso" Then
            impo = rst2(4) 'usati per avere l'importo in Function
				Progressione
            modo1 = rst2(2) 'usati per controllare il gruppo in Function
				Progressione
 
            Dim cn As ADODB.Connection
            Dim rs As ADODB.Recordset
            Dim stringa As String
            Set rs = New ADODB.Recordset
            With rs
                .ActiveConnection = CurrentProject.Connection
                .CursorType = adOpenKeyset
                .LockType = adLockOptimistic
                .Source = "SELECT * FROM provvisoria"
                .Open
            End With
 
            rs.AddNew
            rs("anno") = rst2(0)
            rs("mese") = rst2(1)
            rs("modo") = rst2(2)
            rs("data") = rst2(3)
            rs("importo") = rst2(4)
            rs("progressivo") = rst2(5)
            rs.Update
 
            Set cn = Nothing
            Set rs = Nothing
 
        rst2.MoveNext
        End If
    Next fldMyField
Loop
poi gli faccio aprire il report basato sulla tabella provvisoria
DoCmd.OpenReport "QP", acViewPreview 
scusa per le rotture di scatole 
ciao

 ha scritto nel messaggio 
news:143sprtvvurzq.u...@40tude.net...

Tutto è bene quel che finisce bene...
Ciao.
-- 
Sergio MAZZA