Una gestione documentale?

Proviamo a metter giù un progetto per una gestione documentale. Il processo dovrebbe essere più o meno il seguente:

1. apro un form di OOo;
2. seleziono da una cartella standard il file immagine e lo apro;
3. con il file immagine aperto, seleziono nel form di OOo i dati identificativi del file (tipo di documento, nome del cliente/fornitore/altro, n. e data del documento);
4. salvo il documento con assegnazione automatica del nome in base ai dati indicati e in una cartella pre-selezionata;
5. in un altro form, in cui si accede eventualmente anche ad altri dati relativi ai clienti/fornitori, posso vedere la lista dei documenti collegati a quel cliente/fornitore, filtrarla e/o ordinarla e aprire i file collegati.

Dovrebbe essere tutto, o no?

Pubblicato in Macros, OOo | Etichette: , , , , | 2 Commenti

Il mio primo piccolo gestionale in Ubuntu

Una piccola guida per fare le stesse cose del post precedente in Ubuntu:

- fare click destro sul menù applicazioni;
- selezionare Modifica;
- click su Nuovo menù;
- digitare il nome e premere Ok;

- selezionare il menù appena creato sulla lista di sinistra;

- click su Nuova Voce;
- digitare il nome (Projects in questo caso) e il comando per l’avvio della macro (ooffice macro:///icsTools.Mod.OpenIcsToolsProjects)

- finito!

E’ possibile aggiungere un lanciatore anche direttamente sulla barra delle applicazioni, con click destro, Aggiungi al pannello, Lanciatore applicazione personalizzato.

Pubblicato in Ubuntu | Etichette: , | Scrivi un commento

Un inventario dei francobolli con Base

Va tanto di moda adesso: “Kaizen”, ovvero “miglioramento continuo”. Vuol dire far le cose sempre un po’ meglio e con meno fatica.

Ma noi non siamo qui per questo?

Allora facciamoci un inventario dei francobolli e dei valori bollati su un database. O meglio, scarichiamolo già bell’e pronto!

Per utilizzarlo è necessario:
- scaricare e salvare questo database dove si vuole
- in OOo registrare il database nelle sorgenti dati (tasto rapido F4) come “magazzino” (senza gli apici)
- quindi scaricare e salvare questo modello come un file di Writer normale in una cartella a scelta
- eventualmente chiudere e riaprire il modello salvato, se non si vedono i dati.
Inserendo i movimenti l’inventario viene creato in automatico.

(n.b.: il form avrebbe potuto stare benissimo dentro al database, ma noi preferiamo averlo esterno, ci rende più facile aggiungerlo al nostro mini-gestionale – vedi questo post).

Qualcuno si chiederà: ma non si poteva usare un foglio di Calc?

La risposta è: sicuramente. Però a noi interessa faticare meno e lavorare meglio: con un form sicuramente si fa un po’ meno fatica e i tempi sono, seppur di poco, inferiori, ripagando ampiamente il (poco) maggiore sforzo iniziale.

Pubblicato in Base, Writer | Etichette: , , , , , , | Scrivi un commento

\/\/ la tastiera, /\/\ il mouse

La mia passione per le scorciatoie è iniziata quando ho visto, diversi anni fa, un programmatore in azienda: non riuscivo a collegare i movimenti che faceva sulla tastiera con quello che succedeva sullo schermo.

Solo dopo un po’ ho capito che usava delle scorciatoie con combinazioni di tasti: da allora ho cominciato a collezionarle e non ho più smesso.

Partiamo da quelle che conosciamo tutti (o quasi):
1.CTRL-X taglia
2.CTRL-C copia
3.CTRL-V incolla
4.CTRL-Z annulla
e fin qui tutto scontato, però se proseguiamo:
5.CTRL-Y ripristina
6.CTRL-B grassetto (bold)
7.CTRL-U sottolineato (underlined)
8.CTRL-I corsivo (italico)
già queste forse ci dicono qualcosa di più.

Il bello è provare ad utilizzarle sempre: io vedo una differenza nei tempi di scrittura veramente notevole.

Quella che segue è, secondo me, la più interessante, perché è fondamentale salvare il documento su cui stiamo lavorando ad ogni modifica importante.
E soprattutto farlo quando lo vogliamo noi, senza sminuire l’importanza dei salvataggi automatici, che però potrebbero non essere sufficienti perché vengono fatti a scadenze fisse.
9.CTRL-S salva (se il file è nuovo, viene proposta la maschera di salvataggio apposita)

E se abbiamo aperto un file di cui vogliamo salvare una copia e lavorare su quella? Semplice:
10.CTRL-MAIUSC-S salva con nome

Siamo arrivati ad un buon punto, potremmo fermarci e saremmo più che efficienti.

Però noi siamo ingordi e proseguiamo:
11.CTRL-→ (oppure ←) ci spostiamo di parola in parola avanti o indietro ( ← = freccia di direzione sinistra)
12.CTRL-MAIUSC → (oppure ←) come sopra ma selezionando le parole

Quelle sopra vanno bene per lavorare su alcune parole, ma se vogliamo lavorare su tutta la riga?
13.MAIUSC-INIZIO seleziona tutta la parte della riga dal punto dove siamo fino all’inizio
14.MAIUSC-FINE come sopra ma verso la fine

Bene, adesso dovremmo essere stanchi.

Però non si possono lasciare fuori queste ultime, sarebbe proprio un peccato!
15.ALT-TAB si sposta tra le varie finestre aperte
16.CTRL-F4 chiude il file su cui stiamo lavorando.

N.B.: molte di queste scorciatoie possono essere modificate, in modo di ricordarsele meglio (es. CTRL-G invece di CTRL-B per il grassetto) però questo comporta una conseguenza negativa da valutare: in caso si usino più computer bisognerà impostarle su tutti, io non lo faccio perchè uso più computer e più sistemi operativi sullo stesso computer (su questo ho 3 OOo diversi funzionanti :-) )

