Problema ultimo record sottomaschera

di il
21 risposte

Problema ultimo record sottomaschera

Buonasera a tutti.

Premetto che ho provato a risolvere cercando in altre discussioni ma le soluzioni trovate continuano a non funzionare.

Nel mio database ho una tabella "Consegne" e una tabella "Turni". Più consegne possono essere in più turni, quindi la relazione che li lega è molti a molti. Per farlo ho realizzato una terza tabella "Rel_TC" relazionata in questo modo:

Per la visualizzazione ho crato una maschera inserendo i campi sia di "Turni" che di "Consegne". Così facendo la creazione guidata ha generato una maschera "Turni" con layout giustificato e sottomaschera collegata "Consegne" con layout tabulare: scorrendo i record di "Turni" automaticamente "Consegne" visualizza la lista dei record associati tramite la relazione contenuta nella tabella "Rel_TC"

Ho inserito la maschera "Turni" come sottomaschera della main form "Principale", quindi la struttura è maschera "Principale" > sottomaschera "Turni" > sottomaschera "Consegne".

Al caricamento "Turni" si sposta sull'ultimo record. Tramite la maschera popup "Inserisci", apribile tramite un pulsante della maschera "Principale", creo un nuovo record per la tabella turni. 

Alla chiusura di "Inserisci", vorrei che la sottomaschera "Turni" si aggiornasse e si posizionasse sull'ultimo record, ovvero quello appena inserito.

Questo il codice in chiusura di "Inserisci"

Private Sub Form_Close()
Forms!Principale!Turni.Form.Requery
Forms!Principale!Turni.SetFocus
DoCmd.GoToRecord acActiveDataObject, , acLast
End Sub

Così facendo "Turni" si aggiorna, ma si posiziona sul primo record. Ad andare sull'ultimo record è invece "Consegne", sottomaschera di "Turni". Facendo una prova, se elimino la sottomaschera "Consegne", allora "Turni" si posiziona sull'ultimo record.

Spero di non aver proposto un dubbio banale e di essere stato chiaro nella spiegazione.

Grazie in anticipo

Federico

