Autore Topic: Gestionale Perseo  (Letto 7534 volte)

Offline perseo

  • Maestro Gambero
  • ****
  • Post: 264
    • Mostra profilo
Gestionale Perseo
« il: 12 Ottobre 2010, 12:40:08 »
Eccomi al mio primo post...

Spero di non fare troppi voli pindarici e di riuscire a spiegarvi a grosse linee il mio progetto.

Premessa:
Avevo già creato un gestionale per il mio ufficio in VB6 e DB_Access, altamente personalizzato... Funziona abbastanza bene, ma chiaramente, essendo stata la mia prima esperienza, il codice è pesante e tante cose non le sapevo. Non che ora ne sappia di più, ma almeno spero di migliorarlo ...in Gambas.
Il mio intento è di upgradare anche in ufficio da Winzoz a Linux (Ubuntu), laddove sia possibile. Purtroppo alcuni software proprietari di alcuni nostri macchinari girano solo su Winzoz e quindi dovrò adeguarmi pian piano.

Progetto:
Si tratta di due PC, in rete locale, dove il flusso di lavoro si articola così:
PC_1 --> gestisce le domande di lavoro: accettazione clienti, archivio clienti, ecc. --> quindi lo uso come PC_main, dove si trova anche il DB.
PC_2 --> compila ed esegue liste di lavoro, inserimento dati, ecc. --> e quindi popola il DB con i dati, ecc. Questo secondo PC pesca altri dati anche da altri due PC (Windows), dei macchinari con i software proprietari (che usano DB Access)

Quando tutte le richieste di lavoro sono state svolte ed immesse attraverso il terminale PC_2, dal PC_1 si emettono fatture, ecc.

Note:
1) Ho installato Gambas3 perché da quanto capito, è prossima la versione Beta ufficiale, e se ho capito bene questa Alpha non dovrebbe darmi problemi... Giusto
2) Vorrei usare SQLite3 come DB
3) Per i Report di Stampa credo che userò PDF-Writer (ma ancora devo leggere la documentazione relativa)

Domande:
1) E' possibile che il DB sia aperto contemporaneamente sui 2 PC_1 e PC_2 senza avere problemi di conflitto. Mi pare che VB6 e DB_Access gestivano la cosa in maniera automatica senza che io intervenissi nel codice. Cioè se su PC_1 e PC_2 lavorano contemporaneamente sulla stessa tabella, devo in qualche modo prevenire possibili errori/conflitti?

2) E' possibile pescare i dati da DB_Access del PC Winzoz (in rete) attraverso Gambas e trasferisli nel mio DB SQLite.

3) E' possibile configurare dei profili utenti di gestione del software? Ossia il PC_1 (utenteA) può fare solo determinate operazioni mentre dal PC_2 (utenteB) se ne fanno altre (rendendo "unvisible" alcune voci del menù o alcuni pulsanti)? Vorrei inserire anche un profilo Admin (io) in grado di avere libero accesso a tutto il software... e che chiaramente può decidere "chi può usare cosa"...
L'idea è che ognuno abbia una propria password ed effettui il login all'avvio. Ed in base all'utente l'Admin decide di assegnargli un profilo (ad esempio l'utenteB (che lavora prettamente sul PC_2) potrebbe loggarsi ed usare anche il PC_1... e viceversa l'utenteA... ma sempre ed esclusivamente per le attività consentiti dal loro profilo...)

Questo mi serve perché vorrei settorializzare il Gestionale, ma con la possibilità di usarlo interamente come Admin da ogni postazione.

4) Ho fatto bene a passare subito a Gambas3?


Ne avrei tante altre ma vorrei procedere con ordine (spero)!

 :)

PS: un grazie particolare a Dex che mi ha fatto scoprire questa comunity!

PPS: un altro a f.surfing per la guida Gambas & SQlite.

