Archivi tag: libreoffice

Excursus su macro di OpenOffice o LibreOffice

La prima parte in rosso contiene indicazioni basilari sulle macro da come registrare una macro a come eseguirla associata a un tasto o a un menu a tendina e infine un codice di “hello world”, la seconda parte in verde contiene informazioni più specifiche su come consultare le api di openoffice per scrivere codice.

Le macro di openoffice sono dei comandi scritti a computer che permettono di fare potenzialmente qualsiasi cosa coi documenti di openoffice.

La prima macro la si può realizzare senza scrivere codice: si clicca su strumenti → macro → registra macro
Si fa qualcosa come ad esempio cambiare il colore di un testo
Si clicca su termina registrazione
Si nomina la macro, scegliendo dove salvarla
La si esegue con strumentimacroEsegui macro → si cerca la macro che si è appena registrata e si clicca su esegui. Il programma rifarà le stesse azioni che si sono registrate (ad esempio l’atto di cliccare sul bottone che cambia il colore di un testo)
Si può guardare il codice corrispondente alla macro andando su strumentimacroOrganizza macro → …office basic → si sceglie la macro e si clicca modifica.

Infine si può agevolare l’uso di una macro associandola a un tasto. Per fare questo:
Strumenti → personalizza → tastiera → si seleziona il tasto o i tasti da associare nella sezione tasti di scelta rapida → nella sezione “Funzioni” “Categoria”, si va in fondo su “Macro di openoffice”, si cerca il modulo dove si è salvata la macro e quindi si clicca sulla macro (nella sezione funzione).
Ci si assicura di nuovo che sia selezionato il tasto che si vuole assegnare e si clicca su cambia.

Prima di associare un tasto è opportuno verificare se quel tasto farebbe già qualcosa di per sé.
In base infatti se si associa una macro a un tasto (o più tasti) non vengono sovrascritte le funzionalità originarie del tasto.
Si ha quindi una situazione instabile dove il tasto fa: o solo la funzione originaria per cui era stato progettato, o sia la funzione originaria che la macro associata, o solo la macro associata.

In openoffice si può anche associare una macro a un menu a tendina:

strumentipersonalizza → scheda menu → sezione menu di openoffice → nuovo → si da il nome → Si va sulla sezione contenuto menuimporta… → in fondo su Macro di openoffice → si sceglie la macro → si clicca su aggiungi → si clicca su OK.

Anche se si possono usare anche altri 1 o 2 linguaggi nella maggior parte dei casi le macro di openoffice sono scritte usando il linguaggio basic o visual basic.

In questo linguaggio le procedure ad esempio si dichiarano con

sub nomeprocedura (a as String, b as integer)
end sub

Le istruzioni if sono:

if a = 0 then

elseif a >0 then

else

end if

I cicli for sono

for i=0 to 10
next

E via così, tutta la sintassi come anche i comandi per manipolare le stringhe e le tipologie base si trovano facilmente in internet cercando ad esempio visual basic manipolare stringhe.

Per fare una macro di esempio:
strumentimacroorganizza macro → …office Basic → si seleziona il posto dove si vuole salvare la macro e si clicca su modifica.

Attenzione: se si salva una macro dentro il file di openoffice e non dentro la sezione “macro personali”, al momento dell’apertura di quel file openoffice disattiverà le macro.
Per poterle usare serivrà modificare le impostazioni di sicurezza:
Strumentiopzionisezione generale openofficesicurezza → sicurezza delle macrosi imposta su medio o su basso

Si va in fondo al testo e si scrive

sub procedurainutile
msgbox(“Ciao”)
end sub

Dopodichè si potrà invocare questa procedura, che apre una finestra con scritto Ciao, coi metodi che si sono detti prima.

Le macro di openoffice vengono invocate singolarmente nel momento in cui sono richieste dall’utente, quindi non mi pare che si possano avere delle variabili che permangono al di fuori della procedura che si invoca, in luogo di queste però esistono ad esempio i comandi nascosti, che sono oggetti che possono essere creati nel formulario.

Gli oggetti e relative funzioni di openoffice sono ideati con l’architettura object oriented.
Ogni oggetto implementa una sequenza di interfacce.
Una certa interfaccia può essere implementata da più oggetti.
Ogni oggetto implementa una data interfaccia a modo suo.
Quindi una funzione di un’interfaccia che restituisce object (che è l’oggetto base su cui si basano tutti gli oggetti: si può dire che tutti gli oggetti di openoffice sono anche degli object) potrà restituire oggetti differenti a seconda dell’oggetto che l’ha implementata.

Infine le macro di openoffice gestiscono i documenti di openoffice tramite degli oggetti detti service: si tratta di oggetti che si relazionano con le funzionalità grafiche e interne di openoffice.
I service sono in grado di manipolare i documenti di openoffice.

