Newsgroup: it.comp.appl.access
Titolo: relazioni

ciao a tutti
ho creato due tabelle
TbSconto; idsconto e %sconto
TbIva Idem
e nella tbTestata_Fattura
ho inserito idsconto e idIva,
ma a me sembra che funzionino meglio
senza la relazione.
Può essere?
Grazie

?"Ryc"  ha scritto nel messaggio 
news:dbb27432-fc91-4ca1...@j25g2000vbs.googlegroups.com...


__
Le relazioni sono sempre complicate...
in ogni caso in sé e per sé la relazione ed eventuali comportamenti a catena 
sono frutto di scelte di chi ha concepito il db.
In che tipo di relazione sono? 1 a M, M a M, 1 a 1.. quindi c'è la parte 
univoca in un uno dei lati della relazione?
In linea teorica le relazioni sono positive in ogni caso, averne tante è 
meglio (qualcuna nascosta è il massimo)
MA

 MA
ciao Massimiliano
ora di elenco la struttura del db:
tbClienti; TbDettaglio_Fattura; TbTestata_Fattura; tbDescrizione;
TbTipo_Documento;
TbIva; TbSconto
TbDescrizione 1 a molti con TbDettaglio_Fattura senza alcuna spunta
nelle relazioni
TbTestata_Fattura 1 a molti con TbDettaglio_Fattura tre spunte nelle
relazioni
TbClienti 1 a molti con TbTestata_Fattura tre spunte nelle relazioni.
Infine
TbTipo_Documemto, TbIva e TbSconto  1 a molti con
senza alcuna spunta nelle relazioni
con
TbTestata_Fattura
Ho una serie di problemi:
nella query riepilogo fatture:
anzichè avere il riepologo ho l'elenco delle fatture in base ai
prodotti del dettaglio fatture
es io vorrei:
fatt. n. 1 del .......
fatt. n. 2 del .......
e così via
io invece ho
fatt. n. 1 del .......
fatt. n. 1 del .......
fatt. n. 1 del .......
fatt. n. 1 del .......
fatt. n. 2 del .......
fatt. n. 2 del .......
ecc.
Poi ho un problema nella maschera con origine record query a campi
incrociati
dove fino a che il campo categoria (della TbDescrizione) non risulta
fatturato
avrò come risultato in tutte le celle: #Nome?
Preciso che TbDescrizioni ha come nome campo :IdDescrizione,
Descrizione, Categoria
Grazie per l'aiuto


Fai il raggruppamento in query

?"Ryc"  ha scritto nel messaggio 
news:0dc4b71d-0a0c-4f99...@l7g2000vbv.googlegroups.com...





io invece ho


Grazie per l'aiuto
___
Risposta:
Il tuo non è un problema di relazioni,
ma non sai cosa chiedere alle query
o raggruppi facendo le somme dove serve
o ti crei le fatture e a quelle metti un JOIN con i dettagli delle fatture 
raggruppati
Se metti il nome dei campi vediamo di spiegarti con esempi pratici
MA

 MA
ciao Massimiliano e grazie:
queste sono le Query:
1-Query1: da tbtestata_Fattura:
idtestata fattura
idcliente
numero
data
idtipodocumento
idesenzioni
datapagamento
rit_Acconto (si/no)
IdIva
IdSconto
%Rit_Acconto: IIf([RIT_ACCONTO]=-1;11,5;0)
2-Query_RiepilogoFatture
Data da query1
numero da query1
datapagamento da query1
ragione_sociale da tbClienti
TipoDocumento da TbTipo_Documento
Imponibile: (CCur([TbDettaglio_Fattura]!
[QUANTITA]*[TbDettaglio_Fattura]![PREZZO]))
Sconto: (CCur([TbDettaglio_Fattura]![QUANTITA]*[TbDettaglio_Fattura]!
[PREZZO])*[Query1]![IdSconto])
Imponibile Netto: (CCur([TbDettaglio_Fattura]!
[QUANTITA]*[TbDettaglio_Fattura]![PREZZO])*(1-[Query1]![IdSconto]))
IVA: (CCur([TbDettaglio_Fattura]![QUANTITA]*[TbDettaglio_Fattura]!
[PREZZO])*(1-[Query1]![IdSconto])*([Query1]![IdIVA]))
Totale Fattura: (CCur([TbDettaglio_Fattura]!
[QUANTITA]*[TbDettaglio_Fattura]![PREZZO])*(1-[Query1]![IdSconto])*(1+
[Query1]![IdIVA]))
Rit_Acc: (CCur([TbDettaglio_Fattura]![QUANTITA]*[TbDettaglio_Fattura]!
[PREZZO])*(1-[Query1]![IdSconto])*([Query1]![%Rit_Acconto]/100))
Netto Fattura: (CCur([TbDettaglio_Fattura]!
[QUANTITA]*[TbDettaglio_Fattura]![PREZZO])*(1-[Query1]![IdSconto])*(1+
[Query1]![IdIVA])-CCur([TbDettaglio_Fattura]!
[QUANTITA]*[TbDettaglio_Fattura]![PREZZO])*(1-[Query1]!
[IdSconto])*([Query1]![%Rit_Acconto]/100))