PPPS: avevo provato ad installare Gambas3 dal post Repository_SVN ma mi ha dato un errore strano, quindi ho provveduto a fare tutto da terminale.
« Ultima modifica: 12 Ottobre 2010, 12:50:52 da perseo »

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: Gestionale Perseo
« Risposta #1 il: 12 Ottobre 2010, 12:47:42 »

1) Se apri e chiudi la connessione per ogni modifica è difficile che tu ti imbatta in qualche problema....un controllo in più comunque non fa mai male...anzi..

2) devi convertire i dati in maniera che possano essere interpretati..qui sta a te scegliere come...

3) Certo che si può fare...devi solo scegliere come....

4)  Se hai scelto gambas 3 può andare bene ma tieni presente che finchè non viene rilasciato come stabile allora potrebbero cambiare tante cose...tienilo presente.

Offline perseo

  • Maestro Gambero
  • ****
  • Post: 264
    • Mostra profilo
Re: Gestionale Perseo
« Risposta #2 il: 12 Ottobre 2010, 13:03:55 »
Grazie Ceskho!  :2birre:

1) Il mio dubbio è se disgraziatamente due utenti modificano contemporaneamente la stessa tabella del DB. Oppure anche la situazione in cui uno modifica e l'altro è in sola lettura... Come si gestiscono questi controlli... nel senso... sai dove posso trovare una documentazione adeguata di questi problemi?  :)

2) Cioè... Potrei aprire il DB Access, memorizzare i dati che mi intressano in delle variabili e poi riassegnarle al DB SQlite?

3) Pensavo attraverso la creazione di Profili, e che ad ogni profilo corrisponda la possibilità di cliccare su delle voci di menù. Chiaramente ogni utente avrà la sua PaginaMain (che è sempre la stessa, ma settata in base al profilo). Ad esempio: l'UtenteA non ha abilitati determinate voci del menù, mentre l'UtenteB ne ha abilitate altre, e l'Admin le vede tutte...
Potrebbe andare? o mi consigli un metodo differente e più performante?

4) Ho pensato che il rischio ne valesse la candela. Farlo in g2 e poi tra due mesi esce la g3 mi sembra  :bad:. Oppure i cambiamenti potrebbero essere sostanziali e radicali?  :-\
« Ultima modifica: 12 Ottobre 2010, 13:05:47 da perseo »

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re: Gestionale Perseo
« Risposta #3 il: 12 Ottobre 2010, 13:29:40 »
Citazione
1) Ho installato Gambas3 perché da quanto capito, è prossima la versione Beta ufficiale, e se ho capito bene questa Alpha non dovrebbe darmi problemi... Giusto
A parere mio fai bene incominciare con Gambas3.
Citazione
2) Vorrei usare SQLite3 come DB
Citazione
Domande:
1) E' possibile che il DB sia aperto contemporaneamente sui 2 PC_1 e PC_2 senza avere problemi di conflitto. Mi pare che VB6 e DB_Access gestivano la cosa in maniera automatica senza che io intervenissi nel codice. Cioè se su PC_1 e PC_2 lavorano contemporaneamente sulla stessa tabella, devo in qualche modo prevenire possibili errori/conflitti?
Con Sqlite non puoi Gestire il DB su più postazioni, io ti consiglio Mysql. A parere mio non è più difficile da usare che Sqlite, ti allego un esempio per creare e usare Mysql da gambas.
Citazione
3) Per i Report di Stampa credo che userò PDF-Writer (ma ancora devo leggere la documentazione relativa)
Ottima scelta, basta che ti scarichi gli esempi, è molto facile e veloce creare report con questa classe.
Citazione
3) E' possibile configurare dei profili utenti di gestione del software? Ossia il PC_1 (utenteA) può fare solo determinate operazioni mentre dal PC_2 (utenteB) se ne fanno altre (rendendo "unvisible" alcune voci del menù o alcuni pulsanti)? Vorrei inserire anche un profilo Admin (io) in grado di avere libero accesso a tutto il software... e che chiaramente può decidere "chi può usare cosa"...
L'idea è che ognuno abbia una propria password ed effettui il login all'avvio. Ed in base all'utente l'Admin decide di assegnargli un profilo (ad esempio l'utenteB (che lavora prettamente sul PC_2) potrebbe loggarsi ed usare anche il PC_1... e viceversa l'utenteA... ma sempre ed esclusivamente per le attività consentiti dal loro profilo...)
Puoi salvare ogni profilo in un file di testo, oppure anche in un db sqlite visto che sarà unico per ogni macchina e non condiviso. Puoi impostare se un utente può o no aprire certi form, basta impostare delle regole. Inoltre il per ogni utente che si collega a Mysql deve avere un nome utente e password, anche con permessi diversi.
Ma meglio che fai un passo alla volta ;)