Pubblicato in OOo | Etichette: , , | Scrivi un commento

Il mio primo piccolo gestionale

Ci sono dei file, dei documenti, dei form di inserimento dati, che apriamo decine di volte al giorno. Qualcuno usa la soluzione drastica di tenerli direttamente sul desktop, soluzione poco pulita, visto che in breve tempo il nostro povero schermo sembra un parcheggio all’ora di punta.

Anche usando solo dei collegamenti, così da lasciare i file in qualche cartella meglio organizzata, alla fine copriremo il nostro bello sfondo. Andare a cercare i file ogni volta dentro le stesse cartelle, alla fine, annoia… allora perché non farsi un menù personale?

Detto fatto: in Windows creiamo, dove ci pare, una cartella, che nel mio caso chiamerò “IlMioMenù”, e mettiamoci dentro i collegamenti ai nostri file preferiti.

Quindi andiamo sulla barra delle applicazioni, clicchiamoci sopra con il bottone destro del mouse, selezioniamo “Barre degli strumenti” e infine “Nuova barra degli strumenti”.

Ci apparirà un menù di scelta di una directory, navighiamo e scegliamo quella che abbiamo creato appositamente:

Ci apparirà la seguente barra degli strumenti:

Carino… ma possiamo fare molto di più!

Mettiamo che abbiamo una cartella che usiamo spesso, o magari più di una. All’interno della nostra cartella menù, creiamo un collegamento alle cartelle che usiamo più spesso. Adesso le troveremo, comode, nel nostro piccolo menù.

Bello… ma passiamo senza indugio al piatto forte: apriamo un form di OOo direttamente dal nostro menù!

Per fare questo dobbiamo:

1. creare o avere già una macro che apre un form;

2. creare un file eseguibile per lanciare la macro.

Il punto 1. lo risolviamo molto semplicemente: installiamo, se non ce l’abbiamo già, un’extension disponibile sul sito delle extensions di OOo: Toools, che serve a creare un grafico Gantt (la spiegazione della macro la faremo in un altro post).

Poi passiamo al punto 2.: creiamo un file eseguibile.

Prima di tutto accertiamoci che siano visibili le estensioni dei file: nel pannello di controllo, “Opzioni cartella”, deselezioniamo (se è selezionata) il flag su “Nascondi le estensioni per i tipi di file conosciuti”.

Quindi possiamo creare il nostro file eseguibile che chiameremo Progetti.bat (il bat è un’estensione di file eseguibile riconosciuta da Windows automaticamente – abbreviativo di batch).

In questo file andremo a scrivere:

