Un loop da mal di testa!
Moderatore: Moderatori
-
- Messaggi: 5
- Iscritto il: giovedì 13 maggio 2004, 2:00
- Località: Milano
- Contatta:
Un loop da mal di testa!
Salve
ho un problema con uno script che include un loop (credo!).
Nell'archivio A ho un record relazionato con tre record dell'archivio B sulla base del campo n° "codice".
Devo creare un'istruzione che:
1 - duplichi il record in A aumentando di 1 il campo "codice"
2 - duplichi i tre record in B e valorizzi il campo "codice" in modo da ricreare la relazione.
...nn so se mi spiego!
L'istruzione 1 nn è un problema...ce l'ho già; è l'istruzione 2 che mi fa diventar matto
Chi mi aiuta??
Grazie fin d'ora.
ho un problema con uno script che include un loop (credo!).
Nell'archivio A ho un record relazionato con tre record dell'archivio B sulla base del campo n° "codice".
Devo creare un'istruzione che:
1 - duplichi il record in A aumentando di 1 il campo "codice"
2 - duplichi i tre record in B e valorizzi il campo "codice" in modo da ricreare la relazione.
...nn so se mi spiego!
L'istruzione 1 nn è un problema...ce l'ho già; è l'istruzione 2 che mi fa diventar matto
Chi mi aiuta??
Grazie fin d'ora.
-
- Messaggi: 1235
- Iscritto il: martedì 15 giugno 2004, 2:00
- Località: Cagliari
- Contatta:
Ho postato lo stesso problema qualche giorno fa.
https://www.fmpro.it/modules.php?name=Fo ... 94c59a9e5b
...senza risposta...
Cmq io ho fatto le seguenti operazioni.....non mi piace ma funziona, anche se credo che si possa ottimizzare....
Parto dal formato della tabella allenamenti
Copia[Seleziona; Tabella_Allenamenti::ID_Tabella] /*Copio l'id della tabella per effettuare dopo la ricerca nel formato correlato*/
Duplica il record/richiesta/**/
Definisci il campo [Tabella_Allenamenit::ID_Tabella; Tabella_Allenamenti::ID_Tabella+1000]/*Definisco l'id della nuova tabella copia*/
Definisci il campo [Tabella_Allenamenit::Nome_Tabella; Tabella_Allenamenti::Nome_Tabella& "Copia"]/*Ne definisco il nome*/
Vai al formato ["Esercizi"(Esercizi_Tabella_Allenamenti)]/*vado nel fomato correlato*/
Passa al modo Trova[]/**/
Incolla[Seleziona; Esercizi_Tabella_Allenamenti::ID_Tabella]/*Incollo per fare la ricerca....forse si potrebbe andare ai record correlati col comando vai al record correlato....ora provo*/
Esegui la ricerca[]/**/
Definisci il campo [Tabella_Allenamenit::Conto_Trovati; Get(ContoTrovati)]/*Conto quanti record ci sono perchè mi servirà nel loop*/
Loop
Duplica il record/richiesta /*Duplico il primo campo cosi facendo in coda ai record ricercati mi fa una copia di questo primo campo*/
Vai a Record/Richiesta/Pagina[Senza Finestra; Get(NumeroRecord)-Esercizi_Tabella_Allenamenti::Conto_Trovati+1]/*Torno al secondo record tra quelli trovati*/
Exit loop If [Get(NumeroRecord)=Esercizi_Tabella_Allenamenti::Conto_Trovati+1]/*Uscirò dal loop quando andrò al primo record che ho creato con la duplicazione*/
Vai al formato ["Tabella_Allenamenti"(Tabella_Allenamenti)]/*Torno al formato di partenza*/
Spero di essere stato chiaro....fammi sapere
CIAO M
https://www.fmpro.it/modules.php?name=Fo ... 94c59a9e5b
...senza risposta...
Cmq io ho fatto le seguenti operazioni.....non mi piace ma funziona, anche se credo che si possa ottimizzare....
Parto dal formato della tabella allenamenti
Copia[Seleziona; Tabella_Allenamenti::ID_Tabella] /*Copio l'id della tabella per effettuare dopo la ricerca nel formato correlato*/
Duplica il record/richiesta/**/
Definisci il campo [Tabella_Allenamenit::ID_Tabella; Tabella_Allenamenti::ID_Tabella+1000]/*Definisco l'id della nuova tabella copia*/
Definisci il campo [Tabella_Allenamenit::Nome_Tabella; Tabella_Allenamenti::Nome_Tabella& "Copia"]/*Ne definisco il nome*/
Vai al formato ["Esercizi"(Esercizi_Tabella_Allenamenti)]/*vado nel fomato correlato*/
Passa al modo Trova[]/**/
Incolla[Seleziona; Esercizi_Tabella_Allenamenti::ID_Tabella]/*Incollo per fare la ricerca....forse si potrebbe andare ai record correlati col comando vai al record correlato....ora provo*/
Esegui la ricerca[]/**/
Definisci il campo [Tabella_Allenamenit::Conto_Trovati; Get(ContoTrovati)]/*Conto quanti record ci sono perchè mi servirà nel loop*/
Loop
Duplica il record/richiesta /*Duplico il primo campo cosi facendo in coda ai record ricercati mi fa una copia di questo primo campo*/
Vai a Record/Richiesta/Pagina[Senza Finestra; Get(NumeroRecord)-Esercizi_Tabella_Allenamenti::Conto_Trovati+1]/*Torno al secondo record tra quelli trovati*/
Exit loop If [Get(NumeroRecord)=Esercizi_Tabella_Allenamenti::Conto_Trovati+1]/*Uscirò dal loop quando andrò al primo record che ho creato con la duplicazione*/
Vai al formato ["Tabella_Allenamenti"(Tabella_Allenamenti)]/*Torno al formato di partenza*/
Spero di essere stato chiaro....fammi sapere
CIAO M
FM8.03 Adv.- FM8.5 Adv Windows XP SP2
-
- Messaggi: 5
- Iscritto il: giovedì 13 maggio 2004, 2:00
- Località: Milano
- Contatta:
Caro marianasu
8O
ti ringrazio ovviamente ... ma così mi aumenta il mal di testa...
proviamo a farla + semplice:
partiamo dall'idea che devo duplicare i 3 record nell'archivio B...
riguardo la valorizzazione del campo che crea la relazione, io ho creato lo script e funziona; solo che me lo fa solo per il primo dei 3 record.
PS mi pare che tu ragioni già in FM7...io sono ancora in 6
Ciao e grazie
8O
ti ringrazio ovviamente ... ma così mi aumenta il mal di testa...
proviamo a farla + semplice:
partiamo dall'idea che devo duplicare i 3 record nell'archivio B...
riguardo la valorizzazione del campo che crea la relazione, io ho creato lo script e funziona; solo che me lo fa solo per il primo dei 3 record.
PS mi pare che tu ragioni già in FM7...io sono ancora in 6
Ciao e grazie
-
- Messaggi: 1235
- Iscritto il: martedì 15 giugno 2004, 2:00
- Località: Cagliari
- Contatta:
OK.....capisco se ti aumenta il mal di testa.....
Io uso il 7 (e spero di migrare presto all'8) ma credo che nel mio script non ci siano cose che nel 6 non ci sono....
Cmq...non so come renderlo più semplice di così....nel senso che oltre che scriverti lo script (con tanto di commento per ogni isctruzione messo tra /**/) non so cosa altro fare....suggeriscimi tu....cosa non riesci a capire....Inoltre quando hai dei problemi non avere paura e scrivi anche i nomi dei campi e delle tabelle che devi usare....
Magari ti riscrivo lo script che ho fatto io per il tuo caso.
Quindi hai una tabelle A che si chiama come? Quali campi ha?
La tabella B come si chiama quali campi ha?
Come sono correlati cosa vuoi ottenere???
CIAO M
Altro suggerimento nella firma del forum metti che FM usi e quale sistema operativo.....agevoli chi ti deve aiutare....
Io uso il 7 (e spero di migrare presto all'8) ma credo che nel mio script non ci siano cose che nel 6 non ci sono....
Cmq...non so come renderlo più semplice di così....nel senso che oltre che scriverti lo script (con tanto di commento per ogni isctruzione messo tra /**/) non so cosa altro fare....suggeriscimi tu....cosa non riesci a capire....Inoltre quando hai dei problemi non avere paura e scrivi anche i nomi dei campi e delle tabelle che devi usare....
Magari ti riscrivo lo script che ho fatto io per il tuo caso.
Quindi hai una tabelle A che si chiama come? Quali campi ha?
La tabella B come si chiama quali campi ha?
Come sono correlati cosa vuoi ottenere???
CIAO M
Altro suggerimento nella firma del forum metti che FM usi e quale sistema operativo.....agevoli chi ti deve aiutare....
FM8.03 Adv.- FM8.5 Adv Windows XP SP2
-
- Messaggi: 5
- Iscritto il: giovedì 13 maggio 2004, 2:00
- Località: Milano
- Contatta:
Sei gentilissimo!
Mi spiego in chiaro (nessun segreto è che volevo essere semplice..)
Ho due archivi
1- RdO-Ordini d'acquisto
- ID (n°)
- data
- Fornitore
e altri...
2- Articoli acquisti (un'anagrafica prodotti)
- ID (n°)
- desc_art
- UM, prezzo ecc
Ho creato un portale nell'archivio RdO-Ordini d'acquisto (utilizzando l'ID RdO) e creato lo script per inserire i diversi articoli.
Se devo fare una RdO a diversi fornitori la procedura dovrebbe essere ( ):
- creo un record in RdO-ordine
- creo n articoli correlati
- duplico il tutto e cambio solo il fornitore.
Ci siamo?
Ho creato il meccanismo per cui quando duplico l'RdO incremento l'ID e sono riuscito anche a duplicare il primo record in Articoli acquisti e a valorizzare l'ID dell'ordine per creare la relazione ma... non riesco nel loop a farlo passare al record successivo per cui mi ritrovo
- in nuovo record RdO OK
- il nuovo Articolo OK
ma gli altri articoli me li son persi
Rigrazie
Mi spiego in chiaro (nessun segreto è che volevo essere semplice..)
Ho due archivi
1- RdO-Ordini d'acquisto
- ID (n°)
- data
- Fornitore
e altri...
2- Articoli acquisti (un'anagrafica prodotti)
- ID (n°)
- desc_art
- UM, prezzo ecc
Ho creato un portale nell'archivio RdO-Ordini d'acquisto (utilizzando l'ID RdO) e creato lo script per inserire i diversi articoli.
Se devo fare una RdO a diversi fornitori la procedura dovrebbe essere ( ):
- creo un record in RdO-ordine
- creo n articoli correlati
- duplico il tutto e cambio solo il fornitore.
Ci siamo?
Ho creato il meccanismo per cui quando duplico l'RdO incremento l'ID e sono riuscito anche a duplicare il primo record in Articoli acquisti e a valorizzare l'ID dell'ordine per creare la relazione ma... non riesco nel loop a farlo passare al record successivo per cui mi ritrovo
- in nuovo record RdO OK
- il nuovo Articolo OK
ma gli altri articoli me li son persi
Rigrazie
-
- Messaggi: 243
- Iscritto il: martedì 23 settembre 2003, 2:00
- Località: Buggiano (Pt)
- Contatta:
Per semplificare le cose mi sono fatto i file per risolvere questo problema.
Se non ho capito male abbiamo due file (in FMP 6) il primo file lo chiamo master e il secondo relazionato.
Il file master ha i campi Id_master (con l' opzione "numero di serie proposto") e testo, mentre il file relazionato ha i campi Id_relazionato, testo_relazionato e da_duplicare (che poi sarebbero nel tuo caso il file master gli RdO e il file relazionato gli articoli).
La relazione tra i due file e' dal file master con il file relazionato secondo la relazione che chiameremo (guarda un po' che fantasia che c' ho ) relazione tra id_master e id_relazionato
Bene, se le premesse sono queste basta che fai due script, uno nel file master e uno nel file relazionato, i due script sono:
per il file relazionato
Scusa Mariano se non ho risposto al tuo post, lo avevo letto, ma non avevo capito il problema e ho pensato oltretutto che fosse sempre legato al problemone della quantita' di dati che ti tocca gestire, se ti puo' essere utile comunque ti mando volentieri per e-mail i file che ho fatto ( e sempre viva le palestre )
Chiaramente Augusto, se mi fai avere l' e-mail, posso mandarli anche a te
Ciao
Se non ho capito male abbiamo due file (in FMP 6) il primo file lo chiamo master e il secondo relazionato.
Il file master ha i campi Id_master (con l' opzione "numero di serie proposto") e testo, mentre il file relazionato ha i campi Id_relazionato, testo_relazionato e da_duplicare (che poi sarebbero nel tuo caso il file master gli RdO e il file relazionato gli articoli).
La relazione tra i due file e' dal file master con il file relazionato secondo la relazione che chiameremo (guarda un po' che fantasia che c' ho ) relazione tra id_master e id_relazionato
Bene, se le premesse sono queste basta che fai due script, uno nel file master e uno nel file relazionato, i due script sono:
per il file relazionato
per il file mastervai al record/richiesta/pagina [ultimo]
loop
definisci il campo ["da_duplicare","1"]
vai al record/richiesta/pagina [esci dopo l' ultimo,precedente]
end loop
vai al record/richiesta/pagina [ultimo]
loop
if ["da_duplicare","1"]
cancella[seleziona,"da_duplicare"]
duplica il record/richiesta
incolla [seleziona,"id_relazionato"]
end if
vai al record/richiesta/pagina [esci dopo l' ultimo,precedente]
end loop
la riga dello script precedente in corsivo si riferisce chiaramente al primo script nel file relazionatoMostra tutti i record
ometti il record
mostra le omissioni
nuovo record/richiesta
copia [seleziona,"id_master"]
vai al record/richiesta/pagina [precedente]
vai al record correlato [mostra,"relazione"]
esegui lo script [sub-script,esterno:"relazionato.fp5"]
vai al record/richiesta/pagina [successivo]
vai al formato [formato originale]
Scusa Mariano se non ho risposto al tuo post, lo avevo letto, ma non avevo capito il problema e ho pensato oltretutto che fosse sempre legato al problemone della quantita' di dati che ti tocca gestire, se ti puo' essere utile comunque ti mando volentieri per e-mail i file che ho fatto ( e sempre viva le palestre )
Chiaramente Augusto, se mi fai avere l' e-mail, posso mandarli anche a te
Ciao
- PMP 8.5 Adv Win -
-
- Messaggi: 1235
- Iscritto il: martedì 15 giugno 2004, 2:00
- Località: Cagliari
- Contatta:
Grazie Superp....ho risolto il mio problemino....fortunatamente ora i dati da trattare sono pochini....(poche decine)
E con la mia soluzione funziona...
Appena ho un pò di tempo la miglioro magari guardando il tuo suggerimento....
Cmq mi puoi spedire via email il tutto?
Grazie M
E con la mia soluzione funziona...
Appena ho un pò di tempo la miglioro magari guardando il tuo suggerimento....
Cmq mi puoi spedire via email il tutto?
Grazie M
FM8.03 Adv.- FM8.5 Adv Windows XP SP2
-
- Messaggi: 243
- Iscritto il: martedì 23 settembre 2003, 2:00
- Località: Buggiano (Pt)
- Contatta:
-
- Messaggi: 5
- Iscritto il: giovedì 13 maggio 2004, 2:00
- Località: Milano
- Contatta:
-
- Messaggi: 243
- Iscritto il: martedì 23 settembre 2003, 2:00
- Località: Buggiano (Pt)
- Contatta:
Non credo che sia possibile che niente che sta in un computer fallisca "a volte", secondo me e' piu' corretto partire da questo concetto:
si verifica un evento diverso in determinate situazioni (un campo contiene un certo valore, una tabella un determinato numero di record, un if termina nel posto sbagliato, ecc...) e si tratta solo di individuare e gestire quell' evento.
Se hai il developer puoi provare a ricreare la situazione che secondo te modifica il risultato dello script e cercare di capire perche'.
Ma non ti preoccupare, e' una cosa che, almeno a me, ma credo a tutti, succede abbastanza spesso quando si ha a che fare con dei loop o con tanti if o come in questo caso con tutti e due.
si verifica un evento diverso in determinate situazioni (un campo contiene un certo valore, una tabella un determinato numero di record, un if termina nel posto sbagliato, ecc...) e si tratta solo di individuare e gestire quell' evento.
Se hai il developer puoi provare a ricreare la situazione che secondo te modifica il risultato dello script e cercare di capire perche'.
Ma non ti preoccupare, e' una cosa che, almeno a me, ma credo a tutti, succede abbastanza spesso quando si ha a che fare con dei loop o con tanti if o come in questo caso con tutti e due.
- PMP 8.5 Adv Win -