Newsgroup: it.comp.appl.access
Titolo: Aiuto: Report con Distinta base

Ciao a tutti.
Premetto che prima di postare ho fatto ricerche approfondite in merito
alla distinta base.
Devo creare un report con distinta base (a livello n-esimo) partendo
dal database del gestionale.
Mi serve per il confezionamento di prodotti a vari stadi...
Chiaramente il gestionale (oracle, ma entro con ODBC senza problemi),
ha una tabella con codice padre, codice figlio, quantità .... e
naturalmente un'anagrafica articoli
Premesso che ho un'idea, abbastanza chiara credo, di come creare la
distinta " amano" ossia dell'algoritmo ricorsivo, non sono invece
sufficientemente preparato sul lato Visual Basic.
So come cercare i codici articolo ma non so come poterli mettere in un
report.
Con access riesco bene a gestire il primo livello tramite delle query,
ma la tecnica non è applicabile alla ricorsione a livello n-esimo.
Potete aiutarmi in qualche maniera?
So che devo cercare fino alla fine del file (della tabella
"distinta_base") prima tutti i codici padri, poi, il primo "figlio" e
così via, ma non so bene come esplicitarlo a livello di codice
(certamente con Do ... while) per poi mettere tutto in un  report
(deve essere possibile perché quando stampo una distinta, il
gestionale crea un report).
ciao e grazie in anticipo

 ha scritto nel messaggio 
news:fa3fb2f8-121d-44b0...@x35g2000hsb.googlegroups.com...


ma se ti colleghi via ODBC perchè vuoi fare tutto da VB?
Scusami se hai delle tabelle collegate via ODBC ti crei il tuo report 
principale
che pesca i dati dalla tabella con il codice padre.
Inserisci il sottoreport che ha come origine la tabella con il codice figlio 
naturalmente avendo cura di collegare i campi IDPrimario delle due tabelle.
In questo modo otterrai un risultato del tipo
ARTICOLO PADRE 1
FIGLIO 1  PZ 5
FIGLIO 2  PZ 6
ARTICOLO PADRE 2
FIGLIO 3 PZ 4
FIGLIO 4 PZ 2
....
Ciao
-- 
Roberto da Parma 


Roberto l'OP ha premesso che il report deve scendere a profondita' 
n-esima. E credo che la tabella in gioco possa essere una sola.
-- 
ac
y-1=x

 y-1=x
Infatti.
Con le tabelle del gestionale, che importerò periodicamente nel DB
access, altrimenti è troppo lento, devo ricreare un report con la
distinta base.
Mi serve per creare, come serve a noi, una lista di prelievo di kit,
sottokit .... per la produzione e assemblaggio.
Perciò a disposizione ho la tabella articoli e la tabella distinta
base del gestionale (in sola lettura per sicurezza). Con queste devo
creare un report che scenda a livello n-esimo (3-4 livelli, max 5, non
moltissimi ma comunque il livello è variabile con l'articolo, quindi
non so stabilire a priori a che livello devo scendere). Quel che mi
manca è scrivere la parte di codice relativa, ma sto facendo un po' di
prove con un po' di codice che ho trovato in rete relativo alle
maschere, e come buttare tutto su un report.
Finora abbiamo creato report che scendono al primo livello (inserendo
anche le immagini degli articoli), ma è stato relativamente semplice
perché si può gestire con una query. La ricorsività invece non posso
gestiral con le query, per il semplicew motivo che non so a che
livello devo scendere a priori...
Il codice che ho trovato è il seguente:
   Public Function Esplosione1(Display As Control, Codice$, Qta, Sc,
   Optional ByVal livello)
   'Esplode la distinta base mediante Ricorsione
   Dim rs As DAO.Recordset
   Dim tbD As Recordset
   Dim A As Double
  Dim strSQL$
  Dim serv As Variant
  Set rs = CurrentDb.OpenRecordset("Tabella1", dbOpenTable)
  If IsMissing(livello) Then
  livello = 0
  End If
  strSQL = "SELECT * FROM DISTINTE WHERE PADRE=""" & Codice & """
ORDER
  BY FIGLIO"
  Set tbD = CurrentDb.OpenRecordset(strSQL)
  If tbD.EOF Then
  Esplosione1 = IIf(livello = 0, False, True)
  Else
  livello = livello + 1
  Do Until tbD.EOF
  A = tbD!Sc + tbD!Qta * Qta
  'Visualizza il risultato
  Display = Display & FormattaUscita1(livello, tbD, tbD!Qta * Qta)
  'Richiamo ricorsivo
  Esplosione1 = Esplosione1(Display, tbD!Figlio, tbD!Qta * Qta, A,
  livello)
  ' inserisco i dati in tabella1
   rs.AddNew
   rs!Padre = Forms!Distinta!SYNC
   rs!Figlio = tbD!Figlio
   rs!Qta = Nz(A, "0")
   rs!Simulazione = "1"
   rs.Update
   tbD.MoveNext
   Loop
   rs.Close
   End If
   tbD.Close
   End Function
Il significato del codice è abbastanza comprensibile, ma non so come
modificarlo e usarlo nel report. SI trova infatti molta bibliografia
per le maschere ma molto meno per i report.
Spero di essere stato un po' più chiaro di prima.
Ciao

 ha scritto nel messaggio 
news:oKW3k.719$p55...@tornado.fastwebnet.it...

Allora ritiro tutto.... :-) non avevo capito bene....
-- 
Roberto da Parma 


L'ho letto velocemente lo avrei fatto quasi uguale.
Ci dovrebbe essere tutto quello che ti serve perche' scrive su una 
tabella temporanea ("tabella1") e quindi il report lo si potrebbe poi 
fare utilizzando tale tabella come recordsource
-- 
ac
y-1=x


wrote:

mmmh.
Ma con i raggruppamenti come faccio?
Credo che da codice dovrei agire sui raggruppamenti del report
gestendo un evento "su apertura" del report.
Mi pongo il problema perché il livello a cui devo scendere è
variabile.
Grazie


Nel Demo che ho proposto nel mio sito relativo alla gestione delle
Ricette:
http://www.alessandrobaraldi.it/DettaglioFaq.asp?IdFAQ=272
Trovi una sezione dedicata per la stampa della 
DI.BA
. all'ennesimo
livello.
Non farti ingannare dalla banalità dell'argomento CULINARIO... il demo
è strutturato con cura.
@Alex


Grazie Alessandro mi hai tolto da un "obbligo" ;<)
-- 
ac
y-1=x

 ac
Troverò il modo per farti sdebitare...
;-)
@Alex