21 Risposte

  • Re: Problema ultimo record sottomaschera

    Senza un file di esempio è un pò difficile aiutarti, prova a postarne uno.

  • Re: Problema ultimo record sottomaschera

    18/02/2025 - Federico85 ha scritto:

    Ciao, relazionare due PrimaryKey tra di esse non è cosa buona e giusta.

    Poi, se posso permettermi, esiste una convenzione uno standard per denominare le PrimaryKey, Field, etc..etc... adottare uno standard facilita il confronto con altri sviluppatori che non dovranno necessariamente interpretare un tuo personale modo di identificazione e utilizzo dei nomi.

    Vedrei più corretto una relazione di questo tipo e utilizzando una certa denominazione : 

    Nota: 
    sempre e solo se ho ben capito ciò che vorresti fare:

    Nel mio database ho una tabella "Consegne" e una tabella "Turni". Più consegne possono essere in più turni,

    A mio avviso mancherebbe una Quarta Tabella per meglio strutturare il database 

  • Re: Problema ultimo record sottomaschera

    Rel_tc e turniConsegne sono la stessa cosa con la differenza che rel_tc deve avere una chiave composta e turniconsegne necessita un controllo su eventuali duplicati di record per i campi turniId e consegneId.

    per fare quello che dici devi avere lato master la tabella turni e lato detail una query che comprende rel_tc e consegne

    fatto questo appena vai all'ultimo record di turni hai l'elenco delle relative consegne.

    m a m significa che i dati possono essere letti sia da turni verso consegne (con rel_tc indicizzata con turni) che da consegne verso turni (con rel_tc indicizzata con consegne).

    ora non mi è chiaro come un turno, supponiamo sia il turno delle consegne a roma, possa trovare una consegna anche su milano.

    secondo me hai dei turni di consegna e per ogni turno hai delle consegne da fare (semplicemente 1 a m)

    potresti dare dei dati fittizi per capire meglio i contenuti di turni e consegne?

  • Re: Problema ultimo record sottomaschera

    18/02/2025 - Federico85 ha scritto:

    Buonasera a tutti.

    Premetto che ho provato a risolvere cercando in altre discussioni ma le soluzioni trovate continuano a non funzionare.

    Nel mio database ho una tabella "Consegne" e una tabella "Turni". Più consegne possono essere in più turni, quindi la relazione che li lega è molti a molti. Per farlo ho realizzato una terza tabella "Rel_TC" relazionata in questo modo:

    Per la visualizzazione ho crato una maschera inserendo i campi sia di "Turni" che di "Consegne". Così facendo la creazione guidata ha generato una maschera "Turni" con layout giustificato e sottomaschera collegata "Consegne" con layout tabulare: scorrendo i record di "Turni" automaticamente "Consegne" visualizza la lista dei record associati tramite la relazione contenuta nella tabella "Rel_TC"

    Ho inserito la maschera "Turni" come sottomaschera della main form "Principale", quindi la struttura è maschera "Principale" > sottomaschera "Turni" > sottomaschera "Consegne".

    Al caricamento "Turni" si sposta sull'ultimo record. Tramite la maschera popup "Inserisci", apribile tramite un pulsante della maschera "Principale", creo un nuovo record per la tabella turni. 

    Alla chiusura di "Inserisci", vorrei che la sottomaschera "Turni" si aggiornasse e si posizionasse sull'ultimo record, ovvero quello appena inserito.

    Questo il codice in chiusura di "Inserisci"

    Private Sub Form_Close()
    Forms!Principale!Turni.Form.Requery
    Forms!Principale!Turni.SetFocus
    DoCmd.GoToRecord acActiveDataObject, , acLast
    End Sub

    Così facendo "Turni" si aggiorna, ma si posiziona sul primo record. Ad andare sull'ultimo record è invece "Consegne", sottomaschera di "Turni". Facendo una prova, se elimino la sottomaschera "Consegne", allora "Turni" si posiziona sull'ultimo record.

    Spero di non aver proposto un dubbio banale e di essere stato chiaro nella spiegazione.

    Grazie in anticipo

    Federico

    Come fa una CONSEGNA a poter essere in piu' TURNI ?

    Se la consegna=10 la metti nel turno=4, e l'operatoreX del turno4  esegue la consegna, vuoil dire che il compito e' esaurito

    Come farebbe la consegna poi ad essere ancora in altri turni?

  • Re: Problema ultimo record sottomaschera

    19/02/2025 - sihsandrea ha scritto:

    potresti dare dei dati fittizi per capire meglio i contenuti di turni e consegne?

    19/02/2025 - amorosik ha scritto:

    Come fa una CONSEGNA a poter essere in piu' TURNI ?

    Se la consegna=10 la metti nel turno=4, e l'operatoreX del turno4  esegue la consegna, vuoil dire che il compito e' esaurito

    Come farebbe la consegna poi ad essere ancora in altri turni?

    Buonasera

    Grazie per aver risposto

    Il database gestisce le consegne tra tre operatori che ruotano su tre turni di una fabbrica. A inizio turno, l'operatore inserisce un nuovo turno e prende in carico le consegne del turno precedente. A fine turno, lo stesso operatore a sua volta inserirà le consegne per il turno successivo. Capita molto spesso però che l'operatore, durante il suo turno, non riesca a svolgere interamente le consegne del turno precedente; per questo le consegne si ritroveranno sui turni successivi fino al loro completamento.

    Durante la creazione del turno da parte dell'operatore con la maschera "Inserisci_turno" , viene inserito un nuovo record nella tabella "Turni" e nella tabella "Rel_TC" i record con id_turno del turno precedente vengono copiati sostituendo id_turno con quello appena creato.

    Durante la creazione di una consegna con la maschera "Inserisci_consegna", viene inserito un nuovo record nella tabella "Consegne" e nella tabella "Rel_TC" viene inserito un nuovo record con id_turno del turno corrente e id_consegna quello della consegna appena creata

    Eliminando una consegna viene eliminato il record di "Rel_TC" con id_consegna la consegna da eliminare e id_turno il turno corrente 

    Per fare un esempio pratico:

    - alla fine del turno_1 sono state create consegna_1 e consegna_2

    - l'operatore successivo crea turno_2 e trova le consegne del turno_1

    - durante turno_2 l'operatore riuscirà a svolgere la consegna_1 eliminandola e inserirà una nuova consegna_3. L'operatore successivo, creando turno_3 si troverà  consegna_2 del turno_1 e consegna_3 del turno_2

    Spero di essere stato comprensibile.

  • Re: Problema ultimo record sottomaschera

    E' possible almeno vedere la finestra delle relazioni, facendo apparire per ogni tabella tutti i campi?

  • Re: Problema ultimo record sottomaschera

    19/02/2025 - Federico85 ha scritto:

    Capita molto spesso però che l'operatore, durante il suo turno, non riesca a svolgere interamente le consegne del turno precedente; per questo le consegne si ritroveranno sui turni successivi fino al loro completamento.

    Si, lo ipotizzavo, ma quindi la consegna150 che e' 'nata' nel turno1, verra' ereditata nel turno2, non puo' essere esistente contemporaneamente in piu' turni

    Per il semplice motivo che il turno1 non c'e' piu'

    In questo senso non mi sembra ottimale la via che hai scelto per modellare in dati le informazioni connesse all'attivita' realmente svolta

    Che poi ci possa essere uno storico su turno1 e su turno2 che permetta di risalire la catena dei turni che hanno trattato la consegna150 e che e' stata realmente evasa durante turno3, ci puo' anche essere, ma il discorso del molti a molti in questo caso, a mio avviso, non e' efficace

  • Re: Problema ultimo record sottomaschera

    Studia com'è fatto un borderò e su quello lavori.

  • Re: Problema ultimo record sottomaschera

    19/02/2025 - sihsandrea ha scritto:

    per fare quello che dici devi avere lato master la tabella turni e lato detail una query che comprende rel_tc e consegne

    Grazie mille, ho risolto. Anziché utilizzare la procedura guidata che a partire dalle tre tabelle mi creava automaticamente la maschera “Turni” e la sottomaschera “Consegne”, ho creato prima la maschera “Turni” dall’omonima tabella e poi la sua sottomaschera da “Consegne” e “Rel_TC” associando id_turno a id di “Turni”. 

    Adesso inserendo il nuovo turno, la maschera si sposta sull’ultimo record

    18/02/2025 - By65Franco ha scritto:

    Ciao, relazionare due PrimaryKey tra di esse non è cosa buona e giusta.

    Poi, se posso permettermi, esiste una convenzione uno standard per denominare le PrimaryKey, Field, etc..etc... adottare uno standard facilita il confronto con altri sviluppatori che non dovranno necessariamente interpretare un tuo personale modo di identificazione e utilizzo dei nomi

    Grazie per i consigli. Provvederò 

    Grazie a tutti

  • Re: Problema ultimo record sottomaschera

    20/02/2025 - amorosik ha scritto:

    In questo senso non mi sembra ottimale la via che hai scelto per modellare in dati le informazioni connesse all'attivita' realmente svolta

    Che poi ci possa essere uno storico su turno1 e su turno2 che permetta di risalire la catena dei turni che hanno trattato la consegna150 e che e' stata realmente evasa durante turno3, ci puo' anche essere, ma il discorso del molti a molti in questo caso, a mio avviso, non e' efficace

    Sì esatto. È necessaria la presenza di uno storico. 

    Potresti gentilmente consigliarmi una struttura che a tuo avviso possa essere più corretta ed efficace?

    Grazie 

  • Re: Problema ultimo record sottomaschera

    Fai vedere la finestra delle relazioni, facendo apparire per ogni tabella tutti i campi, in quanto nella primo post l'immagine fa vedere tabelle con altri campi ID ma poi non ci sono le relative relazioni.

    Sarebbe addirittura meglio se postassi un file di esempio.

  • Re: Problema ultimo record sottomaschera

    21/02/2025 - Stifone ha scritto:

    Fai vedere la finestra delle relazioni, facendo apparire per ogni tabella tutti i campi, in quanto nella primo post l'immagine fa vedere tabelle con altri campi ID ma poi non ci sono le relative relazioni.

    Sarebbe addirittura meglio se postassi un file di esempio.

    Posso chiederti come posso postare il file? 

    Grazie

  • Re: Problema ultimo record sottomaschera

    20/02/2025 - Federico85 ha scritto:

    20/02/2025 - amorosik ha scritto:

    In questo senso non mi sembra ottimale la via che hai scelto per modellare in dati le informazioni connesse all'attivita' realmente svolta

    Che poi ci possa essere uno storico su turno1 e su turno2 che permetta di risalire la catena dei turni che hanno trattato la consegna150 e che e' stata realmente evasa durante turno3, ci puo' anche essere, ma il discorso del molti a molti in questo caso, a mio avviso, non e' efficace

    Sì esatto. È necessaria la presenza di uno storico. 

    Potresti gentilmente consigliarmi una struttura che a tuo avviso possa essere più corretta ed efficace?

    Grazie 

    Io proverei a modellare usando un sistema piu' 'lasco'
    Spesso chi sviluppa codice informatico ha cablati dei meccanismi che tenta di replicare "custa quel che custa..." (chi ha fatto l'alpino in Piemonte ricordera' l'incipit)
    Anche se in realta', dal punto di vista operativo questi vincoli, non sono strettamente necessari
    Dovessi farlo io (attansion che non e' un consiglio) farei cosi:

    Tabella OPERATORI     (id, codice, nome, zona destinazione, ecc..)
    Tabella CONSEGNE    (id, codice, destinatario, zona destinazione, peso, ingombro, ecc..)
    Tabella TURNI        (id, codice, dalladataora, alladataora, annotazioni, ecc..)
    Tabella ATTIVITA    (id, codice, operatore.id, consegne.id, consegne.zona_destinazione, turni.id, annotazioni, ecc..)

    Dove in ATTIVITA vai a mettere le operazioni da realizzare e quindi tante righe quante sono le consegne da effettuare
    Ogni riga avra' l'indicazione del COSA (la Consegna) del CHI (l'Operatore) e del QUANDO (il Turno)
    Filtrando ed ordinando come desideri la tabella Attivita', tiri fuori le indicazioni che ti servono 
    Se una consegna di oggi, del turno140 ritorna perche' Operatore15 non ce l'ha fatta, allora quando rientra in sede la scansione della consegna la rimettera' in automatico in Attivita' per il turno successivo di domani, con l'operatore desiderato (che probabilmente sara' lo stesso, ma potrebbe non esserlo)
    Quindi la sostanza sta nella singola tabella Attivita, che va movimentata con tutte le accortezze del caso, ma e' tutto li
    Compreso lo storico perche' se filtri per consegna ti vien fuori tutte le righe nelle quali la consergna e' stata tentata piu' il tentativo di oggi se l'operatore e' ancora fuori

    E ciao

  • Re: Problema ultimo record sottomaschera

    Devi andare su un sito di condivisione dati, tipo Filetransfer, caricato il file copi il link e lo incolli nel post di IProgrammatori.

Devi accedere o registrarti per scrivere nel forum
21 risposte