[RISOLTO] Inserimento record specifico in documento writer

Discussioni sulle caratteristiche di database
Rispondi
schwantz69
Messaggi: 10
Iscritto il: sabato 8 ottobre 2011, 18:01

[RISOLTO] Inserimento record specifico in documento writer

Messaggio da schwantz69 »

Ciao a tutti,
E' la prima volta che mi cimento in un progetto del genere (fino ad oggi ho sempre gestito la cosa con Visual Basic ma per una serie di motivi non ultimo il passaggio a mac os vorrei utilizzare OooBase).
La mia è quindi una domandina da neofita appena approdato a Base. Ho già letto alcune discussioni simili al mio problema ma non applicabili (vedi progetto DDT). Ho un formulario nel quale è possibile inserire un'anagrafica clienti.
Vorrei che già in fase di inserimento (senza necessità di ricercare il record quindi ma semplicemente utilizzando quello visualizzato) alla pressione di un pulsante si aprisse un documento writer popolato con i dati del record visualizzato nel formulario per poi stamparlo.
Spero di essere stato chiaro.
Ringrazio anticipatamente quanti vorranno aiutarmi ciao
Ultima modifica di schwantz69 il domenica 23 ottobre 2011, 9:44, modificato 1 volta in totale.
Openoffice 3 su Mac Os 10.6.8 Leopard
Avatar utente
marcofoc
Messaggi: 235
Iscritto il: martedì 12 ottobre 2010, 16:48
Località: Arzignano (VI)
Contatta:

Re: Inserimento record specifico in documento writer

Messaggio da marcofoc »

Mmm.... qui entrano in gioco le macro.. che non conosco.

Io un problema simile l'ho risolto così:
un file writer l'ho composto da una parte "non stampabile", fatta di tutti i campi per l'inserimento dei dati (quindi come un vero e proprio "form"),
e una parte "stampabile", che si va a prendere l'ultimo recordo inserito (quando hai finito di riempire tutti i campi, inserisci un bottone con funzione "salva record").
Ecco che, durante la compilazione del form, ho la parte stampabile con i campi tutti vuoti. Appena premo su "salva record", i campi mi si compilano e lancio la stampa.

Un'altra soluzione, se non vuoi buttare il tuo bel form già creato, è creare il file writer collegandolo alla base dati, ordinando l'estrazione dell'ultimo record inserito.

Non è un lavoro impossibile, dai. ;)
Non esistono buoni maestri senza buoni allievi...
vladko
Volontario
Volontario
Messaggi: 1637
Iscritto il: martedì 3 agosto 2010, 8:02

Re: Inserimento record specifico in documento writer

Messaggio da vladko »

@marcofoc :super: !!! fai un mini tutorial??

@schwantz69
di solito il procedimento per base è:
creare tabelle
creare query
creare form
creare report (c'e extension SunReport Builder che facilita la creazione)
ora io non ho ben capito cosa vuoi dire ma se ti serve una macro che apre un report per nome puoi usare questa:
http://user.services.openoffice.org/it/ ... cro+report
AOO 3.4.1 AOO341m1(Build:9593) Linux Mint Debian/Mate 64bit java 1.6.0.22 XP PRO/32bit
con Base --> sempre backup!!!
Se problema è Risolto --> Inserire [Risolto]nel titolo come spiega qui, grazie :-)
Avatar utente
UTPiovene
Messaggi: 232
Iscritto il: giovedì 16 dicembre 2010, 11:24
Località: Piovene Rocchette per 36 ore alla settimana

Re: Inserimento record specifico in documento writer

Messaggio da UTPiovene »

marcofoc ha scritto:Mmm.... qui entrano in gioco le macro.. che non conosco.

Io un problema simile l'ho risolto così:
un file writer l'ho composto da una parte "non stampabile", fatta di tutti i campi per l'inserimento dei dati (quindi come un vero e proprio "form"),
e una parte "stampabile", che si va a prendere l'ultimo recordo inserito (quando hai finito di riempire tutti i campi, inserisci un bottone con funzione "salva record").
Ecco che, durante la compilazione del form, ho la parte stampabile con i campi tutti vuoti. Appena premo su "salva record", i campi mi si compilano e lancio la stampa.

Un'altra soluzione, se non vuoi buttare il tuo bel form già creato, è creare il file writer collegandolo alla base dati, ordinando l'estrazione dell'ultimo record inserito.

Non è un lavoro impossibile, dai. ;)
Soluzione interessante.
Io ho messo il tasto salva record sul form e vicino un tasto per aprire il documento writer (anche se penso che si possa unire tutto in unico tasto, ma è necessaria una macro).
Se si ha la necessità di stampare i dati relativi all'ultimo record la tua soluzione è più pratica.
Puoi mettere un esempio? Come hai impostato il documento writer? 2 fogli affiancati dei quali il primo serve per l'inserimento dei dati?
S.O. Windows 10
LibreOffice Versione: 5.4.5.1
schwantz69
Messaggi: 10
Iscritto il: sabato 8 ottobre 2011, 18:01