Tutte le interfacce con tutte le rispettive funzioni e tutti i service costituiscono le api di openoffice.

Le api di openoffice si trovano elencate alfabeticamente qui.

Siccome nella documentazione vengono indicate le funzioni astratte, così come definite dalle interfacce.
Quando scrivo una macro però voglio sapere esattamente quali oggetti restituisce una funzione e quante funzioni implementa un certo oggetto.

La maggior parte degli oggetti di openoffice implementano il comando dbg_methods, dbg_properties e Dbg_SupportedInterfaces.
Quindi quando si sta scrivendo del codice e per esempio si usa una funzione che le api definiscono astrattamente come

object elementi_presenti(integer)

di cui non so quale sia l’oggetto restituito, quando la invoco da macro:

etichetta = formulario.elementi_presenti(0)

potrò utilizzare:

etichetta.dbg_methods()

Per avere un elenco delle procedure implementate.
La stessa cosa vale quando in generale ho un oggetto di cui non ho informazioni precise.

Annunci

Gestionale con MySql e OpenOffice – 4 primo Formulario


Una volta installato mysql e libre/open office, creato la prima tabella in sql, modificata per renderla più funzionale usando una seconda tabella “elenco”, si passa a creare un Form in libreoffice o openoffice.

Da questo momento in poi mi riferirò specificamente a openoffice, dal momento che in alcuni dettagli mi è parso più stabile rispetto a libreoffice, ad esempio le left join andavano in crash, Anche se in effetti mi è parso che in alcuni casi anche openoffice avesse alcune difficoltà con le left join: in particolare non riusciva a gestire elenchi lunghi generati da left join. Inoltre i report – anche se noi non li utilizziamo – sono più agevoli in openoffice. Tuttavia libreoffice sembra in qualche caso avere delle funzioni in più.

In ogni caso di qui in poi mi riferisco a openoffice, anche se i due programmi sono intercambiabili e utilizzano gli stessi file, con la stessa estensione .odb.

