Newsgroup: it.comp.appl.access
Titolo: VBA: X Alessandro Cara & C.

 togli qualcosa dall'email
eh eh ......
Esatto hai centrato in pieno!
Allora vi spiego cosa devo fare:
- ho una tabella venditori
- ho una tabella PADRE-FIGLIO (tab. LEGAMI)
- ho una tabella FATTURE
- ho una tabella LIVELLI dove è associato ad ogni
livello la famosa "tangente provvigionale"
In sintesi occorre calcolare le provvigioni multilivello
di ogni venditore in base alla posizione gerarchica data dalla
tabella LEGAMI... mi server una funzioncina che prende uno
ad uno i venditori e scandaglia ricorsivamente il proprio
fatturato ed il fatturato dei propri figli.
Questo è il codice che ho scritto finora ma non riesco a
beccare la ricorsione esatta per fare la cosa.......
' Calcolo provvigioni sulle singole fatture con visita all'albero
stsql = "SELECT fatture.id_venditore, Sum(fatture.fatturato) AS fatturato, 0
AS provvigione FROM fatture GROUP BY fatture.id_venditore, 0; "
Set rs = db.OpenRecordset(stsql)
stsql2 = "select * from provvigioni"
Set rs2 = db.OpenRecordset(stsql2)
' rs2.MoveFirst
rs.MoveFirst
' ciclo sui vari venditori
Do Until rs.EOF
    rs2.AddNew
    rs2("id_venditore") = rs("id_venditore")
    rs2("provvigione") = visita(rs("ID_VENDITORE"), 0, rs("Fatturato"))
    rs2.Update
    rs.MoveNext
Loop
End Sub
Public Static Function conta_figli(ByVal padre As Integer)
Dim stsql As String
Dim rs As Recordset
Dim db As Database
Dim array_figli() As String
Dim i As Integer
Set db = CurrentDb
stsql = "select * from legami where cod_padre = " & padre & " ; "
Set rs = db.OpenRecordset(stsql)
rs.MoveLast
conta_figli = rs.RecordCount
'Memorizzazione ID venditori in un'array
ReDim array_figli(conta_figli)
rs.MoveFirst
'If conta_figli = 1 Then
'
'    array_figli(0) = rs("cod_figlio")
'    Debug.Print array_figli(0)
'
'    Else
        For i = 0 To conta_figli - 1
            array_figli(i) = rs("cod_figlio")
            Debug.Print array_figli(i)
            rs.MoveNext
        Next
'End If
conta_figli = array_figli(i)
rs.Close
End Function
Public Function fattore(ByVal livello As Integer)
Dim stsql As String
Dim rs As Recordset
Dim db As Database
Set db = CurrentDb
stsql = "select * from livelli where livello = " & livello & "  "
Set rs = db.OpenRecordset(stsql)
rs.MoveFirst
fattore = rs("fattore")
rs.Close
End Function
Public Function visita(ByVal agente As Integer, ByVal livello As Integer,
ByVal fatturato)
Dim guadagno As Integer
Dim importo_fattore, i As Integer
Dim quanti_figli As Variant
importo_fattore = fattore(livello)
visita = fatturato + (fatturato * importo_fattore) / 100
'quanti_figli = conta_figli(agente)
quanti_figli(0) = conta_figli(1)
Debug.Print quanti_figli
Debug.Print quanti_figli
For i = 1 To quanti_figli
  '  visita = visita + visita(
Next i
' Debug.Print guadagno
End Function

 
[cut]
Ringo, per favore "non" personalizzare l'oggetto del post
Al di la' del codice che hai scritto, che sinceramente non ho molto
guardato,
sarebbe necessario sapere su quale tabella sono i vari attributi 
Cosa ci puo' essere su Fatture e Venditori e' intuibile.
Quali attributi (campi) ci sono su Livelli e Legami?
--
a.cara 
Togli qualcosa dall'email

 ha scritto nel messaggio
news:3E53400C...@blunet.it...

scusa della personalizzazione...
sulla tabella LIVELLI c'è scritto il fattore moltiplicativo...
per esempio sui figli di livello 2 si prende un 2%
ID livello fattore
1             3,00
2             2,00
3             1,00
4             0,50
5             0,25
sulla tabella LEGAMI  vengono definiti i legami tra i vari
collaboratori.... per esempio 2,3,4 sono figli di 1° livello di 1 mentre 5 e
6 sono figli di 2° livello di 1
cod_padre cod_figlio
1                     2
1                     3
1                     4
2                     5
2                     6
6                     7
grazie!
ringoo