Re: [RISOLTO] Inserimento record specifico in documento writ

Messaggio da schwantz69 »

Grazie a quanti hanno proposto le varie soluzioni, alla fine ho risolto in questo modo:
ho creato una ricerca di "comodo" che vado a variare di volta in volta
nel formulario ho creato una macro che va a memorizzare il nr. del record visibile in quel momento
sempre nel formulario ho creato una macro che va a sostituire il comando SQL della ricerca
in questo modo ogni volta che premo il pulsante "Stampa" viene eseguito il filtro in ricerca per il nr. di record correntemente visualizzato.
Il problema ora è far si che il documento writer esegua l'aggiornamento del record in automatico ma per questo apro una nuova discussione nel forum di writer.
ciao a tutti
Openoffice 3 su Mac Os 10.6.8 Leopard
Avatar utente
UTPiovene
Messaggi: 232
Iscritto il: giovedì 16 dicembre 2010, 11:24
Località: Piovene Rocchette per 36 ore alla settimana

Re: [RISOLTO] Inserimento record specifico in documento writ

Messaggio da UTPiovene »

La macro che preleva il dato del record corrente interesserebbe anche me, la puoi postare in risposta in modo che sia accessibile a tutti?
Grazie
S.O. Windows 10
LibreOffice Versione: 5.4.5.1
schwantz69
Messaggi: 10
Iscritto il: sabato 8 ottobre 2011, 18:01

Re: [RISOLTO] Inserimento record specifico in documento writ

Messaggio da schwantz69 »

Qui di seguito riporto la macro utilizzata per modificare la stringa SQL della ricerca con il record attualmente visualizzato nel formulario:

Sub Query_Privacy(num_rec as long)
rem Sostituisce il comando SQL nella query specificata con quello definito
Ricerca=ThisDatabaseDocument.datasource.QueryDefinitions.getByName("Query_Anagrafica Clienti")
FraseSQl=Ricerca.Command
rem Quella che segue è una riga per controllare la modifica della stringa SQL
rem print "originale: "; FraseSQl

rem Inserire il comando SQL nella riga seguente
FraseSQL="SELECT * FROM ""Anagrafica Clienti"" WHERE ""ID""="+num_rec+""
Ricerca.setPropertyValue("Command",FraseSQL)

rem Quella che segue è una riga per controllare la modifica della stringa SQL
rem FraseSQl=Ricerca.Command
rem print "Dopo la modifica: "; FraseSQl
End Sub

Presuppone che alla pressione di un pulsante venga letto il parametro che interessa presente in un campo del formulario (in questo caso il numero di record) e che lo passi alla sub (num_rec) la quale si occupa di costruire la fraseSQL e di inviarla alla ricerca di comodo precedentemente creata.

Spero sia chiaro diversamente sono qui ciao
Openoffice 3 su Mac Os 10.6.8 Leopard
Avatar utente
UTPiovene
Messaggi: 232
Iscritto il: giovedì 16 dicembre 2010, 11:24
Località: Piovene Rocchette per 36 ore alla settimana

Re: [RISOLTO] Inserimento record specifico in documento writ

Messaggio da UTPiovene »

Appena ho 5 minuti disponibili provo e ti faccio sapere.
Grazie, ciao.
S.O. Windows 10
LibreOffice Versione: 5.4.5.1
Avatar utente
UTPiovene
Messaggi: 232
Iscritto il: giovedì 16 dicembre 2010, 11:24
Località: Piovene Rocchette per 36 ore alla settimana

Re: [RISOLTO] Inserimento record specifico in documento writ

Messaggio da UTPiovene »

schwantz69 ha scritto:... Presuppone che alla pressione di un pulsante venga letto il parametro che interessa presente in un campo del formulario (in questo caso il numero di record) e che lo passi alla sub (num_rec) la quale si occupa di costruire la fraseSQL e di inviarla alla ricerca di comodo precedentemente creata.
Credo manchi il listato della sub (num_rec) che dovrebbe essere la macro se "legge" il dato che interessa per passarlo alla ricerca
S.O. Windows 10
LibreOffice Versione: 5.4.5.1
vladko
Volontario
Volontario
Messaggi: 1637
Iscritto il: martedì 3 agosto 2010, 8:02

Re: [RISOLTO] Inserimento record specifico in documento writ

Messaggio da vladko »