?"Ryc"  ha scritto nel messaggio 
news:1c92124e-2ee9-460d...@l24g2000vby.googlegroups.com...



___
Risposta:
Allora
SELECT [idtestata fattura],
idcliente,
numero,
data,
Imponibile,
fctround(imponibile*(1-idSconto/100)) as ImponibileNetto,
fctround(imponibile*idSconto/100)) AS  Sconto,
fctround(imponibile*(1-idIVA/100)) AS  IVA,
fctround(ImponibileNetto+nz(IVA)) AS TotaleFattura
fctround(imponibileNetto*(nz(-11,5*RIT_Acconto)/100)) AS  Ritenuta,
FROM
TbTestata_Fattura AS F
RIGHT JOIN
(SELECT FK_idTestatafattura,
fctround(sum(Prezzo*Quantità)) AS Imponibile FROM tblDettaglioFattura) AS D 
ON F.[idtestata fattura] = D.FK_idTestatafattura
Fermo restando le mostruosità che hai scritto... bbrrrrr....
Allora prendiamo tutte i record della tabella Testata fattura
Poi leghiamo il dettaglio della fattura e ci prendiamo l'importo totale 
(così facendo tu hai la fattura con una sola indicazione di sconto e neghi 
la possibilità di applicare no sconto alla singola voce o iva diversa)
Bene a questo punto possiamo fare tutti calcoli che vogliamo
ImponibileNetto cioè l'imponibile lordo ricavato meno lo sconto.
il calcolo dello sconto
l'iva
Il totale documento: ho l'imponibile, ho il calcolo dell'iva è solo una 
somma o volendo moltiplicavi l'imponibile per (1+IdIva/100) [do per scontato 
che l'id coincide con il valore dell'iva
infine la ritenuta: la calcolo sull'imponibile e la moltiplico per -11,5 
questo perché se nz(rit_Acconto) è 0 il valore della moltiplicazione è 
uguale a 0 se invece è -1, lui moltiplica imponibile*-1*-11,5 
(meno_per_meno_uguale_a_più) il valore è positivo
PUFF PANT PUFF..
MA

 MA
Ciao Massimiliano
Se per te non è un problema
partiamo da zero
Grazie


dove mi dicevi totale fattura intendevi anche -la rit_Acconto?
Grazie

 Grazie
dove mi dicevi totale fattura intendevi anche -la rit_Acconto?
Grazie
__
Risposta
No, manca una virgola
MA

 MA