@echo off

“C:\Program Files\OpenOffice.org 3\program\soffice.exe” macro:///IcsTools.Mod.OpenIcsToolsProjects

Il primo percorso è quello del programma di OOo nel proprio sistema “C:\percorso_di_OOo\program\soffice.exe”, mentre il secondo è della macro che apre il form: macro:///libreria_della_macro.modulo_della_macro.nome_della_macro

Ora mettiamo il nostro file .bat all’interno della cartella (IlMioMenù nel mio caso) e il menù sarà simile a quello qui sotto:

Facendo un doppio click sul file Progetti.bat, si aprirà il nostro ricercato form.

Dite la verità: non sembra una cosa molto simile ad un classico gestionale?

Pubblicato in OOo | Etichette: , , , | 1 Commento

Un mondo senza gestionali proprietari?

Con questo articolo inauguro una nuova categoria, che non credo sia molto diffusa. Si tratta di “sogni”, completamente strampalati oppure che potrebbero diventare realtà, sta alle persone che lavorano (o anche giocano) sul computer a deciderlo.

© 2074 Wipedia galattica, ed. standard.

Gestionali – storia. Nel passato, i programmi gestionali (macro-categoria di cui facevano parte ERP, CRM, WMS, CMS e molti altri) erano prodotti da un’infinità di aziende di software, che ne facevano ognuna varie versioni, vendute a prezzi diversi secondo la complessità, con un’inefficienza del mercato veramente notevole.

Inoltre tutti i programmi erano fra loro incompatibili, misura studiata dalle case software per evitare la perdita di clienti, dato che la migrazione dei dati era costosa e difficile.

Attualmente il settore ha subito una profonda evoluzione ed il mercato è suddiviso in due categorie:

- quello dei gestionali proprietari di alta gamma;

- quello dei gestionali liberi per le piccole e medie aziende.

I gestionali proprietari sono rimasti solo nel settore delle grandi aziende dove, dato l’importanza degli investimenti, non è stato possibile il diffondersi dei gestionali liberi.

Nel resto del mercato, invece, i gestionali proprietari hanno lasciato il campo alla diffusione di quelli liberi per una varietà di fattori che ne hanno decretato la sconfitta.

Il primo è stato sicuramente il fattore prezzo, ma quasi allo stesso piano è stato lo sviluppo di programmi semplici, di facile sviluppo e gestione, all’interno di software di office automation, anch’essi liberi, quali MyOOo.

La possibilità per gli utenti di farsi il proprio gestionale “in casa”, completamente personalizzato e con l’affidabilità data dall’utilizzare pezzi di programmi liberi e già ampiamente testati, ha infatti spiazzato la concorrenza.

Infine, particolare fondamentale perché ha cancellato le paure degli utenti per le migrazioni, questi gestionali sono completamente intercambiabili: la base dei dati infatti è identica, per cui è sufficiente sostituire il database, con un banale copia-incolla, e il gestionale è migrato.

La prima traccia di questo sviluppo del mercato è ancora rintracciabile sul www, in una extension del vetusto OOo 3.1.1, scaricabile qui e denominata Toools.

Pubblicato in Sogni | Etichette: , | Scrivi un commento

icsGantt.oxt – un Gantt collegato a un database

E’ disponibile qui l’extension icsGantt.

Era parte dell’extension Toools, ma è stata separata perché avrà uno sviluppo autonomo.

Pubblicato in Extensions | Etichette: , | Scrivi un commento

Somma.se() (post ripreso dall’ex OpenOfficeorgCoffeBreak.blogspot.com)

Si usano solitamente sempre le stesse funzioni di calc, ma se ne possono facilmente imparare un paio un più, che aiutano veramente molto.

La formula indicata dà il totale della colonna val1, ma se volessimo sommare solo gli importi con l’anno 2008?

La formula somma.se() è utilissima in questo caso, e richiede tre dati per funzionare:

1. C2:C4 : è la selezione dove la formula controlla se le condizioni richieste sono rispettate;

2. 2008 : è la condizione che richiediamo;

3. B2:B4 : è la selezione dove ci sono i dati da sommare.

Ma si può fare di più!

Nel foglio qui sotto, sono sommati solo i valori con data uguale o superiore a 16/10/08.


