Tabella che fa riferimento a se stessa

di il
16 risposte

Tabella che fa riferimento a se stessa

Buongiorno,
Ciò che vorrei poter fare e di associare un DDT ad un altro DDT al fine di tener traccia di come la merce si è spostata.
Ho una tabella DDT: chiave primaria e poi tutti i campi in essa presenti.
La tabella DDT è in relazione molti a molti con tabella Ordini
Progetti è in relazione uno a molti con Ordini

Ad esempio prendo 4 DDT: A, B, C, D.
A = ddt origine quindi non lo associo a nulla
B = viene associato ad A
C= a B
D= a C

Ho creato un'ulteriore tabella [DDT_Associati].
[DDT]![ID_DDT] uno a molti [DDT_Associati]![DDT Madre]
DDT Madre non è chiave primaria.

Ho inserito DDT Associati come sottomaschera in DDT. A questo punto aggiungendo i DDT figli nella sottomaschera riesco inserire e visulizzare (nella sottomaschera) esattamente ciò che mi serve.

Il problema nasce qui:

ES.
DDT Associati
DDT Madre ------- DDT Figlio
50 ------- 80
54 ------- 65

I numeri qui sopra sono le chiavi primarie della tabella DDT.
Qui sotto associo un campo a caso

50 = Blu
54 = rosso
80 = verde
65 = giallo


Faccio la query per vedere il ddt madre a che ddt figlio è associato e vedo questo

blu blu
rosso rosso


Non capisco dove sbaglio