ok Massimiliano
ho fatto ed inserito:
Totale Fattura: (CCur([TbDettaglio_Fattura]!
[QUANTITA]*[TbDettaglio_Fattura]![PREZZO])*(1-[TbTestata_Fattura]!
[IdSconto])*(1+[TbTestata_Fattura]![IdIVA]))
ma qui però ho ancora più di un record per fattura
sql:
SELECT TbTestata_Fattura.IDTESTATAFATTURA,
TbTestata_Fattura.IDCLIENTE, TbTestata_Fattura.NUMERO,
TbTestata_Fattura.DATA, TbTestata_Fattura.IDTIPODOCUMENTO,
TbTestata_Fattura.IDESENZIONI, TbTestata_Fattura.DATAPAGAMENTO,
TbTestata_Fattura.RIT_ACCONTO, TbTestata_Fattura.IDIVA,
TbTestata_Fattura.IDSCONTO, (CCur([TbDettaglio_Fattura]!
[QUANTITA]*[TbDettaglio_Fattura]![PREZZO])*(1-[TbTestata_Fattura]!
[IdSconto])*(1+[TbTestata_Fattura]![IdIVA])) AS [Totale Fattura]
FROM TbTestata_Fattura INNER JOIN TbDettaglio_Fattura ON
TbTestata_Fattura.IDTESTATAFATTURA =
TbDettaglio_Fattura.IDTESTATAFATTURA;

 MA
ok Massimiliano
ho fatto ed inserito:
Totale Fattura: (CCur([TbDettaglio_Fattura]!
[QUANTITA]*[TbDettaglio_Fattura]![PREZZO])*(1-[TbTestata_Fattura]!
[IdSconto])*(1+[TbTestata_Fattura]![IdIVA]))
ma qui perň ho ancora piů di un record per fattura
sql:
SELECT TbTestata_Fattura.IDTESTATAFATTURA,
TbTestata_Fattura.IDCLIENTE, TbTestata_Fattura.NUMERO,
TbTestata_Fattura.DATA, TbTestata_Fattura.IDTIPODOCUMENTO,
TbTestata_Fattura.IDESENZIONI, TbTestata_Fattura.DATAPAGAMENTO,
TbTestata_Fattura.RIT_ACCONTO, TbTestata_Fattura.IDIVA,
TbTestata_Fattura.IDSCONTO, (CCur([TbDettaglio_Fattura]!
[QUANTITA]*[TbDettaglio_Fattura]![PREZZO])*(1-[TbTestata_Fattura]!
[IdSconto])*(1+[TbTestata_Fattura]![IdIVA])) AS [Totale Fattura]
FROM TbTestata_Fattura INNER JOIN TbDettaglio_Fattura ON
TbTestata_Fattura.IDTESTATAFATTURA =
TbDettaglio_Fattura.IDTESTATAFATTURA;
___
Risposta:
Scusa ma scherzi?
Perchč non hai fatto quello che ti ho detto???
io non ho inserito i record del dettaglio, PROPRIO PER EVITARE CHE RIPETESSE 
PER OGNI RECORD DEL DETTAGLIO IL RECORD DELLA TESTATA.
io ho messo in join il totale del dettaglio
MA

 MA
scusami Massimiliano
ho imterpretato male le tur istruzioni.
Ho ho aperto un'istruzione query di selezione
ed ho inserito la TbTestata_Fattura poi ho trascinato sulla griglia
tutti i record. Con poi leghiamo il dettaglio della fattura......
allora devo fare un'altra query?
qui ho bisogno di aiuto
Grazie


ciao Massimiliano
Forse così?:
1-Query_TbTestata_Fattura:
SELECT TbTestata_Fattura.IDTESTATAFATTURA,
TbTestata_Fattura.IDCLIENTE, TbTestata_Fattura.NUMERO,
TbTestata_Fattura.DATA, TbTestata_Fattura.IDTIPODOCUMENTO,
TbTestata_Fattura.IDESENZIONI, TbTestata_Fattura.DATAPAGAMENTO,
TbTestata_Fattura.RIT_ACCONTO, TbTestata_Fattura.IDIVA,
TbTestata_Fattura.IDSCONTO
FROM TbTestata_Fattura;
2-Query_totaleFatture:
SELECT (CCur([TbDettaglio_Fattura]![QUANTITA]*[TbDettaglio_Fattura]!
[PREZZO])*(1-[TbTestata_Fattura]![IdSconto])*(1+[TbTestata_Fattura]!
[IdIVA])) AS [Totale Fattura]
FROM TbDettaglio_Fattura INNER JOIN Query_TbTestata_Fattura ON
TbDettaglio_Fattura.IDDETTAGLIOFATTURA =
Query_TbTestata_Fattura.IDTESTATAFATTURA;
cosi dovrebbe andar bene.

 MA