P.s l'esempio te lo mando stasera adesso quà non c'è l'ho :D

Offline perseo

  • Maestro Gambero
  • ****
  • Post: 264
    • Mostra profilo
Re: Gestionale Perseo
« Risposta #4 il: 12 Ottobre 2010, 14:28:04 »
Grazie mille! :ok:

Dovrò risolvere anche alcuni problemini legati a MySQL... tempo l'ho installato (mi pare con LAMPP) ma poi ho fatto un gran casino ed ora non ritrovo più le password...  :-[

Una curiosità, ma MySQL ad uso commerciale (cioè nel mio ufficio) non è a pagamento?
« Ultima modifica: 12 Ottobre 2010, 14:40:38 da perseo »

Offline perseo

  • Maestro Gambero
  • ****
  • Post: 264
    • Mostra profilo
Re: Gestionale Perseo
« Risposta #5 il: 12 Ottobre 2010, 15:57:33 »
Intanto ho disinstallato il pacchetto MySQL-server e reinstallato, con il login e la password...

...ed ho testato il funzionamento del file Rubrica, scaricato nella sezione Download-->Guide&Tutorial-->Guida MySQL e Gambas, e mi gira! :)
Ho creato il DB Rubrica da shell e le tabelle, come descritto nella guida.

Finora non mi è sembrato così complicato, ma sono sicuro che a breve finirò così...  :hatecomputer:  ;D

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Gestionale Perseo
« Risposta #6 il: 12 Ottobre 2010, 17:24:05 »
A livello commerciale MySQL è a pagamento! Dipende dall'uso che ne fai. Nel tuo caso, leggi bene le clausole, perchè tu stai creando un'applicazione per l'uso in azienda, non lo vendi...

Se hai problemi, anche se la configurazione potrebbe anche risultare forse un pò più complessa (per giusta causa), puoi usare PostgreSQL, e qui non hai problemi di licenze...

