Newsgroup: it.comp.lang.vo-clipper
Titolo: vo relazioni

Quando genero una fattura con intestazione e righe relaziono gli archivi con
un numero automatico (data+numeroregistrazione) che mi permette di gestire
senza problemi la relazione padre e figlio.
Stamattina, per curiosità, ho provato a fare una cosa che non avevo mai
fatto, creare un indice composto da due campi di tipo diverso. Non mi è
riuscito!
Secondo voi è  possibile costruire un indice di questo tipo:
Dtos(dataFattura)+ numeroFattura dove  "dataFattura" è un campo data e
"numeroFattura" è un campo stringa
Se si come devo indicare al dbserver tale indice?
Se si come faccio a mettere in relazione l'archivio delle righe delle
fatture ordinato per Dtos(data)+ numeroFattura
Ciao e grazie a tutti.
Roberto

 ha scritto nel messaggio
news:basq06$33m9q$1...@ID-101553.news.dfncis.de...


Io utilizzo da sempre indici composti e non ho nessun problema, anche se gli
indici misti con date sono un po' ostici.
Che metodo utilizzi per la creazione degli indici?
Usi i db server di vo o li crei tu "al volo"?
Non capisco, però, la necessità di relazionare con due campi, non ti basta
il numero fattura? dovrebbe essere univoco in teoria, quindi perchè anche la
data?
Ciao.
                                    Francesco Leo

Quale driver utilizzi? 
Io normalemente uso i CDX e relaziono gli archivi testata+dettagli
utilizzando un
campo progressivo indipendente dal numero della fattura.
Faccio cosi' perche' mantengo sugli stessi DBF i documenti degli anni 
precedenti (visto che la numerazione dei documenti ricomincia ogni
anno).
In aggiunta al campo progressivo, per le ricerche e i filtri uso
chiavi del tipo
DTOS(DATAFATTURA)+STR(NUMEROFATTURA,xx) (se NUMEROFATTURA e'
numerico altrimenti DTOS(DATAFATTURA)+NUMEROFATTURA) senza
problemi.
ciao
Antonello


===============================================
Antonello Negrone - Biella - Italy
anto...@anc-software.it
www.anc-software.it

 data?
E' univoco solo all'interno di un singolo anno. Forse è meglio definire
un apposito codice univoco.
EMG
--
EMAG Software Homepage:     
http://www.emagsoftware.it
The EMG's ZX-Spectrum Page: 
http://www.emagsoftware.it/spectrum
The Best of Spectrum Games: 
http://www.emagsoftware.it/tbosg


Giusto, ma io non inserisco mai delle fatture di anni diversi nello stesso
archivio, ne creo sempre uno per ogni anno, lo trovo più pratico, ecco
perchè non capivo...
Cmq grazie della spiegazione :-))
                                                    Francesco Leo

 perchè non capivo...
Lo trovi più pratico anche in caso di riepiloghi e statistiche che
interessano più anni insieme? Direi che, in generale, è invece *molto*
più pratico e meno problematico avere tutti i dati in un unico archivio.


 ha scritto nel messaggio
news:basq06$33m9q$1...@ID-101553.news.dfncis.de...



...
Anche io creo statistiche e riepiloghi che interessano più anni insieme,
forse scriverò un paio di righe di codice in più............mea culpa!
                                    Francesco Leo

 Il problema nasce qui, nella creazione della relazione, io l'ho scritta
cosě


 ha scritto nel messaggio
news:bav21i$403d6$1...@ID-101553.news.dfncis.de...


Io ho fatto delle prove e funziona perfettamente, solo che non utilizzo i
dbserver e gli indici di Vo ma li creo al volo. Se ti puň essere di aiuto ho
fatto cosě:
oS_Server := DBServer{"Prova"}
oS_Server:CreateOrder("Mio" , "Prova.Cdx" , "DtoS(Data) + Str(Prog)")
Questo per tutti e due gli archivi che ho collegato.
Dopo di che nella finestra ho messo in relazione
FinMadre:Server:SetSelectiveRelation(FinFiglia:Server , "DtoS(Data) +
Str(Prog)" )
Ho usato l'str perchč il campo Prog č numerico (e non apriamo un'altra
sterile discussione su questo!)
Forse tu non passi gli indici come stringa?
Ciao.
                                            Francesco

 ha scritto nel messaggio
news:bavfmq$1rm$1...@fata.cs.interbusiness.it...


 forse scriverò un paio di righe di codice in più............mea culpa!
Uhm... esaminando la cosa dal livello più generale possibile, il
semplice scorrimento dei record che, nel caso di archivio unico, può
essere fatto in questo modo
WHILE !EOF()
    ...
    SKIP
ENDDO
avrà invece bisogno di un po' più di due righe se i dati sono suddivisi
in archivi diversi. E se volessi qualche tipo di ordinamento complessivo
non potrò utilizzare un indice ma dovrò per forza passare per un
archivio temporaneo. Dico bene?



.......
Se devo esaminare dei dati io uso sempre, per abitudine,
archivi temporanei, quindi se devo conglobare più anni mi è sufficiente
copiare,
prima di effettuare la scansione del dbf, i dati necessari.
Se devo, per esempio esaminare datidel 2001 e 2002, mi basta fare:
oS_Archivi:CopyDB("Temp" , , {||_FIELD->ANNO=2001 .or. _FIELD->ANNO=2002} )
Poichè i dati vengono archiviati in un unico file contraddistinti per anno.
Magari saranno 3 righe in tutto, considerando apertura e chiusura, ma anche
se fossero 10 non
credo che creino un grosso problema al programmatore, se questi ha deciso di
adottare una
soluzione alternativa allo "standard". Magari poi sono io che sbaglio, ma mi
trovo bene così!
                                            Saluti.
                                                        Francesco

 archivi temporanei,
Lo immaginavo. Altrimenti non avresti detto che erano due righe in più.
Certo, se usi sempre file temporanei (e la scelta è in parte
condivisibile) allora chiaramente poco importa se i dati sono su un
unico archivo o su più archivi, uno per anno.
Io invece uso anche in Clipper un po' il concetto relazionale del
dataset, con gli indici al posto delle query, ma capita a volte anche a
me di utilizzare tabelle temporanee. Quello che preferisco evitare è
sicuramente di creare tante tabelle diverse con la stessa informazione
(come ad esempio, appunto, una tabella di fatture per ogni anno).


Ciao a tutti,
io uso con grande soddisfazione
Str(Year(dDataFatt),4)+cNumFatt
In questo modo posso ordinare in maniera progressiva le fatture di uno
stesso anno.
Buon lavoro
Biagio