Assegnare valore a variabile prelevandolo da una maschera di scelta

di il
6 risposte

Assegnare valore a variabile prelevandolo da una maschera di scelta

Ciao a tutti.

Mi sto incartando su una funzione che probabilmente è banale.

Ho un ordine effettuato ad una ditta, ma in corso di opera viene assegnato ad un'altra ditta.

Nella procedura usuale, apro una maschera dove seleziono i fornitori; questa maschera ha una combobox con tutto l'elenco dei fornitori, e un pulsante per inserire un nuovo fornitore (se non presente nella combobox - devo chiudere la maschera, inserire vari dati in un'altra maschera e riaprire quella dei fornitri aggiornata)

Dopo aggiornamento della combobox, sfrutto l'IDFornitore (colonna (0) della combo) per generare l'ordine.

Attualmente, tutta la genesi dell'ordine avviene dalla form di selezione del fornitore su aggiornamento della combo.

Per la prima volta, ci tocca cambiare un fornitore (mantenendo però l'ordine già in lavorazione).

Ho pensato quindi di staccare tutta la genesi dell'ordine da quell'evento e utilizzare la maschera di selezione dei fornitori solo per scegliere l'IDFornitore, passando poi questo valore alla parte di codice (che adesso è indipendente) che genera l'ordine

Ho creato una funzione “SelezionaFornitore () As Integer”, in cui apro la maschera dei fornitori e metto in pausa l'esecuzione del codice finchè la maschera Fornitori è aperta.

E qui mi blocco…..

L'idea era qualcosa del tipo

SelezionaFornitore=Forms!frmFornitoriCerca!cbxFornitore.Column(0)

Ma questo dovrebbe avvenire dopo aver seleziona il nome dalla combobox. Per cui la funzione SelezionaFornitore va in pausa in attesa che la maschera frmFornitoriCerca venga chiusa. Ma quando la chiudo, perdo il valore della Column(0) della combo e quindi ma in errore (valore Null)

In pratica dovrei selezionare il fornitore e su evento DopoAggiornamento della combo assegnare il valore alla funzione e chiudere la maschera fornitori.

Spero di non essere stato troppo confusionario nella descrizione

Andrea

6 Risposte

  • Re: Assegnare valore a variabile prelevandolo da una maschera di scelta

    Poco chiaro…

    Comunque il valore puoi assegnarlo ad una variabile pubblica.

  • Re: Assegnare valore a variabile prelevandolo da una maschera di scelta

    Se posso essere d'aiuto, anche io avevo un problema simile. Puoi risolvere inserendo una routine con dobleclick sulla combo: si apre la form fornitori in modalita' acFormAdd, acDialog. In questo modo si blocca il codice sulla form principale, si apre la form fornitori, inserisci il nuovo fornitore, quando chiudi la form, fai il requery della Combo e selezioni il nuovo fornitore.

    non dovrebbe servire staccare tutta la genesi dell'ordine da quell'evento”

    Prova a leggere qui:

    https://www.iprogrammatori.it/forum-programmazione/access/automazione-requery-di-combobox-t52033.html

  • Re: Assegnare valore a variabile prelevandolo da una maschera di scelta

    Di seguito un codice di esempio: in questo caso se la combo e' vuota si apre in modalita' inserimento, altrimenti in modalita' filtrata sull'id del fornitore. 

    Private Sub controllotuacombo_DblClick(Cancel As Integer)
    
        Dim stDocName As String
        Dim stLinkCriteria As String
    
        stDocName = "tuaformfornitori"
        If Not IsNull(Me.controllotuacombo.Value) Then
            stLinkCriteria = "[IDfornitore]=" & Me![controllotuacombo]
            DoCmd.OpenForm stDocName, , , stLinkCriteria
        Else
            DoCmd.OpenForm stDocName, , , , acFormAdd
            Me.controllotuacombo.Requery
        End If
    
    
    End Sub

    Volendo puoi personalizzare ulteriormente il codice dopo il requery posizionando la combo sull'ultimo ID inserito.

    Spero ti sia d'aiuto

  • Re: Assegnare valore a variabile prelevandolo da una maschera di scelta

    25/10/2023 - Jocman ha scritto:


    Ciao a tutti.

    ….

    Ho creato una funzione “SelezionaFornitore () As Integer”,

    SelezionaFornitore=Forms!frmFornitoriCerca!cbxFornitore.Column(0)

    Andrea

    Faccio un commento tecnico in quanto in realtà non ho ben compreso l'esigenza reale…!

    Scrivi nella tua spiegazione di aver creato una Funzione [SelezionaFornitore () As Integer], fai attenzione che se il campo associato alla BoundColumn, quella che tu chiami con Column(0) è un Counter, non va bene Integer, ma devi usare LONG.

  • Re: Assegnare valore a variabile prelevandolo da una maschera di scelta

    26/10/2023 - @Alex ha scritto:


    Faccio un commento tecnico in quanto in realtà non ho ben compreso l'esigenza reale…!

    Scrivi nella tua spiegazione di aver creato una Funzione [SelezionaFornitore () As Integer], fai attenzione che se il campo associato alla BoundColumn, quella che tu chiami con Column(0) è un Counter, non va bene Integer, ma devi usare LONG.

    Si mi riferivo a quello (linguaggio tecnico non è proprio il mio forte).

    E grazie per la correzione, sempre bene accette.

    Tornando al problema (che mi rendo conto aver spiegato in modo poco chiaro…)

    @Mailman:

    Il problema non è gestire un nuovo fornitore, quello funziona (come detto, devo farlo in una maschera apposita perchè devo inserire tutta una serie di dati relativi al fornitore); forse ha fatto confusione il fatto che abbia riportato la presenza di quel pulsante con quello scopo.

    Il problema in sè è legato solo alla combo.

    Attualmente, quando impianto un ordine, in quella maschera scelgo dalla combobox il fornitore (nella column(0), tramite SELECT, viene elencato l'ID univoco - contatore - della tabella tblFornitori).

    Scelto il fornitore, su DopoAggiornamento della combo eseguo un codice (quello che ho chiamato biblicamente “genesi dell'ordine”) che mi fa un paio di domande standard (a cui rispondo Si/No), e crea nella tabella tblOrdini un nuovo record con tutte le informazioni appena richieste, e chiude la maschera dei fornitori. Successivamente in una forms apposita lavoro l'ordine etc etc.

    Non era mai successo, ma oggi devo cambiare il solo fornitore (e non tutto l'ordine), quindi ho la necessità di fare l'UPDATE del record nella tblOrdini e sostituire all'ID del vecchio fornitore quello del nuovo.

    Va da sè che se richiamo la form di selezione dei Fornitori e seleziono quello nuovo, eseguirà nuovamente il codice su DopoAggiornamento e impianterà un nuovo ordine (e non è quello che voglio ottenere).

    Quindi ho pensato di prendere quella parte di codice e inserirla in un modulo in una Funzione dedicata (NuovoOrdine).

    Data la nuova esigenza, vorrei creare uan Funzione dedicata CambiaFornitore, che no farà altro che sostituire l'ID delnuovo fornitore a quello vecchio nella tblOrdini.

    In entrambe le funzioni, invece di ripetere il codice, richiamo quella funzione SelezionaFornitore() As Long (dopo la correzione di @Alex) faccio aprire la form di selezione dei fornitori.

    Perciò, la form fornitori così modificata si limiterà a farmi scegliere il fornitore, e su DopoAggiornamento vorrei far passare il valore dell'ID alla funzione dalla quale è stato richiamato, che poi sarà utilizzata dalle 2 nuove funzioni create (o da qualunque altra semmai ce ne fosse necessità in futuro).

    Il problema che si presenta è quello descritto nella ultime 3 righe del primo post.

    Andrea

  • Re: Assegnare valore a variabile prelevandolo da una maschera di scelta

    A mio avviso.il tuo è un falso problema ovvero di come hai operato nella generazione del nuovo record… ed ora vuoi recuperare parte dell'operatività che va in conflitto.. 

    Dovresti ragionare sulla divisione delle azioni… in quel modo quand  apri il recor in modalit modifica  non viene scatenata alcuna azione…

    Spesso chi ha poca pratica scrive codice che fa di tutto, pensando sia un buon modo di scrivere, non capendo che il giusto frazionamento e la logica di indipendenza tra gli oggetti  dovrebb dovrebbe essere sempre un MUST.

Devi accedere o registrarti per scrivere nel forum
6 risposte