Un loop da mal di testa!

Come utilizzare gli script. Automatizzare gli archivi. Utilizzo dei pulsanti

Moderatore: Moderatori

augusto
Messaggi: 5
Iscritto il: giovedì 13 maggio 2004, 2:00
Località: Milano
Contatta:

Un loop da mal di testa!

Messaggio da augusto » giovedì 1 settembre 2005, 16:00

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 :cry:

Chi mi aiuta??
Grazie fin d'ora.

marianasu
Messaggi: 1235
Iscritto il: martedì 15 giugno 2004, 2:00
Località: Cagliari
Contatta:

Messaggio da marianasu » giovedì 1 settembre 2005, 16:25

Ho postato lo stesso problema qualche giorno fa.
https://www.fmpro.it/modules.php?name=Fo ... 94c59a9e5b

...senza risposta... :cry:
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

augusto
Messaggi: 5
Iscritto il: giovedì 13 maggio 2004, 2:00
Località: Milano
Contatta:

Messaggio da augusto » giovedì 1 settembre 2005, 16:50

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

marianasu
Messaggi: 1235
Iscritto il: martedì 15 giugno 2004, 2:00
Località: Cagliari
Contatta:

Messaggio da marianasu » giovedì 1 settembre 2005, 17:31

OK.....capisco se ti aumenta il mal di testa..... :lol:
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

augusto
Messaggi: 5
Iscritto il: giovedì 13 maggio 2004, 2:00
Località: Milano
Contatta:

Messaggio da augusto » giovedì 1 settembre 2005, 17:53

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... :cry: 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 :evil: :evil:

Rigrazie

Superp
Messaggi: 243
Iscritto il: martedì 23 settembre 2003, 2:00
Località: Buggiano (Pt)
Contatta:

Messaggio da Superp » giovedì 1 settembre 2005, 19:48

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 :wink: ) 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
vai 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
per il file master
Mostra 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]
la riga dello script precedente in corsivo si riferisce chiaramente al primo script nel 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 ( :D e sempre viva le palestre :D )

Chiaramente Augusto, se mi fai avere l' e-mail, posso mandarli anche a te

Ciao
- PMP 8.5 Adv Win -

marianasu
Messaggi: 1235
Iscritto il: martedì 15 giugno 2004, 2:00
Località: Cagliari
Contatta:

Messaggio da marianasu » venerdì 2 settembre 2005, 9:43

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
FM8.03 Adv.- FM8.5 Adv Windows XP SP2

Superp
Messaggi: 243
Iscritto il: martedì 23 settembre 2003, 2:00
Località: Buggiano (Pt)
Contatta:

Messaggio da Superp » venerdì 2 settembre 2005, 18:10

Te lo invio subito.

Ciao e buon lavoro.
- PMP 8.5 Adv Win -

augusto
Messaggi: 5
Iscritto il: giovedì 13 maggio 2004, 2:00
Località: Milano
Contatta:

Messaggio da augusto » venerdì 9 settembre 2005, 11:12

Ciao SuperP e GRAZIE!

Ho risolto il problema...e pare funzionare bene.

C'è un però: possibile che uno script funzioni ma a volte fallisca?

Nel senso che non funzioni sempre nello stesso modo?

Misteri della tecnica :D

Superp
Messaggi: 243
Iscritto il: martedì 23 settembre 2003, 2:00
Località: Buggiano (Pt)
Contatta:

Messaggio da Superp » venerdì 9 settembre 2005, 13:22

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.
- PMP 8.5 Adv Win -

Rispondi