OsvaldoLaviosa ha scritto:
Se ottieni A=+5 e B=+25 vuol dire che TIENI MEMORIA dei corrispondenti saldi di partenza da qualche parte. Penso che devi fare lo stesso per C.
Oppure può darsi che in Query2 hai un calcolo che andrebbe corretto con una IIf che riprenda la "memoria" in caso di non movimentazioni.
La cosa migliore è che tu mostrassi la visualizzazione struttura di entrambe le query, oppure i corrispondenti SQL.
Grazie Osvaldo,
allora io ho
Tabella
Acquisto
ID_Anagrafica ---- Numerico
Acq_Data ---Data/Ora
Acq_NDoc --- Numerico
ID_Ord_Acq --- Numerico
Acq_Ft_Num --- Testo breve
ID_Doc_Tipo --- Numerico
Acq_Note --- Testo lungo
ID_Acq_Doc --- Contatore (chiave primaria)
FC --- Si/No
collegata con
Acquisto_Movimenti
ID_Acq_Doc --- Numerico
MOV_Acq_Data --- Data/Ora
ID_ART --- Numerico
MOV_Acq_Qta --- Valuta
ID_MOV_Acq --- Contatore (chiave primaria)
Tabella
Vendite
ID_Anagrafica ---- Numerico
Ven_Data ---Data/Ora
Ven_NDoc --- Numerico
ID_Acq_Doc --- Numerico
ID_Ord_Ven --- Numerico
ID_Prod_Doc --- Numerico
Ven_NCoC --- Testo breve
ID_Doc_Tipo --- Numerico
Ven_Note --- Testo lungo
ID_Ven_Doc --- Contatore (chiave primaria)
FC --- Si/No
Ven_Ft_Num --- Testo breve
collegata con
Vendite_Movimenti
ID_Ven_Doc --- Numerico
MOV_Ven_Data --- Data/Ora
ID_ART --- Numerico
MOV_Ven_Qta --- Valuta
ID_MOV_Ven --- Contatore (chiave primaria)
Estrapolo i dati con una Query UNION (è la prima volta che l'ho usata) chiamata
riepMovimenti_dett
SELECT [ART_Desc], [FC], [Acq_Data], [Denominazione], [Tipo_Doc], [Acq_NDoc], [Acq_Ft_Num], [ID_Ord_Acq], [MOV_Acq_Qta], [AV]
FROM [riepAcquisti_dett]
UNION ALL SELECT [ART_Desc], [FC], [Ven_Data], [Denominazione], [Tipo_Doc], [Ven_NDoc], [Ven_Ft_Num], [ID_Ord_Ven], [MOV_Ven_Qta], [AV]
FROM [riepVendite_dett];
ho poi una Query
riepREP_Giacenza basata sulla Query Union con filtro tramite maschera di dialogo su campo
FC
IIf(IsNull([Maschere]![Parametri Stampa]![Classificazione]);[FC];IIf([Maschere]![Parametri Stampa]![Classificazione]="Fonti Controllate";-1;0))
e su campo
Acq_Data
Between [Maschere]![Parametri Stampa]![DataDa] And [Maschere]![Parametri Stampa]![DataA]
e creato 5 campi calcolati in più:
Acquisto: IIf([AV]="A";[MOV_Acq_Qta];0)
Vendita: IIf([AV]="V";[MOV_Acq_Qta];0)
Saldo: [Acquisto]-[Vendita]
Qta: IIf([AV]="A";[MOV_Acq_Qta];[MOV_Acq_Qta]*-1)
Tipo: IIf([FC]=Vero;"Fonti Controllate";"100% PEFC")
ho poi una Query
riepREP_Giacenza_Saldi basata sulla Query Union con filtro tramite maschera di dialogo su campo
FC
IIf(IsNull([Maschere]![Parametri Stampa]![Classificazione]);[FC];IIf([Maschere]![Parametri Stampa]![Classificazione]="Fonti Controllate";-1;0))
e su campo
Acq_Data con formula
Dove
<[Maschere]![Parametri Stampa]![DataDa]
e campo
MOV_Acq_Qta con formula
Somma chiamato
SalIn
ho poi il report
riep_Giacenza con codice vba
Option Compare Database
Dim SaldoIn As Double
Dim TotR As Double
Private Sub Corpo_Print(Cancel As Integer, PrintCount As Integer)
'Questo codice mi da il saldo progressivo per gruppo addizionato al saldo iniziale dell'articolo
TotR = Me.Progressivo + SaldoIn
Me.Prog.Value = TotR
End Sub
Private Sub IntestazioneGruppo1_Format(Cancel As Integer, FormatCount As Integer)
'Questo codice mi recupera il saldo iniziale per l'articolo e lo assegna ad una casella di testo nel report
If IsNull(DLookup("SalIn", "riepREP_Giacenza_Saldi", "ART_Desc = " & Chr$(34) _
& Me.ART_Desc & Chr$(34))) Then
SaldoIn = "0"
Else
SaldoIn = DLookup("SalIn", "riepREP_Giacenza_Saldi", "ART_Desc = " & Chr$(34) _
& Me.ART_Desc & Chr$(34))
End If
Me.SI.Value = SaldoIn
End Sub
Private Sub Report_NoData(Cancel As Integer)
MsgBox "Nessun dato per questo report. Annullamento del report..."
Cancel = -1
End Sub
Private Sub Report_Close()
DoCmd.Close acForm, "Parametri Stampa"
End Sub
Private Sub Report_Open(Cancel As Integer)
DoCmd.OpenForm "Parametri Stampa", , , , , acDialog, "Parametri Stampa"
If Not IsLoaded("Parametri Stampa") Then
Cancel = True
End If
End Sub
Private Sub Report_Page()
'Questo codice mi crea la riquadratura in stampa per il report
Me.ScaleMode = 7
Me.Line (0, 0)-(Me.ScaleWidth, Me.ScaleHeight), , B
End Sub
Ho provato a creare una query ed inserire query giacenza e query giacenza saldi, con outer join tra giacenza saldi e giacenza per inserire tutti i record inseriti nei saldi, il problema è che poi nei dati c'è un secondo filtro FC, tra i saldi ci sono solo record con FC = 0 mentre tra i dati dell'anno in corso ci sono dati con FC = -1 e nel fare la stampa questi ultimi non compaiono
Mi sono sicuramente fermato ad una fesseria oppure ho affrontato male il problema, ma ormai dopo un paio di giorni che ci penso non ricordo quasi più neppure da dove sono partito
ps. inserisco anche un link dove ho caricato un dummy del db
grazie in anticipo