Copia campo da record precedente

di il
13 risposte

Copia campo da record precedente

Ciao a tutti,
vi stresso per un suggerimento, ho letto e provato ad applicare senza successo articoli sull'argomento.
Nel db ho la tabella tblAct che contine i campi:
' IDAct(cont)  ActOrd (integer) ActNr (testo) ActName(Testo)
'  1              10             1          fase 1
'  2              20             2          fase 2
'  3              30             3          fase 3
Il campo ActOrd serve in una mscher continua per poter riordinare le fasi secondo la logica del campo [ActNr], il quale, essendo in formato testo per permettere l'aggiunta successiva di eventuali sottofasi, manderebbe a pallino il riordino logico se venisse utilizato per questo scopo.
L'utente quindi, nel caso dovesse inserire successivamente la sottoattività 1.1 provvede ad assegnare il valore 11 al relativo campo [ActOrd] e, dopo il refresh della maschera ottiene la corretta sequenza logica delle attività.
' IDAct  ActOrd  ActNr  ActName
'  1       10     1     fase 1
'  4       11     1.1     subfase1.1
'  2       20     2     fase 2
'  3       30     3     fase 3
Ora, vorrei poter realizzare tramite una coppia di pulsanti, la possibilità di comporre automaticamente il valore del campo [ActNr], prendendo la radice dal record "logico" precedente. Nell'esempio precedente,premendo il pulsante di rientro il codice dovrebbe leggere "1" dal campo [ActNr] del record precedente e aggiungere ".1". Nel caso di più sottoattività allo stesso livello (es. 1.2) non saprei come risalire all'attività padre, senza perdere di vista le sottoattività precedenti (1.1 in questo caso). Inoltre la procedura dovrebbe poter lavorare anche al contrario, trasformando una sottoattività in una attività (e questo necessiterebbe di rinominare tutte le attività successive. Considerando che possono esistere più livelli di sottoattività , ho il dubbio che sia effettivamente realizzabile e che lo sforzo valga il risultato. Nel caso abbiate suggerimenti sulla logica da utilizzare vi ringrazio.
ciao

13 Risposte

  • Re: Copia campo da record precedente

    Quello che chiedi non serve a nulla.

    Spiegami perchè l'ordinamento andrebbe a pallino usando solo il campo [ActNr] che è di tipo TESTO se lo RIEMPI esattamente come hai descritto...!

    Ti rispondo io, l'ordinamento del campo [ActNr] usando la sintassi che hai descritto, non viene assolutamente sconvolto.
    Prova a mettere in ORDINE questo
    
    1
    1.1
    2
    2.2.1
    3
    I campi TESTO sono ORDINATI a partire da SX... quindi vedi tu...
    Saluti
  • Re: Copia campo da record precedente

    @Alex ha scritto:


    Quello che chiedi non serve a nulla.

    Spiegami perchè l'ordinamento andrebbe a pallino usando solo il campo [ActNr] che è di tipo TESTO se lo RIEMPI esattamente come hai descritto...!

    Ti rispondo io, l'ordinamento del campo [ActNr] usando la sintassi che hai descritto, non viene assolutamente sconvolto.
    Prova a mettere in ORDINE questo
    
    1
    1.1
    2
    2.2.1
    3
    I campi TESTO sono ORDINATI a partire da SX... quindi vedi tu...
    Saluti
    Grazie Alex per la tua rapida risposta, ma credo che questa volta tu abbia preso un granchio!
    quello che dici tu funziona solo finchè non si oltrepassa il numero dieci, essendo un campo testo i caratteri vengono considerati singolarmente...prova ad ordinare questa serie :
    '1
    '1.1
    '1.1.1
    '2
    '2.1
    '3
    '10
    '11
    '11.1
    ..Dovresti ottenere questo risultato o sbaglio?
    '1
    '1.1
    '1.1.1
    '10
    '11
    '11.1
    '2
    '2.1
    '3
    Ho provato con diverse funzioni, es. estraendo solo i numeri,o convertendo in altri formati, ma l'unica è il campo numerico di appoggio..poi sicuramente ci saranno altre soluzioni più eleganti, ma io non ci sono arrivato.
    Grazie per ogni eventuale suggerimento, e per il costante supporto .
    Saluti,
  • Re: Copia campo da record precedente

    Io avrei una proposta oscena:
    Per caso avresti un limite teorico/pratico in cui potrebbe terminare la serie di puntini? Oppure si va all'infinito?
    Noto che il campo ActOrd va di 10 in 10, sicchè mi pare che tanto lontano non si può andare.
    Io immagino un limite massimo di 10 sezioni (quindi 9 puntini). Io imposterei 10 campi numerici, con valore 0 di default e compilabili a scalare. Poi imposti un Ordinamento Crescente sui 10 campi e l'ordinamento richiesto viene rispettato.
  • Re: Copia campo da record precedente

    Grazie Osvaldo per la tua proposta oscena .
    Il campo ActOrd si autocompila di 10 alla volta per permettere un eventuale futuro inserimento di sottoattività nn considerate originariamente. Attualmente l'ordinamento funziona benisimo così, l'utente on deve fare molto se non abbisogna di molte aggiunte successive. Non ho però capito se la tua soluzione è per migliorare l'ordinamento o per risolvere il problema esposto all'inizio del tread.
    Grazie
    ciao
  • Re: Copia campo da record precedente

    hangart ha scritto:


    .....
    Grazie Alex per la tua rapida risposta, ma credo che questa volta tu abbia preso un granchio! ...
    Premesso che potrebbe anche essere un mio errore..., non è questo il caso, anche se hai ragione.
    Mi spiego, siccome hai dato spaziatura 10, ho erroneamente legato al Numero delle SOTTOFASI il numero delle FASI, quindi ho pensato non superassi il 99.

    Detto questo, prima di proseguire, vorrei capire meglio la questione sottofasi.
    Ci sono 2 metodi per definire una GERARCHIA, e quello che fai tu è relativamente corretto.
    Di norma si ORDINA per elemento GERARCHICO non per un progressivo.
    In sostanza ci dovrebbe essere un LEGAME GERARCHICO tra PADRE e FIGLIO, e ci sono solo 2 metodi per farlo.
    1) Gestione GERARCHICA REALE ma nel tuo caso serve una Tabella in più
    2) Gestione GERARCHICA per CODICE, quella che fai tu definendo la gerarchia come 1.1ecc...
    La 2° è più semplice ma meno funzionale

    Il Concetto di base è che nel tuo caso vuoi mantenere oltre ad una rappresentazione GERARCHICA, anche un'ordinamento che coincide con quello GERARCHICO.
    Di norma il CAMPO gerarchico [ActNr] nel tuo caso, visto che ha solo 2 LIVELLI si scompone in 2 SOTTOCAMPI, si applica il VAL(Campo1°PARTE) e VAL(Campo2°Parte) e si ottiene l'ordinamento.

    Questo è quello che si può fare, altrimenti devi considerare come CAMPO GERARCHICO il campo NUMERICO, ma la sua composizione deve essere fatta con un'algoritmo adeguato.

    Personalmente non userei MAI 2 CAMPI indipendenti ma sincronizzati è una cosa inutile.
  • Re: Copia campo da record precedente

    hangart ha scritto:


    Non ho però capito se la tua soluzione è per migliorare l'ordinamento o per risolvere il problema esposto all'inizio del tread.
    La mia è una delle tante risposte alla tua domanda. In fin dei conti risolve.
    L'oscenità consiste nel fatto di dover vedere scomposto un campo in 10 parti. Io ho previsto 10 parti, ma se ti sembrano troppe, puoi decidere tu quante massimo devono essere (io ipotizzo 5-6).
  • Re: Copia campo da record precedente

    Che risolva, credo di si... ma a mio avviso non serve a nulla tutto questo in genere.

    L'errore è concettuale in quanto è stato usato un METODO ERRATO.

    Quando si usa l'aggregazione di CODICI per generare GERARCHIA... lo si deve usare nel modo corretto... e questo è sbagliato
    
    1.1
    1.10
    Perchè è sbagliato... perchè si ragiona pensando che i codici numerici siano tali...!

    Il modo giusto per evitare inutili "pippe" è di gestire la struttura gerarchica come si deve ed è il motivo per il quale l'utente ha sottovalutato la mia risposta pensando avessi sbagliato.
    Definiti i RANGE di flessibilità si deve gestire così:
    
    1) Ipotizzando solo 2 LIVELLI GERARCHICI
    2) Ipotizzando N°Fasi Principali>99 e <999 servono 3 Numeri
    3) Ipotizzando N°SottoFasi >9 e <99 Servono 2 Numeri
    La Struttura GERARCHICA deve essere gestita così:
    
    000.00
    Ovviamente questa è l'equivalente INPUTMASK, per far comprendere la struttura.
    Intendo a CARATTERI FISSI, quindi non si sopprime lo ZERO in quanto non sono NUMERI ma è un CODICE ALFANUMERICO.

    In questo modo i codici verrebbero
    
    001.01
    010.09
    029.03
    e, come dicevo dall'inizio non serve inventarsi nulla.
  • Re: Copia campo da record precedente

    Grazie Alex ed Osvaldo per le vostre risposte,
    Per quanto riguarda la soluzione "pulita" proposta da Alex, credimi, l'avevo utilizzata in una delle prime versioni dell'applicativo, ma aveva alcuni limiti, ritenuti inaccettabili all'epoca ( a volte la "purezza" viene meno se è necessaria la flessibilità):
    - primo tra tutti i livelli gerachici: abbiamo progetti con molti livelli di sottoattività ( anche 6) e progetti con al massimo un solo livello gerarchico.-> Potremmo limitare i livelli ma non so se è accettabile.
    -forzando l'utente ad inserire un formato predefinito (con più livelli gerarchici) costringeva lo stesso a digitare un sacco di caratteri "inutili" nei livelli di gerachia superiori.-> Forse si potrebbe gestire con un completamento automatico ad hoc ?

    E' proprio per questo ultimo motivo che ho posto la domanda iniziale (sicuramente espressa male ) : ereditando il valore del record precedente posso pensare di autocomporre il valore del nuovo record e tramite pulsante farlo rientrare di uno o più livelli gerarchici ( questo porrebbe poi il problema di rinominare eventuali livelli e sottolivelli).
    Sto cercando di arrivarci un passo alla volta..grazie per i vostri consigli.
    Ciao
  • Re: Copia campo da record precedente

    Forse io continuo a non capire, ma se hai la possibilità di avere una GESTIONE GERARCHICA MULTILIVELLO, questa non è la strada.

    La gestione MULTILIVELLO si fa così:
    Tabella Articoli:
    
    IdArticolo
    Descrizione
    ....
    Tabella Gerarchica
    
    IdArticolo
    IdPadre(ovviamente in AUTOREFERENZA)
    dettagli...
    Questo innesca una gestione RICORSIVA semplice delle gerarchie, lasciando libero un LIVELLO INFINITO di profondità.
    L'esempio è stupido, ma lo banalizzo ancora di più spostandomi al GASTRONOMICO.

    Se ipotizzo una Tabella INGREDIENTI, posso avere 3 tipi di Elementi in Tabella:
    1° Ingredienti PRIMI(Mela, Farina, Uova...)
    2° Ingredienti SEMILAVORATI(Pasta Fresca, Pasta Frolla, Crema Pasticcera...)
    3° INgredienti FINITI(Torta di MELE)

    Io li metto tutti nella stessa Tabella..., è ovvio che la TORTA di MELE, sarà una sorta di CATALOGO o RICETTA che contiene sottoElementi in GERARCHIA... ad esempio la pasta frolla(che è a sua volta un Elemento composto definito SEMILAVORATO ha una sua ricetta).

    Questo esempio BANALE ha come minimo 4 LIVELLI GERARCHICI... ed il massimo di gestibilità definita dai sacri testi si ottiene proprio evitando la costruzione di un CODICE per aggregazione ma definando il rapporto GERARCHICO PADRE-FIGLIO.
    Di questo modo di gestione, ho fatto un demo tanto STUPIDO quanto strutturalmente serio di RICETTE

    Poi se tu vuoi fare in altro modo ... è giusto tu lo faccia.

    Se ho capito male probabilmente non ti seguo.
  • Re: Copia campo da record precedente

    Di nuovo grazie Alex per la tua spiegazione, porta pazienza ma sono un po' lento a comprendere...
    Il tuo esempio di struttura gerachica mi è chiaro e mi piace, ma ancora non arrivo a capire come organizzare il riordino delle attività e sottoattività.. mi spiego:
    le sottoattività possono essere create anche successivamente alla prima compilazione del piano. Esempio:
    'ID Task   ParentTasK
    ' 1  1.0
    ' 2  1.1     1.0
    ' 3  1.2     1.0
    ' 4  2.0
    ' 5  3.0
    se successivamente volessi inserire una sottoattività di 1.1 prederebbe questo ordinamento :
    'ID Task   ParentTasK
    ' 1  1.0
    ' 2  1.1     1.0
    ' 3  1.2     1.0
    ' 4  2.0
    ' 5  3.0
    ' 6  1.1.1   1.1
    Senza l'utilizzo di un campo d'appoggio numerico, non vedo come poter riordinare correttamente il tutto.. Mi spiace farvi perdere tempo ma non sono un esperto.
    Grazie
  • Re: Copia campo da record precedente

    Credo tu non abbia compreso fino in fondo... gli esempi che fai con il codice aggregato lo evidenziano.
    Ogni task ha un suo id,nel tuo caso non counter ma potrebbe essere numerico.
    Avrai:
    
    Idtask  idpadre desk
    1       null    Primo task
    2       null    secono
    3       1         Primo sottotask di [1]
    4       1         secondo sottotask [1]
    L`ordinamento deve essere strutturato per livello gerarchico.
    Ovviamente se un task puo appartenere o essere sottotask di piu' task questa struttura nn va bene.
    Dal link del mio ricettario trovi struttura e codice ricorsivo per la gestione della gerarchia.
  • Re: Copia campo da record precedente

    Ciao Alex,
    grazie ancora per il supporto, vedrai che prima o poi ci arrivo! .
    Puoi cortemne ostare il link al tuo ricettario ? Ho provato ad installare quello del tuo sito ma non mi funziona correttamente..grazie
    ciao
  • Re: Copia campo da record precedente

    Il LINK è questo:

    essendo un sito MIRROR, devi scaricare il file assegnando l'estensione ZIP, poi scompattalo ecc...

    Per sproteggerlo se non ricordo male dal MENU' la PWD è ="sitocomune"... si chiude tutto, alla riapertura è OPEN.

    Ciao
Devi accedere o registrarti per scrivere nel forum
13 risposte