Newsgroup: it.comp.appl.access
Titolo: Ordini e fatturazione - Relazioni tabelle

Ciao a tutti
Ho costruito un dbase di gestione ordini con pressapoco la stessa
struttura del database northwind quindi con tabelle Ordini e dettaglio
ordini. Ho previsto inoltre una maschera  per la fatturazione degli
ordini con i seguenti campi:
Numero Fattura
Data
.....
Fornitore 
Cliente
In base ai dati inseriti compilo una casella di riepilogo con l'elenco
degli ordini effettuati da quel cliente e fornitore. Selezionando un
ordine dall'elenco apro quindi una maschera continua che mi espone
tutti gli articoli ordinati nell'ordine prescelto (basata su query
ordini, dettagli,....). Provvedo poi a spuntare gli articoli che
desidero fatturare. Fino a che viene fatturata l'intera quantità di
ogni singolo articolo ordinato tutto bene anche se gli articoli nella
stessa fattura si riferiscono a più ordini..... Per ottenerere la
stampa/visualizzazione della fattura posso quindi inserire accanto al
prodotto ordinato (in tabella dettagli ordini) oltre al flag di
fatturato anche l'id fattura e filtrare di conseguenza
Il problema è che si può verificare il caso in cui ad esempio di 10
pezzi dell'articolo ordinato ne vengano fatturati 6 in una fattura e
il restante in un'altra. In questo modo non riesco a tenere il
riferimento alla fattura perchè il flag fatturato e id fattura sta'
nella tabella dettagli ordini e quindi non può contenere riferimenti a
più fatture.
Ho pensato di non basare la maschera continua su query ordini/dettagli
ordini, ma di utilizzare una tabella dettaglio fatture, creare un
maschera basata su query fatture/dettaglio fatture dove inserire gli
articoli fatturati da tenere distinti da dettagli ordini. Purtroppo
non va bene perchè ho bisogno per motivi di velocità nell'inserimento
delle fatture di avere a disposizione l'elenco dell'ordinato in
quell'ordine e su quello intervenire per fatturare. 
Pensavo allora ad una soluzione tipo:
- Maschera continua basata su query fatture/dettagli fatture
- Casella combinata filtrata in base all'ordine selezionato basata su
ordine/dettaglio ordine
- Scelta dell'articolo ordinato nella combinata,  spunta del flag
fatturato che propone la quantità ordinata o inserimento quantità nel
caso non fosse pari alla quantità ordinata (tutti campi in tabella
dettaglio fatture)
Ma anche questa è una soluzione poco veloce perche' bisogna sempre
scegliere l'articolo e comunque preferei trovare una soluzione che
relazioni le tabelle per evitare duplicazioni inutili ma non sono
riuscito a capire come fare.
Scusate se non mi sono adeguatamente spiegato e per la lunghezza del
post
Ringrazio

 ha scritto nel messaggio
news:3a9cb3b0...@news.tiscalinet.it...

Poichè hai la necessità di gestire una fatturazione a "ordini aperti"
(ovvero non tutta la quantità ordinata viene evasa in un'unica soluzione e
va fatturata solo la quantità evasa), secondo me, come dettaglio della
fattura non puoi adoperare la tabella dettagli ordine ma devi crearti una
tabella dettagli fattura.
Questa tabella potrebbe avere una struttura simile a quella dei dettagli
ordine: porterebbe il campo numero fattura e come quantità quella da
fatturare e non quella ordinata.
Nella tabella dettaglio ordini non metterei il campo numero fattura.
Poi operei cosiì.
Nella tua maschera continua inserirei due controlli non associati: il primo
(QtàEvasa) relativo alla quantità da fatturare ed il secondo (NumFattura)
per il numero fattura.
Nell'origine controllo di QtàEvasa scriverei =QtàOrdinata (dove QtàOrinata è
il nome del controllo che contiene la quantità dell'ordine); così facendo,
se la quantità ordinata è tutta da fatturare, in questo controllo non
digiterai nulla, in caso contrario digiterai la quantità da fatturare.
Quindi, a fronte dell'evento "Dopo aggiornamento" di NumFattura, generei una
routine VBA che apre un recordset sulla tabella dettagli fattura per
inserire un record i cui dati li puoi ricavare dai controlli del record
corrente della maschera continua; subito dopo aprirei un altro recordset
sulla tabella dettaglio ordini: ricercherei il record corrente e dopo averlo
trovato ne aggiornrei la quantità ordinata sottraendogli la quantità
fatturata; volendo puoi cancellare i record con quantità zero.
Naturalmente, come ho detto sopra, in relazione con la tabella fattura ci
sarà la tabella dettaglio fatture e non la tabella dettagli ordini (come
invece previsto in NorthWind).
Se poi per completezza, ti serve conservare la quantità originale ordinata
nel dattaglio ordini, aggiungi in questa tabella, oltre alla quantità
ordinata che non aggiornerai, un campo con la quantità fatturata (sommatoria
delle quantità fatturate); quando le due quantità coincidono, l'ordine è
stato evaso e fatturato.
Dovrebbe funzionare.
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------



Ho provato e la tua mi sembra la soluzione migliore perchè riesco ad
avere l'elenco dei prodotti ordinati e contemporaneamente ad
incrementare la tabella dettagli fatture. Nel caso inserisca nella
tabella dettaglio ordini la quantità fatturata pero' non ho bisogno di
aprire un recordset sulla tabella dettaglio ordini perchè essendo la
maschera continua basata su query ordini/dettaglio ordini posso
modificarla direttamente..... o sto sbagliando qualcosa?
Nel caso poi si sbagliasse nella fatturazione uso il procedimento
inverso cioè in base alla quantità evasa (controllo non associato)
modificata (che potrebbe anche essere 0 in caso di prodotto fatturato
erroneamente) aprire un recordset su dettaglio fatture e modificare il
record in base ai nuovi dati inseriti e se la quantità è 0 provvedere
a cancellarlo. Contemporaneamente aggiorno la quantità fatturata in
dettaglio ordini. Ho capito bene?
Il problema che mi si è posto ora riguarda  il fatto che il controllo
non associato quantità evasa inserito nella maschera continua cambia
per tutti i record ogni volta che inserisco il valore da fatturare. 
Ti ringrazio per la disponibilità e nonostante non intervenga spesso
nel newsgroup (e quando lo faccio solo per fare domande !!) leggo
quotidianamente i post e apprezzo la qualità delle risposte tue e
degli altri che dedicano il loro tempo a chi cerca di imparare.
Ciao Stefano

 Ciao Stefano