Come anche sugggerito in altre risposte, io escluderei a priori SQLite, perchè oltre ad non essere multiuser, ha anche altri grandissimi limiti, tra cui le dimensioni dei dati (forse non è il tuo caso, ma meglio evitare). Inoltre è troppo semplice, e in futuro, quando avrai modo di conoscerlo, ti accorgerai che è tutt'altro che sicuro.
In sintesi: MySQL è teoricamente più veloce di PostgreSQL (il che dipende dall'assenza di molte caratteristiche presenti invece in PostgreSQL), ma sicuramente PostgreSQL offre una gestione professionale dei dati (simile o al pari di Oracle), con un'alta propensione verso la sicurezza dei database.

Nonostante quando si legge e si sente in giro, l'installazione e l'uso di PostgreSQL non è complicata. L'unica cosa su cui è necessario, o almeno auspicabile, è avere un minimo di conoscenza sulle modalità di accesso, le protezioni dei dati, ecc. Questo sono cose che puoi anche imparare mano mano che usi PostgreSQL, sempre che tu non abbia a completare il progetto in tempi brevi.

Un'ultima cosa legata ai database: il mio consiglio è di installare il server db su una macchina dedicata, che non sia utilizzata come desktop da qualcuno. Questo aumenta enormemente le prestazioni e la velocità di risposta, oltre ad essere più sicuro.

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.273
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: Gestionale Perseo
« Risposta #7 il: 12 Ottobre 2010, 17:35:15 »
Senza contare che adesso Oracle e' proprietario di MySql...  :bad:

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: Gestionale Perseo
« Risposta #8 il: 12 Ottobre 2010, 19:55:13 »
se scrivi un software opensource non hai alcun problema di licenze con mysql

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re: Gestionale Perseo
« Risposta #9 il: 12 Ottobre 2010, 20:27:28 »
Ecco l'esempio mysql-gambas. Nel modulo modMain metti il tuo utente e password. Si crea il database e la tabella da solo, poi c'è il solito esempio della rubrica  :2birre:

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re: Gestionale Perseo
« Risposta #10 il: 12 Ottobre 2010, 23:35:15 »
ciao perseo
io avevo cominciato con sqlite per la sua portabilità, ma man mano che il flusso di dati aumentava mostrava tutte le sue debolezze, poi sono passato a mysql.
parti direttamente con mysql o postgress come ti hanno consigliato, sqlite va bene per gestire piccoli programmi tipo rubriche telefoniche o agende.
per gambas fai bene a partire dalla 3 anche se si dice in versione alpha funziona bene, io ho cominciato con gambas2 e ora non posso  passare alla 3 in quanto devo fare parecchie modifiche al mio progetto.
l'esempio che ti ha postato golia è ottimo per cominciare, parti da li e poi appena hai problemi chiedi.
Per pdfWriter non ti preoccupare è molto più semplice di come sembra, appena sarai pronto per il tuo primo report ti posteremo dei programmi di esempio.
per la tua richiesta sui profili, io nel mio progetto ho creato un form di accesso con inserimento del nome e password (ogni operatore ne ha uno) poi una volta entrato si apre il main e in un file (criptato) assegno i permessi di cio che possono o non possono fare con il programma, per alcuni utenti rendo alcune voci del menu invisibili, un solo utente (amministratore) ha accesso completo al programma.

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Gestionale Perseo
« Risposta #11 il: 13 Ottobre 2010, 10:43:00 »
Senza contare che adesso Oracle e' proprietario di MySql...  :bad:

Infatti, e la cosa non piace per nulla...

Teniamo presente che hanno già fatto dei passi negativi verso l'open-source, chiudendo i server di test a PostgreSQL.
Il fatto che MySQL sia nato sotto libera licenza non blocca il fatto che, un momento qualsiasi, Oracle affossi il progetto.

PostgreSQL è completamente libero, e oltre ad essere abbastanza al passo con i più blasonati rdbms commerciali, è manutenuto da un nutritissimo gruppo di persone, oltre agli utenti stessi. Inoltre, ha un alto grado di compatibilità con Oracle (provato sul campo), per cui si potrebbe considerare quasi intercambiabile (forse esagero, ma ci stà...).

Offline perseo

  • Maestro Gambero
  • ****
  • Post: 264
    • Mostra profilo
Re: Gestionale Perseo
« Risposta #12 il: 13 Ottobre 2010, 15:33:01 »
Perfetto (una parola grossa  :D )
...ho seguito sia la guida Gambas&MySQL sia il progetto database (quello degli esempi di Gambas) e finora non ho incontrato grosse difficoltà... limitatamente alla connessione, creazione e immissione/modifica/eliminazione di tabelle e record.

PostgreSQL un pochino lo conosco perché me ne interessai quando ero orientato al Python per la creazione del suddetto gestionale... e ne parlano un gran bene.

Per il momento credo che rimarrò su MySQL, soprattutto perché non avendo grosse conoscenze di gestione di database (circoscritta a qualche nozione basilare e qualche funzione SQL) forse ci sono più guide, ma sicuramente non escludo la possibilità futura di migrare su PostgreSQL.

Ad esempio... riguardo ai DB ho una curiosità.

1) ipotizzando che nel mio database ci siano registrati 1'000 utenti, e che ognuno di questi richieda periodicamente delle prestazioni, per alleggerire il carico di dati e l'interrogazione degli stessi, come si fa ad archiviare i vecchi lavori (tranne gli ultimi eseguiti)?
Mi spiego meglio, Tizio viene da me per la decima volta... ma a me, per l'inserimento progressivo, servono solo l'ultimo o le ultime due prestazioni effettuate... come faccio a non far vedere al DB tutte le altre?