Va poi specificato che openoffice e libreoffice non hanno la stabilità dei programmi proprietari ad esempio della microsoft, quindi ci possono essere piccoli o grandi bug a seconda del computer dove sono installati: quello che viene detto qui, funziona sul mio computer e in linea di massima funziona in tutti gli altri ma può anche capitare che alcune funzionalità si inceppino semplicemente passando da un pc all’altro (per esempio le left join facevano esplodere libreoffice ma non davano particolari problemi in openoffice.
Tuttavia oltre a essere programmi liberi, permettono molta più possibilità di inventiva per il programmatore rispetto ai programmi proprietari.

Quindi si apre openoffice base.

Si seleziona
collega ad un database esistentescegliendo “mysql, poi
connetti con ODBC”
poi si clicca su sfoglia e si seleziona la sorgente dati, da noi si chiamava banalmente
odbcname.
Poi si inserisce l’utente, da noi root,
Infine si selezionea “
no, non registrare il database” e si dà il nome al file. Noi lo chiameremo “primodatabase

nella prima schermata è anche possibile scegliere “collega ad un database esistente” → “odbc”. Tuttavia questa scelta a me ha creato qualche problema di comunicazione tra base e mysql.

Un file ODF è suddiviso in quattro parti: Tabelle, Query, Formulari, Report.

Nel nostro caso quando il file si apre sono già presenti le tabelle create su MySql. Dal momento che le tabelle le creiamo e modifichiamo direttamente da mysql non useremo la sezione tabelle di openoffice base, anche se a volte torna utile aprire una tabella da openoffice, mentre magari si sta impostando una query o un altro comando in MySql.

Anche la sezione query ha un interesse marginale per i nostri scopi (ma anche in generale impostare query ha una utilità ridotta). Le nostre query verranno eseguite direttamente all’interno dei forulari. Una volta che si sanno fare quelle si possono fare quante query si vogliono.

La sezione report è più interessante ma ha il limite di poter usare – per quel che ne so – una sola tabella o query alla volta

Si va nella sezione Formulari, e si clicca su “Crea formulario in vista struttura”.

Appare il formulario vuoto.
Un formulario è composto da alcuni oggetti, alcuni visuali altri non visuali, che interagiscono col database oltre ad altri oggetti fissi che non interagiscono col database.
Soprattutto i formulari sono composti da degli oggetti non visuali “Forms”, ossia proprio “Formulari”.
Nonostante il nome sia lo stesso il formulario inteso come la pagina bianca appena apparsa è un foglio su cui si possono disegnare tabelle o inserire campi di testo, mentre i Forms, ossia sempre i Formulari, che sono contenuti dentro al foglio, sono degli oggetti invisibili che hanno il compito di comunicare con il database.
Ogni form può connettersi al massimo a una tabella o una query proveniente dal database mysql.

La prima cosa da fare in un formulario, in un foglio vuoto è quella di andare ad inserire ed impostare il primo Form.

Si clicca sull’icona “navigatore formulario” in basso a sinistra (da non confondersi col navigatore del documento di openoffice):

Si clicca col tasto destro su Moduli → Nuovo → Formulario

Qualora non fosse visibile il tasto del navigatore, serve attivare il gruppo “Struttura del formulario” andando a selezionarlo in Visualizza → Barra degli strumenti.
Stessa cosa per i controlli del formulario che devono essere visibili. Si gestiscono da Visualizza → Barra degli strumenti → Controlli per formulario

Si ottiene la seguente finestra

Si clicca tasto destro su “Moduli” poi → Nuovo → Formulario e si ottiene:

Una volta giunti qui suggerisco di salvare il formulario, inteso come pagina, prima di procedere. Si clicca File → Salva.

Salvare il formulario permette di evitare di dover inserire nelle proprietà la sorgente dati. In ogni caso se venisse richiesta vi andrebbe inserito il file di base stesso a cui il formulario appartiene (“primodatabase”).

Da questa schermata si fa tasto destro sul formulario → modifica e si entra nel formulario in modalità di modifica.

Ora si clicca di nuovo sul navigatore

Tasto destro su Formulario, sotto la scritta Moduli → proprietà.

Nella tab “Dati” nel campo “Tipo di contenuto” si seleziona “Comando SQL” e si scrive nel campo “Contenuto”:

SELECT * FROM fatture;

Che vuol dire: tieni in memoria tutte le colonne della tabella fatture.

Nella tab “Dati” è in generale opportuno selezionare come “Tipo di contenuto”Comando SQL”. Questo perchè permette poi di manipolare meglio il form attraverso le macro che possono cambiare quel comando SQL che introduciamo ma che non potrebbero agire a riguardo se scegliessimo una Tabella o una Query.

Ora, si clicca la freccia in basso a sinistra o comunque si deve arrivare a cliccare “Altri campi di controllo”.

E si seleziona l’icona griglia:

Con il mouse si indica l’area che si vuole ricoprire con la griglia (è conveniente all’inizio farla piuttosto grande), e si segue il wizard per la composizione delle colonne della griglia. Inizialmente si può anche selezionare il tasto =>> che aggiunge alla griglia tutte le colonne presenti nella tabella del formulario (che nel nostro caso è SELECT * FROM fatture; ossia è la tabella fatture).

Per capire che cosa fa il wizard della griglia si può allargare la griglia a sufficienza così che sia possibile cliccare tasto sulla barra dell’intestazione della griglia destro, fuori dalle colonne già esistenti. Si seleziona “Nuova colonna” e quindi Campo di testo, che è una modalità che va bene un po’ per tutto.

Oppure se si ha a che fare con un numero si può scegliere campo numerico, campo data o campo formattato se si ha a che fare con una data o con un campo che si preferisce formattare come si fa con writer o calc (i corrispettivi open di word e excel). Se si ha un campo binario si può scegliere l’opzione Casella di controllo. Campo maschera serve per vincolare la digitazione di quel campo: se voglio che in quel campo si inseriscano tre lettere e sue numeri, col campo a maschera riesco a imporre all’utente questo formato.
Invece Casella combinata e soprattutto Casella di riepilogo presentano funzioni più avanzate che useremo per unire i campi numerici come ragionesociale_fat ai nominativi corrispondenti negli elenchi,

Ora di può cliccare su Modo bozza on/off:

E “eseguiamo” il nostro formulario.

In griglia non appare niente ancora perchè non abbiamo inserito dati in tabella. Si può provare a inserire dati in tabella (ricordandosi che il campo ragionesociale_fat è per ora ancora un campo numerico dove si possono inserire solo numeri interi).

E’ il caso di ricordare che i dati che scriviamo in griglia verranno trascritti nella tabella collegata del database (nel nostro caso la tabella fatture) solo quando andiamo a capo di una riga. Quando ci sono dati scritti in griglia ma non ancora passati alla tabella del database vengono segnalati con una matita nella barra laterale sinistra della grigli che sostituisce il triangolino verde che è invece presente quando tutte le cose scritte in griglia sono state anche memorizzate nella tabella del database.

Dopo aver provato a inserire righe nella tabella, si possono cancellare le righe che si sono scritte cliccando col tasto destro sulla barra laterale sinistra della griglia, a livello della riga che si vuole eliminare e selezionando Elimina righe.

Ora per prima cosa serve che nel campo ragionesociale_fat appaia il nominativo in lettere della ditta che si intende indicare.

Per fare questo creiamo in mysql una tabella in cui ogni nominativo sia associato a un numero.

Apriamo la workbench, entriamo in nuovoschema, e creiamo una nuova tabella (vedi qui su come creare tabelle) che chiamiamo elenco_nominativi, con due colonne, la colonna idelenco_nominativi,(con PK, NN, AI) e la colonna nominativi_en di tipo VARCHAR(127) con NN.

Ora, quando si creano nuove tabelle o le si modifica o si agisce in qualche modo sulla struttra dello schema tramite workbench, può capitare che base (libreoffice base) non recepisca le modifiche. E’ per questo opportuno andare nella sezione tabelle e cliccare da menu Visualizzaaggiorna tabelle. Oppure serve salvare i formulari aperti, chiuderli, salvare il file di base, e chiudere il file. Una volta che tutte le finestre relative al file primodatabase.odb siano state chiude si può riaprire il file, e lo si ritrova aggiornato.

Ora andiamo sulla sezione “tabelle”, e apriamo la tabella elenco_nominativi (se non appare probabilmente l’avete creata nello schema sbagliato) e inseriamo sotto la colonna nominativi_en un po’ di “nomi”.

Inseriamo:

Mario srl
Verdi spa
Arch. Bianchi
Ing Rossi
Mario Rossi

Si ricorda che nella prima colonna idelenco_nominativi non si deve scrivere niente perchè è una colonna che aggiorna automaticamente il database.

Ora ritorniamo nella sezione Formulari e riapriamo il formulario creato in precedenza con tasto destro → modifica.

Clicchiamo con tasto destro sopra la colonna ragionesociale_fat e scegliamo Sostituisci con → Casella di riepilogo.

Ora si clicca di nuovo con tasto destro sopra ragionesociale_fat e stavolta però si sceglie Colonna… che permette di entrare nelle proprietà della colonna.

Si va nella sezione Dati e sul campo Tipo del contenuto della lista si seleziona Sql.

Si clicca quindi sui puntini a lato del campo Contenuto elenco

Si entra in una finestra apposita dove già dovrebbe comparire la finestra Aggiungi tabella o query. Se non apparisse è sufficiente cliccare su inserisci → Aggiungi tabella o query.

Si fa doppio click sulla tabella elenco nominativi, e si può cliccare Chiudi.

Sulla tabellina che appare nella sezione alta si fa doppio click prima su nominativi_en e poi su idelenco_nominativi. Si può cliccare quindi su salva e si può uscire da questa finestra.

Ora nella sezione Dati della colonna ragionesociale_fat, nel campo Contenuto elenco dovrebbe apparire questo comando:

SELECT `nominativi_en`, `idelenco_nominativi` FROM `nuovoschema`.`elenco_nominativi` AS `elenco_nominativi`

Che andiamo a modificare aggiungendo la clausola finale ORDER BY, clausola sql che permette di ordinare una query a seconda del campo è composta da ODER BY nomecampo ASC (oppure DESC a seconda se si vuole ordinare in maniera crescente o descrescente):

SELECT `nominativi_en`, `idelenco_nominativi` FROM `nuovoschema`.`elenco_nominativi` AS `elenco_nominativi` ORDER BY `nominativi_en` ASC

Possiamo ora eseguire il nostro formulario cliccando sul tasto Modo bozza on/off.

Se prima avevamo lasciato una riga con un numero intero da 1 a 4 nel campo ragionesociale_fat ora ci appare un nome. Il nome associato a quel numero nella tabella elenco_nominativi

Si noti che se ci si posiziona nel campo ragionesociale_fat, anche se non è possibile vedre il cursore, si può scrivere con la tastiera “mario ” apparirà la scritta “Mario Rossi” ma appena si procede e si arriva a scrivere “mario s” apparirà il nominativo di “Mario srl”.
Mi accorgo ora che questa funzione presente in openoffice, non è ancora stata implementate in libreoffice.

Per ora abbiamo sistemato la parte che riguarda il campo ragionesociale_fat.

Per quanto riguarda il campo idfatture, si tratta di un campo eccezionale, come lo sono tutti i campi id.
Si incrementa da solo e soprattutto ogni volta che una futura tabella vorrà fare riferimento a una certa fattura indicherà proprio il numero del campo id.
E’ quindi importante che questo numero non venga modificato perché scombinerebbe le eventuali associazioni.
Inoltre, nella tabella del nostro formulario, la colonna id costringe l’utente ogni volta a battere invio per uscire da un campo che non utilizza e che non deve utilizzare.
Eliminiamo quindi la colonna idfatture.

Ri-clicchiamo sul tasto Modo bozza on/off e andiamo a cliccare col tasto destro sulla colonna idfatture e selezioniamo Elimina Colonna.

Dopodichè clicchiamo e manteniamo premuto sul campo data_dat e trasciniamo col mouse senza mollare a sinistra arrivando all’inizio della colonna ragionesociale_fat, qui molliamo la presa.
La data dovrebbe così apparire nella griglia come il primo campo, e la ragione sociale come il secondo.

Clicchiamo su salva per salvare il formulario.