Newsgroup: it.comp.appl.access
Titolo: DB con listino variabile

Buongiorno a tutti e buon anno!!!
Al mio secondo db, non so come gestire un listino dinamico, che segue i
prezzi di acquisto.
Mi spiego meglio con un esempio.
Compero materie prime come rame, acciaio, ferro. I costi variano di
giorno in giorno. Perciò, devo far si che i miei costi possano variare
in base al momento in cui acquisto la materia prima.
Ogni mio prodotto(=articolo) è composto da più materie prime, e
attraverso la distinta base io so che quel prodotto, fatto per quel
cliente, è composto da x materie prime, che oggi costa tot. , ieri
aveva un altro prezzo e domani un altro ancora...
Io ero abituata, ad associare ad ogni prodotto o materia prima il suo
costo, ma in questo caso deve essere dinamica la cosa. Il costo di
acquisto può subire variazioni giornaliere, perciò ogni volta che io
produco il mio prodotto, devo avere sottomano i prezzi giornalieri.
Le mie tabelle sono queste:
TBL_MP (Materie prime)
mp_id -> campo contatore chiave primaria
mp_desc -> descrizione
mp_costo -> costo materia prima
TBL_CSTMP (Costi Materie Prime)
cstmp_id-> campo contatore chiave primaria
mp_id -> chiave esterna da TBL_MP
cstmp_costo
cstmp_data
TBL_ART (Articoli fatti con materie prime)
art_id -> campo contatore
art_desc -> descrizione
mp_id   -> chiave esterna materie prime
TBL_DTTART (Dettaglio articoli)
dttart_id -> campo contatore
dist_id  -> chiave secondaria legata a tabella Distinta
art_id   -> chiave secondaria legata a tabella TBL_ART
ddtart_qta -> Quantità di materia richiesto
ddtart_ricarico -> Ricarico per articolo
TBL_DISTINTA (Distinta)
dist_id
cli_id  -> chiave esterna x collegare tbl_cliente
dist_data
I prezzo l'utente li inserisce all'interno della tabella materie prime.
Tramite pulsante salva listino, lui aziona la query di accodamento che
accoda i dati nella TBL_CSTMP, dove inserisce il costo e anche la data.
A questo punto, so che la tabella articolo e la tabella costi sono
legati tramite le materie prime, ma non so proprio come fare, nel
senso:
a) faccio la maschera da tbl_distinta dove l'utente agggiunge i vari
articoli, preparo una casella di riepilogo dove per data lui sceglie il
listino che vuole collegare,  ?
Avete qualche idea?
Grazie,
Samantha

 politiche aziendali.
ok
infatti, la prima volta che l'azienda fa quel prodotto, vuole
conoscerne il costo, perciò il mio utente metterà tutti i dati dentro
il listino che avrà la data di oggi (con la query di accodamento ogni
volta faccio una copia del listino con la data in cui avviene la
modifica). Quindi  tu dici "devo filtrare la data della casella di
riepilogo proponendo i prezzi di listino con data non superiore a
quella della distinta"
Questo va bene x la gestione dei costi odierni, ma se io ho una
distinta di marzo 2006, e oggi mi chiedono di farne altri 1000 pezzi di
quel prodotto...
se voglio quindi gestire lo storico allora nella casella di riepilogo
devo filtrare le data e mostrarle in ordine Z->A discendente
Ok grazie intanto x l'aiuto ,
Samantha

Ciao,
scusami se riscrivo, sto provando con la casella di riepilogo, che
dovrebbe mostrarmi le date del listino.
La prima cosa che ho fatto, è stata quella di creare la query che
contenga i campi:
SELECT TBL_CSTMP.cstmp_id, TBL_CSTMP.matpri_id, TBL_MATPRI.matpri_desc,
TBL_UM.um_desc, TBL_CSTMP.cstmp_costo, TBL_CSTMP.cstmp_data
FROM TBL_UM INNER JOIN (TBL_MATPRI INNER JOIN TBL_CSTMP ON
TBL_MATPRI.matpri_id = TBL_CSTMP.matpri_id) ON TBL_UM.um_id =
TBL_MATPRI.um_id
WHERE (((TBL_CSTMP.cstmp_data)=[Inserire la data]));
in questo modo imposto un filtro per data all'apertura della query, ma
la cosa non va, mi spiego meglio:
Ecco cosa contiene la tabella TBL_CSTMP
CSTMP_ID    
MATPRI.ID
   MATPRI_DESC   CSTMP_COSTO   CSTMP_DATA
1                  1                  RAME                €6,15
               27/12/06
2                  2                  ACCIAIO             €3,50
               27/12/06
3                  3                  FERRO               €2,50
               27/12/06
4                  1                  RAME                €6,30
               28/12/06
5                  2                  ACCIAIO             €3,50
               28/12/06
6                  3                  FERRO               €2,50
               28/12/06
Allora, io filtro x data, magari il 28/12/06 e mi trovo 3 record di
materie prime.
Forse la domanda è stupida, ma non riesco a venirne a capo. Se io devo
fare scegliere il listino, per data, come faccia a fare comparire nella
casella di riepilogo solo una volta la data? Es.
Scelta listino (clicca sulla data)
27/12/06
28/12/06
02/01/07
e associare quindi le materie prime degli articoli a questo costo?
Devo forse fare un tabella listino, dove ho un id per ogni data? tipo:
TBL_Vlistino (tabella versioni listino)
vlist_id     Key primary
vlist_data
TBL_CSTMP
cstmp_id   Key primary
matpri_id  -> Key esterna legata alle materie prime
cstmp_costo
vlist_id      Key esterna che lega alla tabella versioni listino
Quando io eseguirò la query di accodamento dalla tabella materie
prime, questa accoderà i nuovi record nella tabella costi TBL_CSTMP e
creerà un nuovo record nella tabella TBL_Vlistino,
non credo così funzioni
Grazie x l'aiuto a tutti..
:) Samantha
Samantha ha scritto:


:) Samantha
Vincenzo Turturro
---------------------------------------------
il sito comune di it.comp.appl.access:
http://www.sitocomune.com/
---------------------------------------------
E quello di it.comp.as400
http://www.faq400.com/
---------------------------------------------

VT @ home ha scritto:

Grazie mille per la risposta,
io non ho spiegato probabilmente bene come dovrebbe funzionare il db,
è la prima volta che provo a fare una cosa così e ho qualche
difficoltà.
Parto da un esempio più semplice.
Sono una pasticcieria, e le materie prime che sono farina, latte, uova,
lievito
Con questi preparo articoli che sono ad es. base per torta, crema,
ripieno
La base per torta diam. 12 è composta  da più materie prime quali
 - 0,1hg di farina,
 - 500ml. di latte,
 - 1gr. di lievito
Il ripieno
I prodotti che vendo come pasticcieria sono torte, paste, semifreddi.
Ogni prodotto è composto da più articoli, per esempio:
 Una torta XY è composta da
    - 1* base per torta diametro 12cm.,
    - 1* ripieno, 0.5lt latte e 2 uova.
Mentre la torta XZ è composta da 0,2kg. di farina, 0,3lt latte e 1
uovo
Poi devo aggiungerci la manodopera, della quale ho cronometrato le
tempistiche, l'imballaggio, le spese di trasporto, e il margine che
voglio guadagnare sui costi di acquisto.
Io so quanto mi costa un 1kg. di farina, 1lt. di latte, e 1 uovo
Ogni giorno faccio diversi tipi di torte, e la stessa torta la posso
fare 3 volte all'anno.Perciò ho una vasta produzione di diversi
articoli.
Il costo delle materie prime varia giornalmente, perchè i prezzi li
prendo dalle quotazioni della borsa. E uso n. materie prime (credo 100
tipologie diverse circa)
Scusa l'esempio, ma mi viene + facile parlare di cucina che di torneria
;)
A questo punto, Io so che la torta XY è composta da:
0,5kg. di farina
0,3lt. di latte
1 uovo
Manodopera € 0.35
Imballaggio €1,00
Margine 0,10%
-----------------------------------------------------------------
La manodopera e imballaggio è un costo fisso e noto.
Le materie prime invece variano, nel senso che la faccio oggi, ho il
valore della borsa di oggi, se la faccio domani i costi cambiano.
Abbiamo quindi fissato che il listino può subire una variazione al
massimo giornaliera.
Il risultato che devo ottenere, è di poter sempre scegliere il listino
in base alla data, e avere ogni volta i costi aggiornati a quella data.
Ma il punto è che realmente non so come fare. Come lego il listino
agli articoli?
Al momento ho progettato come di seguito le tabelle:
TBL_Matpri (materie prime quali rame, acciaio, ferro)
matpri_id        Key Chiave primaria
matpri_desc   Descrizione
matpri_um      Definisco unità di misura (kg., singolo, al millimetro)
matpri_costo  Costo
TBL_CSTMP  (Costo materie prime)
cstmp_id       Key Chiave primaria
matpri_id        Key Chiave Tbl_matpri
cstmp_costo   Costo
cstmp_data     Data
TBL_ARTICOLI  (Elenco delle materie prime che compongono l'ARTICOLO)
art_id             Key Chiave primaria
matpri_id        Key Chiave Tbl_matpri
art_desc         Descrizione
art_coeff         Coefficiente (es. se servono 500gr. di farina)
TBL_DTTPRODOTTO (Elenco degli articoli che compongono il prodotto)
dttprod_id    Key Chiave primaria
art_id          Key esterna TBL_ARTICOLI
dist_id         Key esterna TBL_DISTINTA
dttprod_qta  Quantità
TBL_DISTINTA   (Rappresenta il prodotto, ossia x esempio la torta)
dist_id         Key Chiave primaria
dist_data     Data
dist_ricarico  Ricarico
dist_spese   Spese di trasporto
Come vedi, il listino non è legato agli articoli che compongono il
prodotto, ma alle materie prime che compongono il prodotto.
Il prezzo dell'articolo, lo avrò moltiplicando il costo di acquisto
della materia prima che lo compone, per il coefficiente che c'è
nell'articolo che faccio (es. tubo di rame ha per millimetro 0,15 di
rame) e il tubo è lungo 20 mm.
Intanto grazie per il group by, sono alle prime armi con sql e le cose
semplici sono difficili.
Grazie e buona serata,
Samantha

 (...) 

VT @ Work ha scritto:

Ciao VT, come hai potuto notare, mi manca il dono della sintesi.
Per capire la tua struttura, l'ho disegnata e come relazioni su un
foglio, e alla fine mi sono accorta che nel mio caso:
Distinta            (associata a cliente, contenente + articoli)
Articoli             (contenente più componenti)
Componenti      (contiene una materia prima)
Materia prima
Perciò l'unica cosa che non devo inserie è la tabella TBL_Componenti
Dettagli, e la tabella componenti diventa:
TBL_Componenti
comp_id                  Chiave primaria
comp_desc              Descrizione
comp_mp_id            Chiave esterna (primaria della TBL_MP.mp_id)
comp_coeff              Coefficiente
Questo perchè, il componente può essere un tubo fatto di rame,  del
quale prendo magari una lunghezza diversa.
Grazie infinite x l'aiuto e pazienza
Samantha