Cerco di esprimermi a parole mie... io vorrei "congelare" le vecchie richieste in modo che il DB rimanga più snello, però nel frattempo vorrei anche avere la possibilità di controllare tutto l'archivio.
a) devo creare un DB temporaneo di volta in volta che apro il programma (o a cadenze settimanali/mensili), contenente solo gli ultimi lavori richiesti da ogni Tizio?
b) c'è la possibilità di "congelare" dei record mantenendo sempre lo stesso DB?
c) altra strada...

Temo che la risposta esatta sarà la "c"...  :D

PS: scusate se posto queste domande probabilmente banali, ma sono ...very newbie.  :-[
« Ultima modifica: 13 Ottobre 2010, 15:38:26 da perseo »

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Gestionale Perseo
« Risposta #13 il: 13 Ottobre 2010, 16:53:34 »
Quello che chiedi è una forma di ingegnerizzazione del sistema che dipende da molti fattori, tra cui alcuni che hai elencato.

Sia MySQL che PostgreSQL possono gestire delle viste, ovvero selezionare in modo stabile solo alcune informazioni prese da altre tabelle (una o più nella setssa vista).
La quantià di dati che pensi di memorizzare sono un fattore preponderante, ma tieni conto che se parli di sole alcune migliaia di record, il problema manco si pone, a meno che il tutto non giri un un C64...  ;D
Tutti e due i motori gestiscono mole di dati dell'ordine dei terabyte, e solo in questo caso un'analisi sarebbe opportuna, riguardo ovviamente la base hardware.
Un'altro fattore fondamentale è la corretta distribuzione dei dati, un pò come il trattare con gli oggetti e le classi in un linguaggio. Creare un layout snello porta a una migliore gestione e a migliori performance.

La tua idea di caching dei dati può essere un'idea, ma poi la gestione potrebbe risultare un pò complessa. Puoi anche prevedere, anzi è auspicabile, delle stored-procedure (procedure che risiedono sul db stesso) che fanno tutto il lavoro ma, ovviamente presuppone un minimo di conoscenza di plsql (linguaggio script sql dedicato al db).

Inoltre, devi prima capire come dividere i vari strati del sistema: interfaccia, logica, archivio. Se integri tutto in un blocco, ovvero usi Gambas per fare tutto (db a parte), la cosa sarà alquanto complessa.

Offline perseo

  • Maestro Gambero
  • ****
  • Post: 264
    • Mostra profilo
Re: Gestionale Perseo
« Risposta #14 il: 13 Ottobre 2010, 17:52:40 »
...a meno che il tutto non giri un un C64...  ;D

hahahaah  ;D

In effetti è successo qualche anno fa di avere dei PC un po' datati e quando il software doveva chiudere la giornata ci metteva anche 30-40 secondi per eseguire l'operazione...  :rolleyes:
Poi con l'upgrade dei PC il problema si è risolto, però mi sono sempre chiesto come velocizzare il tutto. Parlo di un DB Access, e non so se MySQL o PostgreSQL siano più veloci nelle operazioni.

Da quello che ho potuto capire dal tuo post la cosa è fattibile ma complica notevolmente il tutto, quindi diciamo che la mettiamo tra le opzioni di codice bianco...  :)