Si possono usare, dentro ai doppi apici “”, tutte le condizioni di < > = ecc., cioè tutte le espressioni regolari, a patto che sia flaggata l’opzione Permetti espressioni regolari nelle formule (che si trova in Strumenti -> Opzioni , vedi finestra sotto) (n.b. clicca per ingrandire, su qualsiasi immagine).


E se volessimo sommare tra una data ed un’altra solo?

Con un passo ed una funzione in più si può fare.


Nella colonna “FALSO-VERO” è inserita la formula = E (…) che si vede qui sopra (è stata ricopiata normalmente su tutta la colonna) e segnala le condizioni da rispettare. In questo caso ho messo la condizione (C2>DATA(2008;10;14) ) che richiede una data superiore al 14/10/2008, e la condizione C2<DATA(2008;10;18).

Con questo sistema si possono mettere infinite condizioni. Si può inoltre usare la formula = O (…) , per definire delle condizioni alternative, o una o l’altra.

Per collegare il funzionamento della formula SOMMA.SE() alle celle del foglio di calcolo, è sufficiente, ad esempio, invece di “>=16/10/2008″, scrivere “>=”&C5, essendo C5 la cella con il valore 16/10/2008.

Pubblicato in Calc | 1 Commento

Creare un database unico da diversi file di Calc

Sulla mailing list utenti@it.openoffice.org è stato richiesto un metodo per importare, da una serie di file di calc come quello sotto (semplificato), dei dati all’interno di un database.

La cosa non è fattibile con gli strumenti standard, in quanto le colonne sono in orizzontale, alcune sono spostate, e i file sono tanti (2000). Però è possibile con il basic.

Il progetto è questo:

1. selezionare la directory dove ci sono i file da importare,
2. aprire il primo file,
3. prelevare i dati all’interno del file,
4. scrivere i dati prelevati in un record del dabase,
5. ripetere il tutto fino alla fine dei file.

1. Selezionare la directory: per farlo usiamo il servizio “FolderPicker”, con la funzione seguente. Il titolo del dialogo è opzionale, ma è comunque meglio personalizzarlo.

‘***Open and choose a folder*************************************
‘***Use OOo system’s dialogue to work****************************
Function openDirectory(Optional sDialogTitle As String)
oFolderPicker = createUnoService (“com.sun.star.ui.dialogs.FolderPicker”)
oFolderPicker.DialogTitle = sDialogTitle
If oFolderPicker.execute() Then
sDir = oFolderPicker.Directory
Else
sDir = 0
Endif
openDirectory = sDir
End Function

2. Aprile il file: per questo ci aiuta il servizio “SimpleFileAccess”, quindi controlliamo che la directory “sDir” selezionata esista, infine preleviamo il contenuto della directory con “getFolderContents” e lo salviamo nell’oggetto “oFoldCont”. Predisponiamo inoltre una proprietà per aprire i file in modo nascosto (mArgs(0)).

‘***Select the directory & file***********************************************
sDir = openDirectory(“Seleziona la directory dei file da importare”)
oSfA = createUnoService(“com.sun.star.ucb.SimpleFileAccess”)
If oSfa.exists(sDir) Then
oFoldCont = oSfa.getFolderContents(sDir, True)
Endif
dim mArgs(0) As New com.sun.star.beans.PropertyValue
mArgs(0).Name = “Hidden”
mArgs(0).Value = True

3. Prelevare i dati: qui dobbiamo creare 3 cicli di FOR – NEXT: il primo per iterare i files contenuti nella directory, il secondo per iterare i campi che stiamo cercando nel foglio di calcolo (“COGNOME”,”NOME”,”ETA’”), il terzo per cercare per un numero di righe sufficiente (50) ogni campo (partendo dal presupposto che potrebbero essere non sempre alla stessa riga, però nella stessa colonna, per semplificare).

mNomi() = array(“COGNOME”,”NOME”,”ETA’”)
mVar() = array(sCognome,sNome,sVar)
‘***Get data from file*************************************************
For i=0 to UBound(oFoldCont)
‘open file
oDoc = StarDesktop.loadComponentFromURL(oFoldCont(i), “_blank”, 0, mArgs())
‘do the work getVariables
oSheet = oDoc.Sheets.getByIndex(0)
For j=0 to UBound(mNomi)
For k=0 To 50
oCell = oSheet.getCellByPosition(0,k)
If oCell.string = mNomi(j) Then
mVar(j) = oSheet.getCellByPosition(1,k).String
Exit For
Endif
Next
Next