ciao Massimiliano
Scusami ma avevo saltato un pezzo.
ho inserito nella sql il tuo codice, ma mi da errore di sinatssi:
SELECT [idtestata fattura],
idcliente,
numero,
data,
Imponibile,
fctround(imponibile*(1-idSconto/100)) as ImponibileNetto,
fctround(imponibile*idSconto/100) AS  Sconto,
fctround(imponibile*(1-idIVA/100)) AS  IVA,
fctround(ImponibileNetto+nz(IVA) AS TotaleFattura
fctround(imponibileNetto*(nz(-11,5*RIT_Acconto)/100)) AS  Ritenuta,
FROM
TbTestata_Fattura AS F
RIGHT JOIN
(SELECT FK_idTestatafattura,
fctround(sum(Prezzo*Quantitï¿½)) AS Imponibile FROM



ciao Massimiliano
come vede ho fatto molte prove sperando di aver fatto quello che mi
suggerito,
in questo modo ho un'inco totale per fattura; così va bene?:
SELECT Sum((CCur([TbDettaglio_Fattura]!
[QUANTITA]*[TbDettaglio_Fattura]![PREZZO]))) AS [Totale Fattura],
TbDettaglio_Fattura.IDTESTATAFATTURA
FROM TbDettaglio_Fattura INNER JOIN Query2 ON
TbDettaglio_Fattura.IDTESTATAFATTURA = Query2.IDTESTATAFATTURA
GROUP BY TbDettaglio_Fattura.IDTESTATAFATTURA;


chiedo aiuto, non mi riece questo passaggio:
 TbTestata_Fattura AS F
RIGHT JOIN
(SELECT FK_idTestatafattura,
fctround(sum(Prezzo*Quantitïa)) AS Imponibile FROM
tblDettaglioFattura) AS D
ON F.[idtestata fattura] = D.FK_idTestatafattura;
in più anche se ho copiato nel modulo sotto gli oggetti
il codice,  il comando fctround non mi funziona.
Grazie

 ha scritto nel messaggio 
news:c45969e7-d7cb-41fd...@g26g2000vba.googlegroups.com...
chiedo aiuto, non mi riece questo passaggio:
 TbTestata_Fattura AS F
RIGHT JOIN
(SELECT FK_idTestatafattura,
fctround(sum(Prezzo*Quantit�a)) AS Imponibile FROM
tblDettaglioFattura) AS D
ON F.[idtestata fattura] = D.FK_idTestatafattura;
in pi� anche se ho copiato nel modulo sotto gli oggetti
il codice,  il comando fctround non mi funziona.
Grazie
il comando fctround non � un comando, � una funzione che devi mettere in un 
modulo pubblico
quello che c'� scritto dentro lo puoi cercare in rete
Antonio

 ha scritto nel messaggionews:c45969e7-d7cb-41fd...@g26g2000vba.googlegroups.com...

ciao Antonio e grazie
questo va bene?
Function fctRound(varNr As Variant, Optional varPl As Integer = 2) As
Double
 'by Konrad Marfurt + ("" by) Luke Chung + Karl Donaubauer
    'esce se valore non numerico
    If Not IsNumeric(varNr) Then Exit Function
    fctRound = Fix("" & varNr * (10 ^ varPl) + Sgn(varNr) * 0.5) / (10
^ varPl)
End Function
va inserito nella voce moduli sotto gli oggetti del db?

 - Mostra testo citato -
ciao Antonio
Puoi aiutarmi con un esempio pratico  come legare il
dettaglio della fattura?
Per come faccio mi ritrovo sempre tanti numeri di fattura
 x n volte i record della sub_maschera.
ecco un esempio:
SELECT TbDettaglio_Fattura.IDDETTAGLIOFATTURA,
TbDettaglio_Fattura.QUANTITA, TbDettaglio_Fattura.PREZZO,
([Quantita]*[Prezzo]) AS ImponibileLordo,
Sum(CCur([Prezzo]*[Quantita]*(1-[idSconto])*(1+[idiva]))) AS Totale,
F.NUMERO, F.DATA, F.IDCLIENTE
FROM TbDettaglio_Fattura INNER JOIN F ON
TbDettaglio_Fattura.IDTESTATAFATTURA = F.IDTESTATAFATTURA
GROUP BY TbDettaglio_Fattura.IDDETTAGLIOFATTURA,
TbDettaglio_Fattura.QUANTITA, TbDettaglio_Fattura.PREZZO, F.NUMERO,
F.DATA, F.IDCLIENTE;
Grazie

 ha scritto nel messaggio 
news:0932e4f0-28ac-4d08...@p7g2000prb.googlegroups.com...




End Function

E' lui e la function deve essere pubblica
Antonio 

 - Mostra testo citato -
___________________
Ciao Antonio, sperando in una tua risposta,
ho necessità di mostrarti le seguenti relazioni,
in quanto qualcosa non va.
per es:
ho tre tb:
1-TbTestata_Fattura:
idcliente
idtipodocumento
idesenzioni
numero
data
datapagamento
rit_Acconto
idiva
idsconto
2-TbIva
idiva (relazione 1 a molti con TbTestata_Fattura ma non mi fa
spuntatare la casella dell'integrità referenziale)
iva
3-TbSconto
idsconto(relazione 1 a molti con TbTestata_Fattura ma non mi fa
spuntatare la casella dell'integrità referenziale)
sconto
Ora se creo una query con le seguenti Tb:
Tbestata_Fattura
TbIVA e TbSconto
se faccio lo join tra gli ID
la query non mi mostra nulla
mentre senza si.
Perchè?

 - Mostra testo citato -
ciao Antonio e grazie.
Ci sono riuscito, l'unica cosa e che nel campo DATAPAGAMENTO non mi fa
scrivere.
Come posso risolvere?
ti allego il codice SQL:
SELECT TbTestata_Fattura.IDTESTATAFATTURA,
TbTestata_Fattura.IDCLIENTE, TbTestata_Fattura.NUMERO,
TbTestata_Fattura.DATA, TbTestata_Fattura.IDTIPODOCUMENTO,
TbTestata_Fattura.DATAPAGAMENTO, fctround([imponibileLordo]*(1-
[idsconto])) AS ImponibileNetto,
fctround([imponibileLordo]*[idsconto]) AS Sconto,
fctround([imponibileNetto]*([IdIVA])) AS IVA,
fctround([ImponibileLordo]*(nz(11,5*[rit_Acconto])/100)) AS Ritenuta,
fctround([imponibileNetto]+nz([IVA])) AS TotaleFattura,
Q_Tot_Imponibile.ImponibileLordo
FROM TbTestata_Fattura INNER JOIN Q_Tot_Imponibile ON
TbTestata_Fattura.IDTESTATAFATTURA =
Q_Tot_Imponibile.IDTESTATAFATTURA;


ciao a tutti
Ho finalmente creato la maschera riepilogativa delle fatture,
ma nella campo dataPagamento non mi fa inserire la data.
Come posso risolvere? Grazie
Allego il codice SQL della query F che è l'origine della Maschera in
questione:
SELECT TbTestata_Fattura.IDTESTATAFATTURA,
TbTestata_Fattura.IDCLIENTE, TbTestata_Fattura.NUMERO,
TbTestata_Fattura.DATA, TbTestata_Fattura.IDTIPODOCUMENTO,
TbTestata_Fattura.DATAPAGAMENTO, fctround([imponibileLordo]*(1-
[idsconto])) AS ImponibileNetto,
fctround([imponibileLordo]*[idsconto]) AS Sconto,
fctround([imponibileNetto]*([IdIVA])) AS IVA,
fctround([ImponibileLordo]*(nz(11,5*[rit_Acconto])/100)) AS Ritenuta,
fctround([imponibileNetto]+nz([IVA])) AS TotaleFattura,
D.ImponibileLordo
FROM TbTestata_Fattura RIGHT JOIN D ON
TbTestata_Fattura.IDTESTATAFATTURA = D.IDTESTATAFATTURA;