quando ho un po di tempo guardo meglio questo problema di macro
AOO 3.4.1 AOO341m1(Build:9593) Linux Mint Debian/Mate 64bit java 1.6.0.22 XP PRO/32bit
con Base --> sempre backup!!!
Se problema è Risolto --> Inserire [Risolto]nel titolo come spiega qui, grazie :-)
schwantz69
Messaggi: 10
Iscritto il: sabato 8 ottobre 2011, 18:01

Re: [RISOLTO] Inserimento record specifico in documento writ

Messaggio da schwantz69 »

Ciao a tutti,
In realtà non sono stato molto chiaro e me ne rendo conto solo ora mi spiace.
Giustamente come affermato da Vladko la macro che manca è quella che legge il valore dal controllo, la memorizza in una variabile che poi viene passata alla sub Query_Privacy(num_rec as long) infatti il valore di num_rec è il valore passato che corrisponde a quanto letto dal controllo.

La Function che legge il valore del controllo è la seguente:

Function Leggi_Controllo(controllo as string) <--- passare il nome del controllo da leggere
REM Legge il valore di un campo testo e lo restituisce
oForm = ThisComponent.DrawPage.forms.MainForm
oggetto=oForm.GetByName(controllo)
valore=oggetto.text
Leggi_Controllo=valore
End Function

in sostanza utilizzare la Function così

sub pulsante
dim valore as long
valore=Clng(Leggi_Controllo("fmtID")) <--- dove "fmtID" corrisponde al nome del controllo da leggere
Query_Privacy(valore)
------
end sub

Siccome ho poco tempo (e lo si evince anche da quanto tempo passa tra un mio post e l'altro) attualmente per leggere tipi di controllo diversi uso Function diverse (caselle di testo, check box, etc...) perchè di fatto ogni oggetto ha proprietà diverse da leggere (casella di testo ha "text", check box ha "State", un campo data ha "Date"). L'evoluzione naturale della Function Leggi_Controllo sarebbe quella di passarle oltre che al nome del controllo da leggere, anche di che controllo si tratta in modo da interrogare la proprietà corretta in base al tipo di oggetto.... magari appena ho un po' di tempo lo faccio.
A disposizione per ulteriori chiarimenti.
Ciao a tutti
Openoffice 3 su Mac Os 10.6.8 Leopard
pgrosi
Messaggi: 6
Iscritto il: mercoledì 16 novembre 2011, 19:40

Re: [RISOLTO] Inserimento record specifico in documento writ

Messaggio da pgrosi »

ciao
ho trovato la tua soluzione molto elegante, e l'ho adottata pure io.
ora ho un pulsante che
-estrapola un dato da una text box nel form corrente (id)
-lo utilizza per effettuare una query (che in pratica poi contiene solo un record)
-apre un file writer precedentemente formattato e con i link nel testo ai campi della query in oggetto

ora ho 2 problemi che mi stanno facendo letteralmente impazzire

il primo, il più grave, è che seppur la query si aggiorni correttamente, il testo non si aggiorna finche non vado a selezionare manualmente il campo, l'unico, della query e poi premo il pulsante dati in campi.
vorrei fare in modo che il testo si aggiorni automaticamente, ma come???

il secondo problema è che poi, quando premo "stampa", mi dice che il mio documento contiene un database rubrica e mi chiede se voglio eseguire una stampa in serie... nooooooo!!!!!! c'è un modo per evitare che mi chieda sempre sta cosa?

grazie in anticipo!
OOo 3.2.1 Win7 x64
Avatar utente
UTPiovene
Messaggi: 232
Iscritto il: giovedì 16 dicembre 2010, 11:24
Località: Piovene Rocchette per 36 ore alla settimana

Re: [RISOLTO] Inserimento record specifico in documento writ

Messaggio da UTPiovene »

Perchè hai generato una stampa in serie.
Dovresti inserire i campi formulario in writer (menu visualizza -> barre degli strumenti -> controlli per formulario) collegati al database (registrato) ed alla tua ricerca.
In questo modo ad ogni apertura si aggiorna tutto automaticamente.
Io i moduli così creati li ho salvato come modelli in sola lettura.
S.O. Windows 10
LibreOffice Versione: 5.4.5.1
pgrosi
Messaggi: 6
Iscritto il: mercoledì 16 novembre 2011, 19:40

Re: [RISOLTO] Inserimento record specifico in documento writ

Messaggio da pgrosi »

grazie mille! ora è perfetto!
OOo 3.2.1 Win7 x64
pgrosi
Messaggi: 6
Iscritto il: mercoledì 16 novembre 2011, 19:40

Re: [RISOLTO] Inserimento record specifico in documento writ

Messaggio da pgrosi »

visto che ci sono, approfitto della vostra disponibilità sottoponendovi questa nuova questione...

http://user.services.openoffice.org/it/ ... =13&t=2297

grazie veramente di cuore a quanti vorranno aiutarmi....
OOo 3.2.1 Win7 x64
Rispondi