16 Risposte

  • Re: Tabella che fa riferimento a se stessa

    Ma perché tutti questi DDT associati uno all'altro? Onestamente la trovo una cosa molto strana, fuori dallo standard di un gestionale.
    Sei sicuro che sia la strada giusta? Per fare cosa?
    Spiega più dettagliatamente il motivo di questa impostazione.
  • Re: Tabella che fa riferimento a se stessa

    Principalmente per tener traccia della movimentazione della merce.
    Allo stato attuale riesco a capire dato un progetto quali sono tutti gli ordini a esso associati e di conseguenza capisco anche i vari DDT associati.
    A questo punto filtro tutto entro una certa data e ottengo certi DDT.
    Faccio due esempi.
    PRIMO: in data X ricevo il DDT 736 per 6 pezzi. In data Y (con Y>X) faccio un reso per 1 pezzo con DDT 21. Allo stato attuale so l'ordine di riferimento ma non so che componente ricevuto ho mandato indietro (lo saprei se collegassi i DDT).

    SECONDO: in data X ricevo il DDT 736 per 6 pezzi. In data Y (con Y>X) faccio un reso per 1 pezzo con DDT 21. ....... i 5 pezzi che ho tenuto li spedisco all'azienda TUVE con due DDT differenti, DDT 15 per 4 pezzi e DDT 18 per 1 pezzo......vado avanti finchè non consegno al cliente i suoi pezzi.

    Il sistema così come l'ho fatto funziona à metà, il problema è nel momento che faccio la query ottengo si quello che voglio ma solo come ID del DDT....e per me l'ID è un numero senza valore.
  • Re: Tabella che fa riferimento a se stessa

    Ipotiziamo una Tabella di definizione Gerarchica, nella quale definisci se un DDT ha un Figlio e Quale.

    TbAssociazioneDDT
    
    DDT_Padre
    DDT_Figlio
    Questa Tabella avrà lato [DDT_Padre] una relazione 1-M con la Tabella DDT... ma anche lato [DDT_Figlio] una relazione identica con una SelfReference Table, quella dei DDT.

    Questo sistema consente una gestione Gerarchica MULTILIVELLO, è flessibile e funzionale, ma... non consente di estrarre Query con la Distinta dei DDT e dei figli in cascata gerarchica se non con del codice... cosa che tu non usi, motivo per cui puoi solo Fermarti al 1° livello di gerarchia...

    Di solito quindi si gestisce a Livelli l'esplosione, come per la visualizzazione in un TreeView... se invece devi visualizzare o produrre report allora via CODICE si scrive una Funzione RICORSIVA che è in grado di scendere di Livello ogno volta che trova un FIGLIO che a sua volta ha figli...
  • Re: Tabella che fa riferimento a se stessa

    Ho pensato una soluzione ma so come dare il comando al sistema lol.

    Usando la tabella [DDT] ho creato una query Elenco DDT:
    SELECT [DDT]![ID_DDT] & " N^ " & [DDT]![N DDT] & " _ " & [DDT]![InviatoRicevuto] & " _ " & [Azienda]![Azienda] AS Espr1, DDT.Data, DDT.ID_DDT
    FROM Azienda INNER JOIN DDT ON Azienda.ID_Azienda = DDT.ID_Azienda
    ORDER BY DDT.Data;

    Nella tabella [DDT_Associati] ho creato un altro campo DDT PROVA (--> nome dato a caso).

    Nella sottomaschera in cui associo i DDT ho aggiunto DDT PROVA.


    Quello che vorrei è questo:
    Dopo aver associato il DDT a DDT nel campo DDT Associati --->SELECT DDT.ID_DDT, [DDT]![N DDT] & " " & [Azienda]![Azienda] AS Espr1, DDT.Data, DDT.InviatoRicevuto
    FROM Ordini INNER JOIN ((Azienda INNER JOIN DDT ON Azienda.ID_Azienda = DDT.ID_Azienda) INNER JOIN Ordini_DDT_Fatture ON DDT.ID_DDT = Ordini_DDT_Fatture.ID_DDT) ON (Azienda.ID_Azienda = Ordini.ID_Azienda) AND (Ordini.ID_Ordini = Ordini_DDT_Fatture.ID_Ordini)
    WHERE (((DDT.Data)<=[Maschere]![D_DDT]![Data]) AND ((DDT.InviatoRicevuto)=IIf([Maschere]![D_DDT]![InviatoRicevuto]="Ricevuto","Inviato","Ricevuto")));

    su evento aggiornamento di DDT Associati, in DDT di prova vorrei trovare in automatico quello scritto evidenziato in verde filtrato secondo la parte gialla.

    Spero si capisca che intendo :/
  • Re: Tabella che fa riferimento a se stessa

    @Alex ha scritto:


    Ipotiziamo una Tabella di definizione Gerarchica, nella quale definisci se un DDT ha un Figlio e Quale.

    TbAssociazioneDDT
    
    DDT_Padre
    DDT_Figlio
    Questa Tabella avrà lato [DDT_Padre] una relazione 1-M con la Tabella DDT... ma anche lato [DDT_Figlio] una relazione identica con una SelfReference Table, quella dei DDT.

    Questo sistema consente una gestione Gerarchica MULTILIVELLO, è flessibile e funzionale, ma... non consente di estrarre Query con la Distinta dei DDT e dei figli in cascata gerarchica se non con del codice... cosa che tu non usi, motivo per cui puoi solo Fermarti al 1° livello di gerarchia...

    Di solito quindi si gestisce a Livelli l'esplosione, come per la visualizzazione in un TreeView... se invece devi visualizzare o produrre report allora via CODICE si scrive una Funzione RICORSIVA che è in grado di scendere di Livello ogno volta che trova un FIGLIO che a sua volta ha figli...
    Ti ringrazio per la spiegazione. Non uso codice non perchè non voglia ma perchè non lo conosco piano piano lo sto imparando ma non sarà sicuramente una cosa breve. "programmo" da 2 settimane.

    Perdona le domande forse stupide ma ho bisogno di qualche delucidazione.
    - Allo stato attuale la tabella [DDT] ha la chiave primaria su ID_DDT. La tabella DDT_Associati (quella che tu chiami TbAssociazioneDDT)ha due campi, DDT_Padre e DDT_Figlio. Nessuno di questi due campi è chiave primaria. Intendi cosi ?
    - La relazione uno a molti, l'ho fatta, ma [DDT]![ID_DDT] 1 A molti [DDT_Associati]![DDT_Padre]. Se non è così l'unica cosa che mi viene in mente è di mettere PK DDT padre e togliere la PK da ID_DDT ma a questo punto ci capisco poco.
    - potresti dirmi come fare la self reference table su DDT_Figlio?

    Grazie
  • Re: Tabella che fa riferimento a se stessa

    In realtà quei 2 Campi(Padre e Figlio) DEVONO ESSERE la PK della Tabella DDT... che saranno PK solo INSIEME nella Tabella Associazione, come sai le PK possono essere MULTICAMPO... questo è un caso.
    Il Self_Reference si ottiene collegando la PK della Tabella DDT contemporaneamente ai 2 Campi, ma per farlo si aggiunge una copia della Tabella DDT nel diagramma EPR come se fosse una nuova tabella...

    Senza Codice non farai NULLA in ogni caso.
  • Re: Tabella che fa riferimento a se stessa

    @Alex ha scritto:


    In realtà quei 2 Campi(Padre e Figlio) DEVONO ESSERE la PK della Tabella DDT... che saranno PK solo INSIEME nella Tabella Associazione, come sai le PK possono essere MULTICAMPO... questo è un caso.
    Il Self_Reference si ottiene collegando la PK della Tabella DDT contemporaneamente ai 2 Campi, ma per farlo si aggiunge una copia della Tabella DDT nel diagramma EPR come se fosse una nuova tabella...

    Senza Codice non farai NULLA in ogni caso.
    Ti ringrazio, cercherò di provare quello che hai detto
  • Re: Tabella che fa riferimento a se stessa

    @Alex ha scritto:


    In realtà quei 2 Campi(Padre e Figlio) DEVONO ESSERE la PK della Tabella DDT... che saranno PK solo INSIEME nella Tabella Associazione, come sai le PK possono essere MULTICAMPO... questo è un caso.
    Il Self_Reference si ottiene collegando la PK della Tabella DDT contemporaneamente ai 2 Campi, ma per farlo si aggiunge una copia della Tabella DDT nel diagramma EPR come se fosse una nuova tabella...

    Senza Codice non farai NULLA in ogni caso.
    Aimè confermo che è la cosa che avevo già fatto questa mattina. Mi consolo che senza saperne un'h ho fatto la cosa giusta all'inizio, aimè allora il fatto che la query non mi dia quello che voglia dipende che manca il codice

    Grazie comunque per l'aiuto
  • Re: Tabella che fa riferimento a se stessa

    Forse il problema sarà banale ma non esco.
    Devo fare un treeview. Ho Access 2016.
    Vedendo svariati video su YouTube, documenti etc, per ottenere il controllo treeview devo andare in ControlliActiveX e selezionare MICROSOFT TREEVIEW CONTRO, VERSION xxxx

    Per caso è CTREEVIEW CONTROL ?

    Grazie
  • Re: Tabella che fa riferimento a se stessa

    Scusa facci capire... hai già risolto come fare una funzione ricorsiva sul livello gerarchico... che pensi al TreeView..?

    Si è quello...
  • Re: Tabella che fa riferimento a se stessa

    @Alex ha scritto:


    Scusa facci capire... hai già risolto come fare una funzione ricorsiva sul livello gerarchico... che pensi al TreeView..?

    Si è quello...
    Ho fatto qualcosa ma non è ancora funzionante.
    Chiedo un suggerimento perchè non vorrei intraprendere una strada che poi risulta essere un vicolo cieco.

    ADESSO ho 3 tabelle: Ordini, Fatture, DDT
    - Ordini è 1 a N con Fatture. In fatture quindi c'è ID_Ordini
    - Ordini è N a N con DDT --> c'è quindi una tabella di mezzo Ordini_DDT
    - DDT è poi relazionata con se stessa

    Per ora tutto funziona. Il problema nasce qui.
    Nel momento che ho una nuova fattura e voglio associarci i relativi DDT non so bene come fare.
    Se nella maschera Fatture inserisco la sottomaschera Ordini_DDT posso senza problema vedere tutti i possibili DDT associabili a tale fattura in quanto filtro la lista di Ordini_DDT per il campo ID_Ordini presente in fattura. Questo funziona ma non me ne faccio nulla.

    Avevo pensato di creare in DDT un campo ID_Fattura in modo da fare una relazione 1 a N tra Fattura e DDT ma nel momento che inserisco in fattura la sottomaschera_DDT tale sottomaschera è non cliccabile, penso che sia proprio il sistema che non permette questa possibilità anche perchè i vari allowedits, allowadditions etc etc sono settati correttamente.

    Ciò che ho pensato quindi è di aggiungere un campo ID_Fattura nella tabella Ordini_DDT (ora avrà quindi 3 campi, ID_DDT, ID_Ordini, ID_Fattura) in questo modo dovrei riuscire a risolvere.
    Il dubbio che mi viene è il seguente: in questo modo anche Ordini e Fatture saranno in relazione N a N. Il mio sistema per come è pensato implica che una fattura possa essere SEMPRE e solo associata ad UNO e UNO solo ordine. Così però non sarebbe. Secondo così risulterebbe che un DDT può virtualmente essere associato a più fatture, cosa non realistica.

    Avete qualche altra idea?

    EDIT: come non detto. Nel momento che ho un ordine ma non ho DDT da associare non posso registrare il record
  • Re: Tabella che fa riferimento a se stessa

    luca3.34 ha scritto:


    ADESSO ho 3 tabelle: Ordini, Fatture, DDT
    - Ordini è 1 a N con Fatture. In fatture quindi c'è ID_Ordini
    - Ordini è N a N con DDT --> c'è quindi una tabella di mezzo Ordini_DDT
    - DDT è poi relazionata con se stessa
    Avevo già espresso le mie perplessità, e le tue giustificazioni non mi hanno per nulla convinto. Anzi!

    L'impostazione che hai mostrato, mi da ragione.
    Le relazioni sopra descritte sono tutte sbagliate.
    Così come lo è la tua logica di business.

    Ma è difficile spiegare com progettare un gestionale, se non si conosce la teoria su come esso funziona.
  • Re: Tabella che fa riferimento a se stessa

    gibra ha scritto:


    luca3.34 ha scritto:


    ADESSO ho 3 tabelle: Ordini, Fatture, DDT
    - Ordini è 1 a N con Fatture. In fatture quindi c'è ID_Ordini
    - Ordini è N a N con DDT --> c'è quindi una tabella di mezzo Ordini_DDT
    - DDT è poi relazionata con se stessa
    Avevo già espresso le mie perplessità, e le tue giustificazioni non mi hanno per nulla convinto. Anzi!

    L'impostazione che hai mostrato, mi da ragione.
    Le relazioni sopra descritte sono tutte sbagliate.
    Così come lo è la tua logica di business.

    Ma è difficile spiegare com progettare un gestionale, se non si conosce la teoria su come esso funziona.
    La mia logica di business sbagliata? In che senso?
  • Re: Tabella che fa riferimento a se stessa

    luca3.34 ha scritto:


    La mia logica di business sbagliata? In che senso?
    Scusami, ma non è un argomento così banale da essere affrontato su un forum.
    Occorrono idee molto chiare in proposito.

    Ti consiglierei di documentarti sull'argomento, ma onestamente non so se queste cose si possano imparare sul web.
    Io le ho apprese a forza di lavorare presso le aziende, studiandomi i loro gestionali per sviluppare funzionalità 'ad hoc' aggiuntive.
Devi accedere o registrarti per scrivere nel forum
16 risposte