Ripartire dati in percentuale

di il
15 risposte

Ripartire dati in percentuale

Ciao ragazzi chiedo un aiuto perchè non so proprio come dovrei fare .
Ho una maschera in cui ho una casella combinata dove vado a scegliere un valore[codice_materiale] ,la sottomaschera mi da dei valori in questo caso delle [quantità].
Nella maschera principale ho una casella che si chiama [totale quantità] che riporta la somma totale dei campi [quantità] della sottomaschera , fin qui tutto ok, il valore totale della somma deve essere sempre 100 .
Se nella sottomaschera inserisco un nuovo valore e quindi il totale arriva a 160 vorrei che tramite un pulsante i valori si ripartissero in valore percentuale fino a che [totale quantità] diventi di nuovo 100
esempio:
maschera
casella combinata : mat01
sottomaschera
valore1 :30
valore2:50
valore3:15
valore4:5

totale quantità :100

inserisco nella sottomaschera un nuovo valore
valore5: 60
totale quantità :160

spero di essere stato chiaro

15 Risposte

  • Re: Ripartire dati in percentuale

    La ripartizione [%] di cui parli per il nuovo inserimento devi spiegare l'idea della ripartizione.
    E' chiaro che 60 aggiunti a 100 dia 160 ma devi mostrare come, dalla tua idea, attuare il calcolo di ripartizione...
    Dire che vuoi la ripartizione [%] non spiega assolutamente NULLA, è ovvio che i valori vadano tutti diminuiti ma non si capisce se il 60 deve rimanere 60 quindi si deve devinire il 40 residuo come Nuovo 100% per il ricalcolo dei valori attuali...

    Insomma devi essere più tecnico per la parte che noi non conosciamo, altrimenti la risposta è che su Evento AfterUpdate applichi il calcolo che hai in testa e modifichi le quantità dei Valori precedenti al nuovo inserito... e penso sia sufficinete, anche perchè non capisco se sei in difficoltà con l'algoritmo di ricalcolo o con il Metodo...
  • Re: Ripartire dati in percentuale

    Ciao grazie per avermi risposto la mia difficoltà e nel metodo non con l'algoritmo,ti faccio un esempio
    1°campo =20
    2° campo=50
    3°campo=10
    4°campo=20
    totale 100
    adesso se aggiungo un 5°campo=10
    totale2 ho 110
    il calcolo matematico è il seguente :
    (1°campo:totale2) x100
    e cosi via per tutti i campi rimanenti alla fine il risultato fa di nuovo 100
    adesso avevo pensato ad un pulsante che richiamasse una routine vba ma non so come scrivere il codice
  • Re: Ripartire dati in percentuale

    Puoi provare ad inserire il Codice VBA su Click di un Button messo nel PieDiPaginaMaschera.
    Prima di tutto dovresti mettere nel PièDiPagina anche un controllo calcolato con =Somma ([NomeControlloValore]), in questo controllo avrai il totale prima sarà 100, poi dopo l'inserimento del 5° Campo avrai 110
    Ora su Click() del Button, devi eseguire una piccola routine VBA.
    Non mi è chiaro se i Numeri possono o meno avere Decimali... io ipotizzo di si. [Code] Private Sub NomeButton_Click() Dim dTOT As Decimal dTOT=Me![NomeControlloTotaleValore] With Me.RecodsSetClone .MoveFirst .Edit Do Until .EOF .Fields("NomeCampoValore")=(.Fields("NomeCampoValore")*100)/dTOT .MoveNext Loop .Update End With Me.Requery End Sub
  • Re: Ripartire dati in percentuale

    Ciao Alex grazie,cerca di portare pazienza.
    da maschera scelgo un valore da casella combinata e nella sottomaschera mi escono i valori "NomeCampoValore"
    mi da subito errore : Dim dTOT As Decimal
    se ad esempio metto Integer va avanti nel debug e si ferma a : RecodsSetClone togliendo la s da records il debug va avanti fino a
    .Fields("NomeCampoValore")=(.Fields("NomeCampoValore")*100)/dTOT mi da il seguente errore l'adattamento del valore decimale a provocato un troncamento dei dati
  • Re: Ripartire dati in percentuale

    L'ho scritto a mano quindi devi verificare gli eventuali errori di battitura... non va bene Integer in quanto INTERO... ed ovviamente taglia i decimali.

    Puoi usare Currency per ovviare ad errori di arrotondamento, ovviamente devi anche sostituire i nomi generici che ho scritto con i tuoi Reali...!!!!
    
    Private Sub NomeButton_Click()
        Dim dTOT  As Currency
        dTOT=Me![NomeControlloTotaleValore]
        With Me.RecordSetClone
            .MoveFirst
            .Edit
            Do Until .EOF
                .Fields("NomeCampoValore")=(.Fields("NomeCampoValore")*100)/dTOT
                .MoveNext
            Loop
            .Update
        End With
        Me.Requery
    End Sub
  • Re: Ripartire dati in percentuale

    Mi da errore elemento non trovato
    .Fields("NomeCampoValore")=(.Fields("NomeCampoValore")*100)/dTOT
    credo dovrei mettere il percorso della sottomaschera dove si trova "NomeCampoValore"
    ma non so come farlo
  • Re: Ripartire dati in percentuale

    No il codice va inserito nella SottoMaschera.
    Ovvio che non li trovi... ti avevo anche detto che se non cambi i nomi con i tuoi non ce ne vai fuori... :
    [NomeControlloTotaleValore]
    "NomeCampoValore"
  • Re: Ripartire dati in percentuale

    Alex scusa come inserisco il codice nella sottomaschera e poi richiamare questo codice da pulsante messo nella maschera .
    se metto il pulsante nella sottomaschera quando vado a visualizzare il tutto il pulsante non mi appare
  • Re: Ripartire dati in percentuale

    peter17 ha scritto:


    Alex scusa come inserisco il codice nella sottomaschera e poi richiamare questo codice da pulsante messo nella maschera .
    se metto il pulsante nella sottomaschera quando vado a visualizzare il tutto il pulsante non mi appare
    Siccome inserisci nella SottoMaschera, il pulsante ha senso sia nella Sottomaschera, puoi metterlo nel PieDiPagina della Maschera o nella sua intestazione, ovvio non vada nel Corpo dove hai i dati...!
  • Re: Ripartire dati in percentuale

    Ancora quest'errore
    l'adattamento del valore decimale a provocato un troncamento dei dati
  • Re: Ripartire dati in percentuale

    Il Campo nel Database di che tipo è...?
    Se è un Intero...

    Tu che tipo di dato vuoi...? Adegua tutto a quello che ritieni giusto.
  • Re: Ripartire dati in percentuale

    Il campo del database
    formato : numero generico
    posizioni dei decimali:automatico
    io dovrei contenere dei dati con un massimo 6 cifre ad esempio : 150,155
  • Re: Ripartire dati in percentuale

    peter17 ha scritto:


    Il campo del database
    formato : numero generico
    posizioni dei decimali:automatico
    io dovrei contenere dei dati con un massimo 6 cifre ad esempio : 150,155
    Devi approfondire gli argomenti tecnici altrimenti per una banalità si perde un sacco di tempo...

    Non esiste un Campo "Numero Generico" esiste "Numerico", ma se guardi sotto dove riporta "Dimensione Campo" troverai che viene impostato come Intero Lungo.
    La parola Intero credo sia intuitiva da comprendere che TRONCA la parte decimale...!
    La posizione dei Decimali non ha nulla a che vedere con il Valore trattato, ma solo con la sua Visualizzazione... quindi se il calcolo di una divisione genera 9 decimali e tu imposti 2, il Numero avrà una precisione che consente di stimare i 9 decimali ma ne visualizzi solo 2.

    Il tuo problema di contenere i dati a 6 Cifre, anche quì non può esistere in realtà, se hai la necessità di Visualizzare o Stampare solo 6 cifre ci si comporta di conseguenza ma solo nella fase di Visualizzazione o stampa...

    Non sto quì a fare un trattato sul TIPO di Numero, devi sapere tu cosa ti serve e per che motivo.
    Nella sostanza se il Dato ha una valenza fiscale devi usare un Numero non affetto dall'arrotondamento, se non ha importanza ti può bastare un Single(nella tabella lo trovi usando la Combo Box nella sezione Dimensione Campo=Precisione Singola, chiaramente sia in Tabella che nella dichiarazione della Variabile del codice).

    Chiarito questo direi che il 3D può essere chiuso, il codice del calcolo è quello, mentre per le questioni di base o di teoria, puoi aprire singoli 3D se ritieni di necessitare di chiarimenti, ma io ti suggerisco sempre una base di studio minimo ma Funzionale da ortare avanti in modo autonomo.
  • Re: Ripartire dati in percentuale

    Grazie Alex sempre molto paziente cambiando impostazione adesso l'errore è cambiato
    Metodo update o CancelUpdate senza addnew o edit
Devi accedere o registrarti per scrivere nel forum
15 risposte