Calcolo Costi Trasporto

Anonimo
2018-09-10T12:57:27+00:00

Buongiorno

Sto provando a creare un semplice DB per il calcolo delle spese di trasporto che vengono pagate a Tonnellata.

Il costo è progressivo, ovvero all'aumentare delle tonnellate il costo unitario aumenta dunque io ho creato una tabella (chiamiamola A) in cui ho la fascia da 0 a 1 costo 7

1,1 a 2 costo 20

da 2,1 a 3 costo 50 e cosi via.

Ho anche una tabella in cui ho dei pesi calcolati sul documento emesso (Chiamiamo la tabella B) ora vorrei sapere se è possibile attraverso una query ricavare il giusto costo di trasporto da applicare al mio documento.

Mi servirebbe un'espressione che mi recuperi il costo del trasporto andando a pescare quello giusto da applicare nella fascia presente nella tabella A

Grazie in anticipo

Microsoft 365 e Office | Access | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2018-09-10T15:41:29+00:00

Ciao Francesco,

il costo è progressivo per scaglioni (tipo la tassazione dell'irpef) o no?

Mi spiego: per un pacco che pesa 1.5 Ton pagherò 7 fino a 1 e poi 20 per l'eccedenza 0.5 oppure pagherò direttamente 20?

Nel secondo caso potresti basarti su una tabella, quella che tu hai chiamato "A" e che ipoteticamente chiamerò "tTariffeTrasporto" con, almeno, tre campi ovvero "Peso_da", "Peso_a" e "Costo". La tua query dovrà semplicemente estrarre il record di "tTariffeTrasporto" in cui il peso delle merci contenute nel tuo documento (la tua tabella "B") rientrano nella fascia. Qualcosa del tipo:


Select Costo From tTariffeTrasporto Where Peso_da >= tuoPeso AND Peso_A <= tuoPeso


David

La risposta è stata utile?

4 persone hanno trovato utile questa risposta.
0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2018-09-17T07:49:07+00:00

Ciao Francesco,

prima di darti la mia interpretazione della possibile soluzione ti espongo una perplessità relativa alla tabella COSTIVET (e di conseguenza DettaglioCosti): come è possibile che tutti i record di COSTIVET riportino come CODVET lo stesso codice? L'unica spiegazione che mi sono dato è che CODVET rappresenti il codice del vettore che applica quelle tariffe. Tuttavia mi sarei aspettato anche un codice di quella specifica tariffa che identifica univocamente ogni tariffa per quel vettore. Se questo fosse corretto allora nella tabella DettaglioCosti non dovresti avere codice CODVET, o almeno non dovresti avere solo quel campo, ma ti servirebbe anche il codice tariffa peso e codice tariffa volume specifico. Questo ti consentirebbe di collegare COSTIVET e DettaglioCosti tramite CODVET

  • CodiceTariffaPeso/Volume.

Tieni conto però che non conoscendo il tuo contesto potrei interpretare in modo non corretto le tue necessità.

La mi soluzione per rintracciare la tariffa passa per due funzioni pubbliche, una per il peso e l'altra per il volume:


Public Function fCostiVettorePeso(ByVal sPeso As String) As Double

    Dim db As DAO.Database

    Dim rst As DAO.Recordset

    Set db = CurrentDb

    Set rst = db.OpenRecordset("SELECT PrezzoPeso FROM COSTIVET " _

                & "WHERE (" & Replace(sPeso, ",", ".") & " BETWEEN [PESODA] AND [PESOA])", _

                dbOpenSnapshot, dbReadOnly)

    fCostiVettorePeso = rst!PrezzoPeso

    rst.Close

    db.Close

    Set rst = Nothing

    Set db = Nothing

End Function

Public Function fCostiVettoreVolume(ByVal sVolume As String) As Double

    Dim db As DAO.Database

    Dim rst As DAO.Recordset

    Set db = CurrentDb

    Set rst = db.OpenRecordset("SELECT PrezzoVolume FROM COSTIVET " _

                & "WHERE (" & Replace(sVolume, ",", ".") & " BETWEEN [VOLUMEDA] AND [VOLUMEA])", _

                dbOpenSnapshot, dbReadOnly)

    fCostiVettoreVolume = rst!PrezzoVolume

    rst.Close

    db.Close

    Set rst = Nothing

    Set db = Nothing

End Function


da richiamare, ad esempio, in una query in questo modo:


SELECT TIPDOC, DATDOC, CODART, DESART, QUANTI, VOLUME, PESUNI, MetriCubi, Peso, fCostiVettorePeso([Peso]) AS CostoVettorePeso, fCostiVettoreVolume([MetriCubi]) AS CostoVettoreVolume FROM DettaglioCosti;


Ottenendo quanto segue:

David

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento

12 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2018-09-10T16:13:02+00:00

    FioreMatto

    Hai ragione ma sto provando l'istruzione di David e pare funzionare, se eventualmente potrebbe non essere esaustiva proverò a mettere qualche esempio pratico

    Grazie ancora

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2018-09-10T15:48:34+00:00

    Buonasera

    Per non sparare nel buio allega un file con un po di dati e il risultato da ottenere scritto a mano....anche se dalla descrizione potrebbe essere sufficiente un CERCA.VERT o INDICE/CONFRONTA

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2018-09-10T15:45:54+00:00

    Ciao David

    Grazie per la risposta.

    Si, in effetti non è progressivo come gli scaglioni IRPEF ma se il peso ha un valore che appartiene alla fascia superiore si applica quella tariffa per tutto il peso trasportato.

    A questo punto penso che la risposta sia già quella che tu proponi

    Grazie ancora

    La risposta è stata utile?

    0 commenti Nessun commento