4. Infine il salvataggio dei dati nel database. Viene eseguito in due parti: la prima è all’inizio della sub e serve per creare un servizio “preparedStatement”, per velocizzare il successivo inserimento dei dati.

‘***Prepare the sql statement******************************************
oContext = CreateUnoService(“com.sun.star.sdb.DatabaseContext”)
oDb = oContext.getByName(“db”)
oIH = CreateUnoService(“com.sun.star.sdb.InteractionHandler”)
oConn = oDb.connectWithCompletion(oIH)
sSql = “INSERT INTO “”table”" (COGNOME,NOME,ETA) VALUES (?,?,?)”
oStmt = oConn.prepareStatement(sSql)

Il secondo è all’interno del primo ciclo FOR (quello che scorre i files), e imposta il comando SQL con i valori raccolti, eseguendolo subito dopo.

oStmt.setString(1,mVar(0))
oStmt.setString(2,mVar(1))
oStmt.setString(3,mVar(2))
oStmt.executeUpdate()

La macro completa è quella seguente:

REM ***** BASIC *****
‘Dim oDoc As Object
Sub walkFiles
Dim mNomi(2)
Dim mVar(2)
‘***Prepare the sql statement******************************************
oContext = CreateUnoService(“com.sun.star.sdb.DatabaseContext”)
oDb = oContext.getByName(“db”)
oIH = CreateUnoService(“com.sun.star.sdb.InteractionHandler”)
oConn = oDb.connectWithCompletion(oIH)
sSql = “INSERT INTO “”table”" (COGNOME,NOME,ETA) VALUES (?,?,?)”
oStmt = oConn.prepareStatement(sSql)
‘***Select the directory & file***********************************************
sDir = openDirectory(“Seleziona la directory dei file da importare”)
oSfA = createUnoService(“com.sun.star.ucb.SimpleFileAccess”)
If oSfa.exists(sDir) Then
oFoldCont = oSfa.getFolderContents(sDir, True)
Endif
dim mArgs(0) As New com.sun.star.beans.PropertyValue
mArgs(0).Name = “Hidden”
mArgs(0).Value = True
mNomi() = array(“COGNOME”,”NOME”,”ETA’”)
mVar() = array(sCognome,sNome,sVar)
‘***Get data from file*************************************************
For i=0 to UBound(oFoldCont)
‘open file
oDoc = StarDesktop.loadComponentFromURL(oFoldCont(i), “_blank”, 0, mArgs())
‘do the work getVariables
oSheet = oDoc.Sheets.getByIndex(0)
For j=0 to UBound(mNomi)
For k=0 To 50
oCell = oSheet.getCellByPosition(0,k)
If oCell.string = mNomi(j) Then
mVar(j) = oSheet.getCellByPosition(1,k).String
Exit For
Endif
Next
Next
‘***Prepare and execute SQL update command ************************
‘print mVar(0) & “,” & mVar(1) & “,” & mVar(2)
oStmt.setString(1,mVar(0))
oStmt.setString(2,mVar(1))
oStmt.setString(3,mVar(2))
oStmt.executeUpdate()
oDoc.close(True)
Next
oDb.DatabaseDocument.store()
End sub

‘***Open and choose a folder*************************************
‘***Use OOo system’s dialogue to work****************************
Function openDirectory(Optional sDialogTitle As String)
oFolderPicker = createUnoService (“com.sun.star.ui.dialogs.FolderPicker”)
oFolderPicker.DialogTitle = sDialogTitle
If oFolderPicker.execute() Then
sDir = oFolderPicker.Directory
Else
sDir = 0
Endif
openDirectory = sDir
End Function

Pubblicato in Macros | Scrivi un commento

FastMailMerge: la mail merge con “un singolo click”

Impossibile? Provare per credere: qui ho caricato una nuova release di una mia vecchia extension (in versione da testare per ora).

Prima, solo per la prima volta, è necessario creare un modello e salvarlo, poi è sufficiente fare un singolo click.

Pubblicato in Calc, Macros | Etichette: , , | 1 Commento