Gestionale: sviluppo della comunity!

lunedì 17 gennaio 2011 - 09.00

neo996sps Profilo | Junior Member

Ciao a tutti,

ho notato che il 90% dei programmatori presenti in questo forum sono sempre alle prese con la creazione di software gestionali. Ora, dato che stò iniziando anch'io a muovere questi passi avrei una proposta: creare un software gestionale tutti assieme. So che si tratta di un'operazione molto vasta e complessa, ma credo che sarà una cosa utile per tutti avere un gestionale aperto a cui tutti possano partecipare e contribuire.

Voi cosa ne pensate?

darkeric Profilo | Senior Member

Anch'io stò creando un gestionale di base

per l'open Source che proponi ti posso dare la mia disponibilità
anche se non sono espertissimo ancora a livello di programmazione
di gestionali ne ho usati parecchi.

Ciao

neo996sps Profilo | Junior Member

Ciao e grazie per la disponibilità,

per quanto riguarda il gestionale io lo realizzerei con un database mysql, in quanto è famoso per la sua robustezza ed è quindi installabile su server o in locale.
allora, io inizierei a tracciare a grandi linee le funzioni base che il gestionale dovrebbe avere: anagrafiche clienti, anagrafiche fornitori, anagrafiche articoli, creazione preventivi, creazione DDT, creazione fatture, creazione note di credito.
Le funzioni che potrebbero essere implementabili in futuro potrebbero essere: scadenziario, interfaccia per e-commerce, modulo riparazioni ed assistenze tecniche.

Attendo fiducioso un primo riscontro, intanto io preparo i primi form

--- EDIT

detto fatto, ecco una primissima interfaccia

darkeric Profilo | Senior Member

^_^
per come la vedo io la più importante tabella necessaria è quella dei Movimenti
dove possiamo immagazzinare
tutti i tipi di documento come note di accredito fatture, bolle, inventari, ordini, preventivi, etc

OK per il DB mysql


neo996sps Profilo | Junior Member

Ecco il codice

darkeric Profilo | Senior Member

carino
che si fa allora?

neo996sps Profilo | Junior Member

direi innanzitutto di capire che cos'abbiamo a disposizione. Io per esempio ho un PC che mi fa da server mysql che richiamo tramite IP. Tu cosa usi per far girare mysql?

darkeric Profilo | Senior Member

il connector mysql.net

neo996sps Profilo | Junior Member

Ecco la versione con i primi campi per l'anagrafica cliente. Tu cosa ne dici? Si ricorda comunque che chi si vuole attaccare al progetto lo può fare tranquillamente...

neo996sps Profilo | Junior Member

ok. Allora direi di preparare un form dove inserire le impostazioni in alcune variabili d'ambiente, per dare la possibilità di modificare al volo le impostazioni di connessione.

darkeric Profilo | Senior Member

quello che non capisco è come facciamo a lavorarci insieme
senza che uno cancelli il lavoro dell'altro?

neo996sps Profilo | Junior Member

potremmo organizzarci il lavoro. Ad esempio, io prendo la gestione dei clienti tu quella degli articoli. Comunque adesso cerco una soluzione

neo996sps Profilo | Junior Member

ecco il dump per la cartella clienti:


CREATE TABLE IF NOT EXISTS `clienti` (
`id` bigint(50) NOT NULL auto_increment,
`cod_cliente` varchar(10) NOT NULL,
`ragione_sociale_1` varchar(255) NOT NULL,
`ragione_sociale_2` varchar(255) default NULL,
`indirizzo` varchar(255) NOT NULL,
`PIVA` varchar(11) default NULL,
`CF` varchar(16) NOT NULL,
`id_categoria` bigint(50) NOT NULL,
`id_pagamento` bigint(50) NOT NULL,
`id_contatto` bigint(50) NOT NULL,
`id_comune` bigint(50) NOT NULL,
`id_listino` bigint(50) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

kataklisma Profilo | Senior Member

Ragazzi, la voglia che avete è ammirabile, ma a patto che abbiate le giuste conoscenze sia nel campo dello sviluppo sia nel campo dei gestionali, state incominciando col piede sbagliato.

Un progetto del genere è grosso, molto grosso e un gestionale completo supera tranquillamente la soglia delle 80000 righe di codice, come pensate di poterlo sviluppare se non avete stilato neanche una lista dei requisiti (funzionali e non!)?

Serve criterio, una corretta ingegnerizzazione e un'architettura ben studiata!

Ecco un'elenco di funzionalità che qualsivoglia gestionale deve gestire :

Anagrafica Clienti/Fornitori,
Immissione Primanota,
Controllo saldi,
Schede contabili,
Estratti conto,
Saldoconti Clienti/fornitori,
Scadenziari,
Gestione Agenti e relative provvigioni,
ratei risconti e competenze varie,
Cespiti e immobilizzazioni,
Anagrafiche articoli,
Gestione documentale (emissioni dei documenti, revisione, salvataggio e ripercussioni sulle altre funzionalità)
Movimenti di magazzino
Schede articoli
Gestione delle distinte
Cataloghi
Gestione indirizzi di spedizione
Gestione dei progressivi di magazzino
Gestione della scontistica su clienti, articoli, categorie etc...
Gestione delle particolarità sui prezzi sugli sconti etc...
Apertura e chiudura degli anni contabili,
Ammortamenti
Gestione inventari,
Gestione dei registri IVA,
Gestione modulistica (730, unico, entratel etc etc...)
Gestione Multi-Azienda
Gestione pagamenti e spese,
Interfacciamento con sistemi Pos e metodi di pagamento diversi da quelli bancari e/o contanti.

Per non parlare di :

Stampe personalizzabili tramite tools,
Gestione e prevenzione di bug non gestiti,
tools di backup della base dati
Gestione della licenza

E ancora :

Sviluppo di linguaggi interni per la possibilità di personalizzare il software nei vari "settori",
etc...

Come vedete non è semplice ma se la voglia e sopratutto le competenze pensate di averle, partite dal foglietto di carta, inutile disegnare form ora.

;) Ciao!
------------------------------------------
Ignazio Catanzaro

http://blogs.dotnethell.it/swdev/

neo996sps Profilo | Junior Member

Ciao Kataklisma,

tu sembri piuttosto ferrato nella materia dello sviluppo in team. Cosa ne diresti di unirti a noi per aiutarci nella creazione del gestionale? Credo che l'esperienza di chi è interessato sia fondamentale per la buona riuscita del progetto. Comunque il tuo consiglio di partire dalla carta mi sembra ottimo. Adesso mi metto a stilare per bene cosa server ad un gestionale per funzionare bene.

kataklisma Profilo | Senior Member

>Ciao Kataklisma,

Ciao :)

>tu sembri piuttosto ferrato nella materia dello sviluppo in team.
>Cosa ne diresti di unirti a noi per aiutarci nella creazione
>del gestionale?

Sinceramente mi piacerebbe moltissimo, sono molto legato a questa community ma il problema è il tempo ed il mio lavoro me ne porta via tanto :)

>Credo che l'esperienza di chi è interessato sia
>fondamentale per la buona riuscita del progetto. Comunque il
>tuo consiglio di partire dalla carta mi sembra ottimo.

Bene ;)

>Adesso
>mi metto a stilare per bene cosa server ad un gestionale per
>funzionare bene.

Ottimo, e se vuoi un'altro consiglio visual studio aprilo solo e soltanto quando ogni dettaglio è stato studiato sia a livello funzionale sia a livello di architettura del codice, tanto non avete il fiato sul collo!!
------------------------------------------
Ignazio Catanzaro

http://blogs.dotnethell.it/swdev/

darkeric Profilo | Senior Member

Grazie per l'intervento

quello che dici tu è vero

ma credo che l'idea iniziale è quella di partire con le basi
della gestione senza gestire per esempio la contabilità
quella la si lascia al commercialista

saprai bene che la maggior parte dei gestionali in circolazione
non gestiscono la contabilità, al massimo, si interfacciano
ad un altro software specifico per contabilità.

io ti posso dire che quello che stò sviluppando l'ho creato partendo dalla creazione del DB
e contemporaneamente con la creazione dei form
chiaramente è capitato di dover rivedere in corso d'opera il DB
ma alla fine credo di stare facendo un buon lavoro

come metodo non sarà professionale, ma non faccio il programmatore di mestiere
quindi non mi preoccupo di certi dettagli!



neo996sps Profilo | Junior Member

Comunque allo stato attuale c'è:

- tanta voglia di fare del bene;
- 6 form: principale, form delle impostazioni, form elenco clienti, form aggiungi cliente (da scrivere il codice per l'inserimento e per le funzioni), form per categorie anagrafica (manca il cancellamento delle categorie inserite con controllo di dipendenza)
- 2 tabelle MySQL: cat_anagrafica, clienti

Direi che andando avanti così potremmo fare qualcosa di carino o comunque creare una base per far si che il progetto sia studiabile da altri utenti...

kataklisma Profilo | Senior Member

>Grazie per l'intervento

Di nulla :)

>quello che dici tu è vero
>
>ma credo che l'idea iniziale è quella di partire con le basi
>della gestione senza gestire per esempio la contabilità
>quella la si lascia al commercialista

Quindi dovreste gestire l'intero magazzino e le sue movimentazioni e comunque bisognerebbe gestire la documentazione fiscale/contabile :)

>saprai bene che la maggior parte dei gestionali in circolazione
>non gestiscono la contabilità, al massimo, si interfacciano
>ad un altro software specifico per contabilità.

Dipende cosa intendi per gestionale, se intendi i gestionali opensource che si trovano in giro posso darti conferma ma se parli di veri gestionali come Passepartout Mexal, SAP, Italsystem, Zucchetti e molti altri la gestione della contabilità è d'obbligo, anzi ti dirò di piu, molti studi di commercialisti adottano queste soluzioni e le propinano ai clienti per una gestione omogenea.

>io ti posso dire che quello che stò sviluppando l'ho creato partendo
>dalla creazione del DB
>e contemporaneamente con la creazione dei form
>chiaramente è capitato di dover rivedere in corso d'opera il
>DB
>ma alla fine credo di stare facendo un buon lavoro
>
>come metodo non sarà professionale, ma non faccio il programmatore
>di mestiere
>quindi non mi preoccupo di certi dettagli!

Ecco il punto, sviluppare un software è un po come costruire una casa, prima ci sono le scelte iniziali, poi il disegno e la progettazione, poi i prototipi e poi la costruzione vera e propria, se si sviluppa per hobby non devi obbligatoriamente addentrarti nelle strane ma necessarie logiche dell'ingegneria del software ma se si sviluppa per professione è d'obbligo.

Il software deve necessariamente essere scalabile, modulare, con un codice chiaro, pulito e facilmente fixabile/aggiornabile, e non è assolutamente semplice :)

Comunque i miei sono consigli perché per quanto mi riguarda questo per molti potrebbe essere un'ottimo esercizio e se viene visto come tale è bene seguire tutte le linee che un corretto sviluppo software impone :)


>
>
>

------------------------------------------
Ignazio Catanzaro

http://blogs.dotnethell.it/swdev/

neo996sps Profilo | Junior Member

tutti questi sono sicuramente ottimi suggerimenti, ma l'idea è quella di realizzare un piccolo gestionale per la PMI che non richiede cose particolari. Io zucchetti e passpartout li ho visti in funzione e per poter lavorare bene e velocemente è d'obbligo il loro corso. Oltretutto stiamo parlando di soluzioni gestionali molto costose e complesse, utilizzate al 90% da imprese molto grandi.

kataklisma Profilo | Senior Member

>tutti questi sono sicuramente ottimi suggerimenti, ma l'idea
>è quella di realizzare un piccolo gestionale per la PMI che non
>richiede cose particolari. Io zucchetti e passpartout li ho visti
>in funzione e per poter lavorare bene e velocemente è d'obbligo
>il loro corso. Oltretutto stiamo parlando di soluzioni gestionali
>molto costose e complesse, utilizzate al 90% da imprese molto
>grandi.

Beh sbagli quelli sono gestionali per PMI e te lo assicuro perchè con Passepartout ci lavoro....SAP invece è per le grosse aziende o comunque per le multinazionali (>500 dipendenti in genere).

Il costo per esempio di Passepartout Mexal è "ridicolo" per la mole di funzionalità che gestisce....

;)

------------------------------------------
Ignazio Catanzaro

http://blogs.dotnethell.it/swdev/

darkeric Profilo | Senior Member

Io conosco per utilizzo DIBE3, Mexal Passepartout, Bollicine

ti posso dire che anche se mexal gestisce la contabilità non lo reputo un prodotto cosi completo
tanto che l'anno scorso abbiamo preso Bollicine
che dovrebbe essere scritto in Visual Fox Pro e che pur essendo un prodotto
molto flessibile non ha gestione propria della contabilità, infatti si interfaccia a Adhoc che se
non erro è Zucchetti.

questo solo per dire.
io mi metto in standby per la lavorazione
ma resto in ascolto per eventuali info.


neo996sps Profilo | Junior Member

Buongiorno a tutti,

direi di evitare un confronto tra un piccolo gestionale scritto a più mani da utenti di una comunity contro uno scritto da software house. Comunque io passpartout ad un cliente l'ho eliminato perchè non faceva quello che gli serviva... in ogni caso per una PMI ( quindi meno di 5 dipendenti ) passpartout non lo consiglierei mai e poi mai, tantomeno un software zucchetti che vanno bene per aziende grandi...

kataklisma Profilo | Senior Member

>Buongiorno a tutti,

Buongiorno :)

>direi di evitare un confronto tra un piccolo gestionale scritto
>a più mani da utenti di una comunity contro uno scritto da software
>house.

Questo mi sembra ovvio :) ed è un'ottima cosa saperlo....

>Comunque io passpartout ad un cliente l'ho eliminato perchè
>non faceva quello che gli serviva...

Ragazzi i software vanno conosciuti a fondo, ad esempio Mexal implementa un'ambiente di sviluppo interno chiamato Sprix/Collage che permette di creare qualsiasi verticalizzazione e personalizzazione del software quindi è impossibile che un'utenza media non sia soddisfatta da Passepartout.

Per non parlare delle librerie di sviluppo date in dotazione ai programmatori C#/Java/C++/Asp.Net....

Nella mia azienda sono stati creati veri e propri "programmi" paralleli a Mexal che gestiscono in toto il processo produttivo di salottifici, marmerie, lavorazioni del legno, spugnifici etc...

>in ogni caso per una PMI
>( quindi meno di 5 dipendenti ) passpartout non lo consiglierei
>mai e poi mai, tantomeno un software zucchetti che vanno bene
>per aziende grandi...

Torno a ripetere, prima di scrivere anche solo una riga di codice è bene informarsi seriamente su cosa si sta andando a lavorare : una PMI puo anche arrivare a 50 milioni di euro di fatturato e 250 dipendenti, quella di cui parli tu è la micro impresa che comunque fa parte delle PMI.

Ragazzi i miei sono consigli e prendeteli esclusivamente come tali :)

Buona giornata!
------------------------------------------
Ignazio Catanzaro

http://blogs.dotnethell.it/swdev/

neo996sps Profilo | Junior Member

ma per forza. Questo è un forum, serve per confrontarsi e per avere nuovi spunti, mica per imporsi! Ogni idea è sempre bene accetta, ovviamente questo è un programmino molto piccolo che non andrà mai a fare concorrenza a Passpartout (o altri gestionali che sono in giro da anni),a una soluzione open source creata in seno alla comunity dotnethell.

kataklisma Profilo | Senior Member

>ma per forza. Questo è un forum, serve per confrontarsi e per
>avere nuovi spunti, mica per imporsi!

Ci tenevo a sottolinearlo visto alcuni precedenti :) ma fortunatamente ci sono persone che capiscono che la mia non è imposizione ma voglia di consigliare ed aiutare...

>Ogni idea è sempre bene
>accetta, ovviamente questo è un programmino molto piccolo che
>non andrà mai a fare concorrenza a Passpartout (o altri gestionali
>che sono in giro da anni),a una soluzione open source creata
>in seno alla comunity dotnethell.

Perfetto se questo è lo spirito, forza, buttate giu una lista di funzionalità, gestite le dipendenze fra di esse, progettate il codice e sviluppate ;)

Buona fortuna!

P.S non posso partecipare attivamente ma se ho due minuti di tempo vi aiuto volentieri :)
------------------------------------------
Ignazio Catanzaro

http://blogs.dotnethell.it/swdev/

neo996sps Profilo | Junior Member

guarda, ogni aiuto è ben accetto, anche solo dare un'indicazione su come migliorare una funzione. Credo comunque che per questa sera sarò in grado di pubblicare la versione definitiva della funzione Clienti.

neo996sps Profilo | Junior Member

Ecco il dump per la nuova tabella clienti e per la categoria delle anagrafiche:

CREATE TABLE IF NOT EXISTS `cat_anagrafica` (
`id` bigint(50) NOT NULL auto_increment,
`categoria` varchar(50) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ;

CREATE TABLE IF NOT EXISTS `clienti` (
`id` bigint(50) NOT NULL auto_increment,
`id_categoria` bigint(50) default NULL,
`ragione_sociale_1` varchar(255) default NULL,
`ragione_sociale_2` varchar(255) default NULL,
`indirizzo_1` varchar(255) default NULL,
`indirizzo_2` varchar(255) default NULL,
`CAP` varchar(10) default NULL,
`citta` varchar(100) default NULL,
`provincia` varchar(2) default NULL,
`stato` varchar(3) default NULL,
`codice_fiscale` varchar(16) default NULL,
`partita_IVA` varchar(11) default NULL,
`id_imposte` bigint(50) default NULL,
`id_pagamento` bigint(50) default NULL,
`id_listino` bigint(50) default NULL,
`banca_appoggio` varchar(50) default NULL,
`sede` varchar(50) default NULL,
`ABI` varchar(6) default NULL,
`CAB` varchar(6) default NULL,
`CIN` varchar(1) default NULL,
`conto_corrente` varchar(50) default NULL,
`note_pagamento` longtext,
`fido` double default NULL,
`swift` varchar(50) default NULL,
`iban` varchar(50) default NULL,
PRIMARY KEY (`id`),
KEY `Ragione sociale 1` (`ragione_sociale_1`),
KEY `Codice Fiscale` (`codice_fiscale`),
KEY `ID categoria ditta` (`id_categoria`),
KEY `ID ditta` (`id`),
KEY `ID imposte` (`id_imposte`),
KEY `ID listino` (`id_listino`),
KEY `ID pagamento` (`id_pagamento`),
KEY `Partita IVA` (`partita_IVA`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=6 ;

e queste sono le ultime modifiche:

- popolamento combo box categoria da tabella;
- inserimento di tutti i valori nel database;
- ricerca in base al campo ragione_sociale_1;

darkeric Profilo | Senior Member

io la ricerca ti consiglierei di farla non solo sulla ragione sociale
ma su tutti i campi di anagrafica
compresa partita iva e codice fiscale

neo996sps Profilo | Junior Member

Aggiornamento:

al momento la funzione Clienti è completa al 70%. E' possibile:

- inserire nuovi clienti
- modificare i dati inseriti
- ricercare un cliente in base a ragione sociale, partita iva, codice fiscale o provincia.
- eliminazione cliente. Andrà modificata per impedire la cancellazione nel caso esista un documento ad esso legato.
Alla funzione manca:


- stampa scheda cliente

---- EDIT

Si ricorda ai partecipanti al forum che se vogliono possono partecipare alla creazione del software.

neo996sps Profilo | Junior Member

Ho paura che il progetto sia destinato a naufragare... mi sembra di essere il solo che lo vorrebbe portare avanti. Qualcuno si unisce? Altrimenti me lo porto avanti in solitaria... tanto per sapermi regolare...

luigidibiasi Profilo | Guru

>Ho paura che il progetto sia destinato a naufragare...
Purtroppo ogni gestionale ha una vita sua (parlo per esperienza personale)... ciò che va bene per un'azienda non va bene per l'altra... per le piccolissime imprese (< 5 dipendenti) credo che lo sviluppo vada effettuato con il titolare a fianco in modo che ogni suo desiderio venga esaudito (in caso contrario ti farà rompere e ricostruire miliardi di volte la stessa form)

>per quanto riguarda il gestionale io lo realizzerei con un database mysql, in quanto è famoso per la sua >robustezza ed è quindi installabile su server o in locale.
Qui credo ci sia un errore di fondo...

Se la tua idea è creare un software base da espandere per i vari casi ti consiglio di non partire dalle anagrafiche ma (come qualcuno già ti ha suggerito) dall'analisi dei requisiti e dalla scrittura delle API che gestiranno i vari oggetti usati dal software...

ad esempio:

non creare la form che va a scrivere direttamente nelle tabelle AnagraficheClienti...

progetta prima le classi cliente, articoli etc... con tutti gli attributi, poi dopo progetta la classe Anagrafiche che gestisce il salvataggio e l'update. Successivamente (o prima) progettati il layer per il salvataggio sul DBMS in modo da poterlo cambiare se il cliente non vuole usare SQL ma MySQL o Postgree etc...

un esempio a grandi linee..

La classe Anagrafiche avrà referenziata un classe DataLayer (nome di fantasia) che si occupa di salvare fisicamente i dati su DBMS.

Quando chiami le varie funzioni:
Anagrafiche.saveCliente(ClienteObj); Anagrafiche.updateCliente(clienteObj) Anagrafiche.saveArticolo(ArticoloObj)

la classe Anagrafiche chiamerà il DataLayer per chiedergli di salvare su DBMS...

Spero di aver reso l'idea... in genere quando parlo di gestionali divento sempre un po' confusionario
Luigi Di Biasi


http://www.dibiasi.it/
http://netsell.dibiasi.it - ecomm software -
http://blogs.dotnethell.it/luigidibiasi/

HavanaMan Profilo | Junior Member

Seguo il topic, interessante.

Luigi ci fai un esempio di quello che intendi?

Intendo un progettino con un form con astrazione dei livelli, in concetto lo conosco ma mi piacerebbe vedere una "demo"

O cmq un concetto di API come dicevi!

Spero di non chiedere troppo ma sicuro sarà utile amche ai ragazzi,

Grazie
Luca

neo996sps Profilo | Junior Member

Ciao Luca,

se hai voglia di entrare a far parte del progetto fammi sapere cosa sai fare e cosa vuoi fare, così ciesco a regolarmi con lo sviluppo delle funzioni

HavanaMan Profilo | Junior Member

Ciao neo,

in verità sono un normalissimo programmatore vb.net in cerca di informazioni, ho letto del progetto e lo sto seguendo ma pure io ho poco tempo e non sono sicuramente ad alti livelli, poi sto in Svizzera e ci sono molte differenze per quanto riguarda alcune parti.

Mi interessava però, e penso serva anche a voi, trattare il discorso "separazione parte grafica da logica a connessione al db"...penso che sarebbe un approccio corretto...malgrado pure io non l'ho mai utilizzato avendo sviluppato solo qualche applicazione interna all'azienda.

Rimango in attesa di una risposta da Luigi sempre che abbia voglia di fare un esempio del tipo:

Form con datagridview con elenco e varie textbox per il dettaglio
Classe con salva / aggiorna / ecc
E layer del database

Forse chiedo troppo ma ci conto

neo996sps Profilo | Junior Member

credo funzioni in questa maniera:

- si crea la classe in cui si inseriscono le istruzioni da richiamare con gli eventi
- si crea il form e si richiama la classe
- si fa eseguire la classe in base all'evento, ereditando le funzioni interne

Per esempio:

Classe cliente
funzione estraiclienti
SELECT * FROM clienti ORDER BY ragione sociale
fine funzione

funzione salva_nuovo_cliente
INSERT INTO clienti (campi) VALUES (valore)
fine funzione

fine classe

dovrebbe essere una cosa del genere

HavanaMan Profilo | Junior Member

Si ma così non differenzi il lato logico dalla connessione al database.

O sbaglio?

Poi mettiamo che io ho un form con una DGV, collego la mia classe con la query "estrazioneClienti"...

Cosa faresti? La metti in un array e con l'array riempi la DGV? O come?

luigidibiasi Profilo | Guru

No neo996sps, faccio riferimento a quanto giustamente riportato qui:

>Ragazzi i software vanno conosciuti a fondo, ad esempio Mexal

in particolar modo:
>implementa un'ambiente di sviluppo interno >chiamato Sprix/Collage che permette di creare qualsiasi >verticalizzazione e personalizzazione del software >quindi è impossibile che un'utenza media non sia >soddisfatta da Passepartout.

qui:
>Per non parlare delle librerie di sviluppo date in dotazione ai programmatori C#/Java/C++/Asp.Net....

e qui:
>Nella mia azienda sono stati creati veri e propri "programmi" paralleli a Mexal che gestiscono in toto il >processo produttivo di salottifici, marmerie, lavorazioni del legno, spugnifici etc...

Se vuoi creare un progetto open-source, che sia utile ai più, sono queste le features da mettere a disposizione... la totale personalizzazione e astrazione. Scrivere le query all'interno del progetto già lo lega in qualche modo ad una base di dati di tipo dbms... non puoi ad esempio usare lo stesso progetto per farlo funzionare su file flat... (cosa invece possibile astraendo il datalayer)

Non voglio sembrare cupo ma voglio farti un'idea dei tempi di sviluppo (se lo fai da solo)... in giugno 2006 per necessità interne ho iniziato a scrivere un gestionale (da qui l'odio che provo verso questi ultimi) ... è entrato in produzione 'forzata' (bug-check) nel 2007... in questo momento ho il progetto aperto ... (odio profondo verso i gestionali!)


>@HavanaMan
se riesco posto un progetto di esempio (molto spartano eh!)


Luigi Di Biasi


http://www.dibiasi.it/
http://netsell.dibiasi.it - ecomm software -
http://blogs.dotnethell.it/luigidibiasi/

HavanaMan Profilo | Junior Member

Grazie, molto volentieri, mi interessa l'astrazione dei tre livelli presentazione logica e db...

E' sicuramente il modo migliore per andare avanti.

Sto provando un po...e non mi quadra molto il passaggio tra per esempio dll anagrafica con classe cliente e funzione estrai verso la parte form.

Grazie

luigidibiasi Profilo | Guru

>Grazie, molto volentieri, mi interessa l'astrazione dei tre livelli
>presentazione logica e db...

ti ho allegato un esempio, spero sia chiaro. Ho aggiunto i commenti nei vari progetti poiché non mi sembra il caso di intasare questo thread.

>Sto provando un po...e non mi quadra molto il passaggio tra per
>esempio dll anagrafica con classe cliente e funzione estrai verso
>la parte form.

Guardati i vari progetti. Tieni presente che ti serve SQLExpress per far girare anche il layer basato sul dbms...

>Si ma così non differenzi il lato logico dalla connessione al
>database.
Usando due layer distinti che ritornano lo stesso oggetto Cliente (che implementa l'interfaccia comune IClienteObject)

>
>Grazie

Luigi Di Biasi


http://www.dibiasi.it/
http://netsell.dibiasi.it - ecomm software -
http://blogs.dotnethell.it/luigidibiasi/

HavanaMan Profilo | Junior Member

Grazie ci do un occhio.

Occhio dato

Interessantissima la cosa, me la devo studiare un po' però ho un dubbio.

Mettiamo volessi che in Form1 (layout presentation) una DGV che si riempa di TUTTI i clienti o comunque con una query sulla tabella clienti e non solo il dettaglio di uno dovrei:

1) creare una nuova Function in test_interface chiamata GetClienti per esempio
2) una funzione GetClienti in test_impl_SQL e su questa ci siamo

ma non capisco come passare tutta la lista dei clienti......sono un po' perso.

Cmq la via è quella da seguire anche per i nostri amici che hanno aperto il topic.

luigidibiasi Profilo | Guru

Dgv=datagridview giusto?

>Mettiamo volessi che in Form1 (layout presentation) una DGV che
>si riempa di TUTTI i clienti o comunque con una query sulla tabella
>clienti e non solo il dettaglio di uno dovrei:
>
>1) creare una nuova Function in test_interface chiamata GetClienti
SI
>2) una funzione GetClienti in test_impl_SQL e su questa ci siamo
SI, in realtà devi farlo in entrambe le implementazioni per come è fatto il progetto, sia in quello per flatfile che quello per sql
>
>ma non capisco come passare tutta la lista dei clienti......sono
>un po' perso.

farai una cosa del tipo: (la scrivo solo per sql)
function GetClienti as List(Of ClienteObject) dim toReturn as new List(Of ClienteObject) dim toAdd as ClienteObject ' QUI METTI IL CODICE PER EFFETTUARE LA QUERY ' NON RISCRIVO LA SQLCONN E LA SQLCOMMAND while sqlr.read toAdd = new ClienteObject(_sqlr("nome"),sqlr("cognome")) toReturn.add(toAdd) end while return toReturn end function

una volta che hai a disposizione una lista di clienteObject effettui un ulteriore passaggio (la lista diciamo è un'astrazione dell'informazione): mappare l'informazione nella gridview (puoi vederlo come un ulteriore layer del tipo... ho l'informazione, dove la mostro?) questo perché tu vuoi la lista nella dgv, altri potrebbero volerla mappata in una pagina web, altri in una treeview.. etc etc..

function MapListToDgv(byref dgv as datagridview) dgv.columns.add("","nome") dgv.columns.add("","cognome") dim t(1) as string for each it as clienteObject in [AnagraficaSQL].Getclienti() t(0)= it.getnome t(1) = it.getcognome dgv.rows.add(t) next

ovviamente potresti pensare di creare un nuovo oggetto ListaClienti (che fa sia da lista ma che è mappabile direttamente nella grid) [ora non ricordo come si fa' ma è possibile farlo!]
Luigi Di Biasi


http://www.dibiasi.it/
http://netsell.dibiasi.it - ecomm software -
http://blogs.dotnethell.it/luigidibiasi/

HavanaMan Profilo | Junior Member

Ma non dovrebbe essere qualcosa cosi?

Function GetClienti() As List(Of test_interface.IClienteObject) Dim toReturn As New List(Of test_interface.IClienteObject) Dim toAdd As test_interface.IClienteObject Dim sqlc As SqlClient.SqlConnection = New SqlClient.SqlConnection(ConnectionString) sqlc.Open() Dim sqlz As SqlClient.SqlCommand = New SqlClient.SqlCommand("select * from manager", sqlc) Dim sqlr As SqlClient.SqlDataReader = sqlz.ExecuteReader While sqlr.Read toAdd = New ClienteObject(sqlr("nome"), sqlr("cognome")) toReturn.Add(toAdd) End While Return toReturn End Function

e in test interface: Function GetClienti() As List(Of IClienteObject)

Però mi da un errore in test_impl_sql:


Class 'AnagraficaCliente' deve implementare 'Function GetClienti() As System.Collections.Generic.List(Of IClienteObject)' per l'interfaccia 'test_interface.AnagraficaCliente'.

Sinceramente il sistema pare una "figata" ma è davvero molto ostico.

luigidibiasi Profilo | Guru

si.. ho scritto direttamente il codice nel post
usa sempre le interfacce mai direttamente gli oggetti !


Luigi Di Biasi


http://www.dibiasi.it/
http://netsell.dibiasi.it - ecomm software -
http://blogs.dotnethell.it/luigidibiasi/

HavanaMan Profilo | Junior Member

Ehm ho aggiunto la parte del problema :D era monco il post!

luigidibiasi Profilo | Guru

Hai compilato le dll e ricopiate poi in debug di progetto principale?
Luigi Di Biasi


http://www.dibiasi.it/
http://netsell.dibiasi.it - ecomm software -
http://blogs.dotnethell.it/luigidibiasi/

HavanaMan Profilo | Junior Member

è proprio test_imp_SQL che non si compila dando quell'errore...

kataklisma Profilo | Senior Member

>Sinceramente il sistema pare una "figata" ma è davvero molto
>ostico.

Questa è la programmazione :) ed è quello che cercavo di spiegare qualche post indietro....:) questo settore è immenso e non si finisce mai di imparare....lo scopro tutti i giorni, penso di aver fatto qualcosa nel migliore dei modi e il giorno seguente ci sbatto la testa e la rifaccio ancora piu prestante....è cosi ;)

Ritornando ai layer...

Principalmente un buon software di qualsiasi genere deve essere composto da almeno 3 layer : Data Layer, Business Layer e Presentation Layer.

Una delle regole fondamentali consiste nell'esporre le API di un layer solo e soltanto al layer che lo segue ovvero una API inserita nel Data Layer deve essere visibile solo e soltanto dalle dll presenti nel Business Layer, sarà compito del Business layer aggiornare il Presentation Layer e quindi la UI, se notate che dal PL state richiamando una API del DAL fermatevi e controllate per bene tutto!

L'utilizzo delle interfacce, come diceva Luigi è molto importante in quanto in primis rende molto piu prestante l'eseguibile compilato.

L'utilizzo di un'ORM come ad esempio LinQ in tutte le sue forme, evita la scrittura banale e ripetitiva del DAL incorporando di suo tutte le operazioni CRUD di gestione del DB ed in questo caso il Business Layer può implementare sia se stesso che il Data Layer...

Le vie sono infinite, scrivete codice, leggete, studiate ;)

------------------------------------------
Ignazio Catanzaro

http://blogs.dotnethell.it/swdev/

luigidibiasi Profilo | Guru

Ho allegato il progetto modificato.
vedi un po' cosa mancava...

Tieni presente che sto utilizzando VB2010 Express quindi ogni volta che ricompilo le dll vado a ricopiarle in .\debug (uso i batch) poiché non amo gestire le soluzioni.

Tuttavia, è buona norma capire come usare in modo corretto Visual Studio poiché riesci a risparmiarti tutto il problema che abbiamo affrontato ora.


Luigi Di Biasi


http://www.dibiasi.it/
http://netsell.dibiasi.it - ecomm software -
http://blogs.dotnethell.it/luigidibiasi/

HavanaMan Profilo | Junior Member

Infatti ho un po' di difficoltà a gestire la cosa....

Io ho importato le 3 soluzioni dentro il progetto principale, sbaglio?

Però ho un errore su

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Errore: Indice oltre i limiti della matrice.

PS: con la tua soluzione dice: Impossibile caricare uno o più tipi richiesti. Per ulteriori informazioni, recuperare la proprietà LoaderExceptions.

luigidibiasi Profilo | Guru

e non saprei dirti ora... se hai messo tutto in un'unica soluzione credo vadano modificate la path che ho scritto a mano in progettoprincipale.

prova a scaricare il rar, ad aprire solo progetto principale e ad eseguirlo... vedi se va'

Luigi Di Biasi


http://www.dibiasi.it/
http://netsell.dibiasi.it - ecomm software -
http://blogs.dotnethell.it/luigidibiasi/

HavanaMan Profilo | Junior Member

Io sono stordito ma tu con che procedimento lavori?

Continui ad aprire e chiudere le soluzioni? Mi sembra scomodissimo ....

darkeric Profilo | Senior Member

ragazzi non pensate di stare andando un pò OT?




Programmatore per passione non per professione!

luigidibiasi Profilo | Guru

>Continui ad aprire e chiudere le soluzioni? Mi sembra scomodissimo
SI (in realtà tengo aperte tante istanze di vb express)

Non ho a disposizione Visual Studio Standard, mi arrangio con quello che ho! :D

(poi i passaggi sono sempre quelli, una volta che ci hai fatto la mano vai velocissimo!)


Luigi Di Biasi


http://www.dibiasi.it/
http://netsell.dibiasi.it - ecomm software -
http://blogs.dotnethell.it/luigidibiasi/

luigidibiasi Profilo | Guru

>ragazzi non pensate di stare andando un pò OT?
no, si parlava di gestionale e stiamo discutendo di implementazione di più layer ... dov'è l'ot?
Luigi Di Biasi


http://www.dibiasi.it/
http://netsell.dibiasi.it - ecomm software -
http://blogs.dotnethell.it/luigidibiasi/

HavanaMan Profilo | Junior Member

In ogni caso ringrazio Luigi per la pazienza...ho provato a fare ogni singolo progetto e funziona.

Devo farci un po' di prove :)

Magari apriamo un topic su questo, che ne dici?

Ultima domanda magari da cui partire per il nuovo topic:

tutta la parte SQL finirebbe dentro test_impl_SQL con classi tipo AnagraficaCliente / AnagraficaFornitore / Documenti / ecc.

O separeresti ulteriormente?

E sotto test_interface creeresti diverse classi corrispondenti alle varie parti SQL?

Grazie 1000
Luca

luigidibiasi Profilo | Guru

>Magari apriamo un topic su questo, che ne dici?
l'argomento è vasto... credo sia meglio fare riferimento a MSDN
>
>tutta la parte SQL finirebbe dentro test_impl_SQL con classi
>tipo AnagraficaCliente / AnagraficaFornitore / Documenti / ecc.
>
>O separeresti ulteriormente?
quello è un esempio... è necessario usare UML per progettare le classi in modo corretto perché a mente non vai da nessuna parte

>
>E sotto test_interface creeresti diverse classi corrispondenti
>alle varie parti SQL?
>
test_interface deve contenere esclusivamente le firme che il programma "utilizzatore" delle DLL potrà usare... è il contratto che lega il programma alle DLL che garantiscono di fornire quei metodi...


>Grazie 1000
>Luca

Luigi Di Biasi


http://www.dibiasi.it/
http://netsell.dibiasi.it - ecomm software -
http://blogs.dotnethell.it/luigidibiasi/

neo996sps Profilo | Junior Member

Ciao a tutti,

stò studiando il codice esempio che luigi ha postato e devo dire che le potenzialità sono pressochè infinite. Forse è un pò più complicato che scrivere l'evento direttamente al controllo ma sicuramente è più prestante dal punto di vista della scrittura del codice. Comunque io sono andato avanti e ho quasi finito il database. Al momento ci sono quasi un centinaio di tabelle, devo solo scrivere un file in cui indico le relazioni e poi quello è finito (salvo modifiche dell'ultimo momento).
Prima di andare avanti a scrivere codice (che poi il codice è limitato in 6 form) però voglio studiare bene il codice dato da luigi, per capire come gestire al meglio la faccenda. Se volete il DB scrivete qua che lo posto

neo996sps Profilo | Junior Member

Vediamo se ho capito per bene con un esempio pratico come funziona il codice di Luigi:

io ho il mio progetto. Creo una classe che chiamo clienti.vb all'interno del progetto. Avrò quindi:


Public Class Clienti end class


successivamente in questa classe dichiaro le mie variabili e le funzioni che mi servono per far funzionare il progetto. Quindi la classe si trasformerà così:

Public Class Clienti dim variabile1 as string ' metto string per esempio dim variabile2 as string .... dim variabileN as string ' poi metto le funzioni necessarie public sub popola_clienti end sub ___________________________ public sub nuovo_cliente end sub ___________________________ public sub cancella_cliente end sub ___________________________ end class

E quindi quando vado a richiamare la mia classe clienti farò ad esempio

dim clienti as new Clienti

clienti.popola_clienti()


E' corretto o sono completamente a farfalle?

HavanaMan Profilo | Junior Member

Direi che manca la parte dell'oggetto...

se vedi l'esempio è tutto molto più separato.

neo996sps Profilo | Junior Member

mi sa che non ho capito , potresti farmi un esempio sulla base di quello che ho scritto io?

HavanaMan Profilo | Junior Member

Guarda io ho capito pure meno di te, ci sto studiando ma se guardi il progetto di Luigi ha 3 progetti distintamente separati

La parte SQL è totalmente a se così che un domani vuoi aggiungere FireBird o Postgrees lo fai aggiungendo solo la DLL.

Insomma il tutto è molto separato ma anche io me lo sto studiando un po e non saprei proprio aiutarti.

blackspidy14 Profilo | Junior Member

ciao scusate se mi intrometto ma questa fantastica idea è già venuta ad altre persone. Se vi può servire una "linea-guida" sulla progettazione di un piccolo gestionale vi consiglio di dare una occhiata alla serie di articoli presenti su quest'altro forum:

http://www.visual-basic.it/areaarticoli.asp

trattano in modo decisamente esaustivo tutti i punti salienti dello sviluppo di un piccolo gestionale. la serie di articoli sono chiamati "Le avventure in VB.Net di un principiante ex-VB6 - ..." e sono piacevoli e di facile lettura.

Spero di essere stato d aiuto fatemi sapere

kataklisma Profilo | Senior Member

>trattano in modo decisamente esaustivo tutti i punti salienti
>dello sviluppo di un piccolo gestionale. la serie di articoli
>sono chiamati "Le avventure in VB.Net di un principiante ex-VB6
>- ..." e sono piacevoli e di facile lettura.

Sinceramente di esaustivo ci vedo ben poco, visto che di "gestionale" non c'è proprio nulla a parte la gestione delle anagrafiche clienti/fornitori...non vedo la gestione dei documenti, la gestione dei magazzini etc...

Poi, che venga da VB6 l'autore si vede benissimo: approccio modulare e pesantemente basato sugli eventi cosa che noi stiamo fortemente sconsigliando in questo thread per le ragioni piu disparate (anch'esse spiegate).
------------------------------------------
Ignazio Catanzaro

http://blogs.dotnethell.it/swdev/

neo996sps Profilo | Junior Member

avevo già visto quella serie di articoli, però non mi sono serviti ad un granchè in quanto appunto si parlava di visual basic 6 e non 2008 express.

kataklisma Profilo | Senior Member

>avevo già visto quella serie di articoli, però non mi sono serviti
>ad un granchè in quanto appunto si parlava di visual basic 6
>e non 2008 express.

No, il codice presente negli articoli è scritto in VB.Net 2008 non in VB6....piu che altro sono gli articoli in generale che non sono tanto inerenti al progetto....
------------------------------------------
Ignazio Catanzaro

http://blogs.dotnethell.it/swdev/

blackspidy14 Profilo | Junior Member


>No, il codice presente negli articoli è scritto in VB.Net 2008
>non in VB6....
esatto sono in .net e hanno un approccio "diretto", cioè cercando di usare meno automatismi possibili, per cercare di essere più "padroni" del codice.

>piu che altro sono gli articoli in generale che
>non sono tanto inerenti al progetto....

come mai ritieni che non siano "inerenti" al progetto?



kataklisma Profilo | Senior Member

>esatto sono in .net e hanno un approccio "diretto", cioè cercando
>di usare meno automatismi possibili, per cercare di essere più
>"padroni" del codice.

Se parliamo di "automatismi" VS è tutto un'automatismo...la creazione di un semplice form, la registrazione di un'evento su un controllo etc, sono tutte operazioni eseguite in automatico da VS che "produce" da solo il codice necessario...quindi per essere realmente padroni di un linguaggio quale C# o Vb.net bisogna programmare con il blocco note... ;)

>come mai ritieni che non siano "inerenti" al progetto?
Per due motivi principalmente :

- Sotto l'aspetto gestionale è semplicemente trattata l'anagrafica clienti/fornitori, e la cosa non è utile in quanto è tra le tante, la parte "piu semplice" da sviluppare.

- Si è parlato tanto nel thread dell'importante della suddivisione in layer, l'utilizzo di interfacce classi ed oggetti etc e in negli esempi presenti negli articoli non c'è nulla di tutto questo.

------------------------------------------
Ignazio Catanzaro

http://blogs.dotnethell.it/swdev/

luigidibiasi Profilo | Guru

@kataclisma
vado OT ma devo farlo!!! ti chiedo di togliermi diverse curiosità...

Salvo le anagrafiche puoi darmi un'idea di come operate? Scusa le domande dirette (anche se non ci conosciamo) ma ad usare un protocollo per tante domande usciva un post infinito...

>Immissione Primanota :
la fate manuale oppure (per le entrate) è collegata ai moduli di vendita?
>Controllo saldi:
fai una differenza dare/avere nei mastrini clienti o fornitori?
>Schede contabili:
di che si tratta??
>Estratti conto :
come controllo saldi?

>Saldoconti Clienti/fornitori:
cosa intendi?
>Scadenziari:
questa è la parte che odio di più... come la gestite? tramite le scadenze sulle fatture (30,60,90...) o come
(p.S: chiaramente gestite pure rate manuali... ma sui documenti di vendita direttamente o create tramite i tipi pagamento personalizzabili?)

>Gestione documentale (emissioni dei documenti, revisione, salvataggio e ripercussioni sulle altre funzionalità)
mi piace come hai scritto "ripercussioni su altre funzionalità"... qua stai indicando una contabilizzazione automatica nei mastrini clienti e fornitori quando carichi documenti fiscali di acquisto o vendita vero? sento "puzza" di molte transazioni qui

>ratei risconti e competenze varie:
non so' cosa siano quindi rigorosamente scritture contabili manuali :D
>Cespiti e immobilizzazioni :
come sopra
>Gestione dei progressivi di magazzino :
cosa intendi per progressivi? le stampe rimanenze di fine anno?

>Apertura e chiudura degli anni contabili:
io faccio (per i mastrini dove si può fare) il saldo e poi uso una scrittura di "apertura bilancio" per l'anno nuovo... è lecito fare una cosa del genere?

>Ammortamenti:
rigorosamente manuali!!! :D
>Gestione modulistica (730, unico, entratel etc etc...):
manuali
>Gestione Multi-Azienda:
l'ho risolta con multi-database :D voi mica usate un campo per ogni tabella?!?!? (se si mi dici perché)

Io purtroppo in materia sono autodidatta e ho cominciato a scriverlo da zero quindi molte cose non so' neanche che esistono.

Ti prego dimmi come fai a sopportare queste cose che hai elencato!!!! avete un modulo base da cui partita o personalizzate sempre da zero?
Luigi Di Biasi


http://www.dibiasi.it/
http://netsell.dibiasi.it - ecomm software -
http://blogs.dotnethell.it/luigidibiasi/

kataklisma Profilo | Senior Member

Ciao Luigi :)

>@kataclisma
>vado OT ma devo farlo!!! ti chiedo di togliermi diverse curiosità...

Sinceramente ritengo che la domanda sia pertinente! ;)

>Salvo le anagrafiche puoi darmi un'idea di come operate? Scusa
>le domande dirette (anche se non ci conosciamo) ma ad usare un
>protocollo per tante domande usciva un post infinito...

Ma scherzi?Tranquillo ;)

Comunque cerco di rispondere in maniera sintetica alle domande che hai posto altrimenti si rischia di cadere in post lunghi, veramente lunghi!

>>Immissione Primanota :
>la fate manuale oppure (per le entrate) è collegata ai moduli
>di vendita?

L'immissione prima nota viene effettuata manualmente.

>>Controllo saldi:
>fai una differenza dare/avere nei mastrini clienti o fornitori?

Si è un modulo che aiuta ad avere una situazione dare/avere di un singolo mastro o comunque a livello generale.

>>Schede contabili:
>di che si tratta??

Le schede contabili ti permettono di ottenere la situazione di un determinato conto in un determinato anno contabile permettendoti di vedere tutti i documenti fiscali e i saldiconto....

>>Estratti conto :
>come controllo saldi?

Il modulo di estratto conto non fa altro che creare un "documento" di estratto conto da recapitare ad esempio al cliente...

>>Saldoconti Clienti/fornitori:
>cosa intendi?

Modulo con il quale effettuare il saldo su un mastro Clienti/Fornitore specifico, quindi seleziono un conto ed indico tramite scrittura l'importo pagato.

>>Scadenziari:
>questa è la parte che odio di più... come la gestite? tramite
>le scadenze sulle fatture (30,60,90...) o come
>(p.S: chiaramente gestite pure rate manuali... ma sui documenti
>di vendita direttamente o create tramite i tipi pagamento personalizzabili?)

Il tutto viene gestito tramite pagamenti personalizzabili quindi gestendo un'anagrafica pagamenti ;)

>>Gestione documentale (emissioni dei documenti, revisione, salvataggio e ripercussioni sulle altre funzionalità)
>mi piace come hai scritto "ripercussioni su altre funzionalità"...
>qua stai indicando una contabilizzazione automatica nei mastrini
>clienti e fornitori quando carichi documenti fiscali di acquisto
>o vendita vero? sento "puzza" di molte transazioni qui

Si, infatti la gestione dei "documenti" implica tutte le registrazioni contabili del caso riscontrabili poi per esempio nelle schede contabili o negli estratti conto :)

>>ratei risconti e competenze varie:
>non so' cosa siano quindi rigorosamente scritture contabili manuali

Si, in pratica si :)

>>Cespiti e immobilizzazioni :
>come sopra

Si..

>>Gestione dei progressivi di magazzino :
>cosa intendi per progressivi? le stampe rimanenze di fine anno?

Intendo la gestione delle esistenze/disponibilità (lorde, nette) della merce compresa la gestione ad esempio degli arrivi (in ordine da fornitore).

>>Apertura e chiudura degli anni contabili:
>io faccio (per i mastrini dove si può fare) il saldo e poi uso
>una scrittura di "apertura bilancio" per l'anno nuovo... è lecito
>fare una cosa del genere?

Beh si...è lecito, l'importante è circoscrivere tutte le scritture negli anni in cui sono state effettuate!

>>Ammortamenti:
>rigorosamente manuali!!! :D

Si :)

>>Gestione modulistica (730, unico, entratel etc etc...):
>manuali

Beh anche questa è un'operazione "manuale".

>>Gestione Multi-Azienda:
>l'ho risolta con multi-database :D voi mica usate un campo per
>ogni tabella?!?!? (se si mi dici perché)

La soluzione multidatabase a mio parere è la migliore, ma volendo si puo utilizzare un campo "Azienda" per ogni tabella...(io sconsiglio....)

>Io purtroppo in materia sono autodidatta e ho cominciato a scriverlo
>da zero quindi molte cose non so' neanche che esistono.

Ma infatti, per costruire un buon gestionale servono degli ottimi sviluppatori software e degli ottimi commercialisti! :)

>Ti prego dimmi come fai a sopportare queste cose che hai elencato!!!!
> avete un modulo base da cui partita o personalizzate sempre
>da zero?

Nella maggior parte dei casi si creano personalizzazioni aventi come "motore gestionale" Passepartout Mexal, in altri casi ho scritto tutto da 0...

Io sinceramente spero che la mia esperienza nel campo gestionale finisca il prima possibile in quanto, a mio parere, nel campo informatico è una di quelle cose che porta l'innovazione e la voglia di lavorare a 0....ma il lavoro è il lavoro :)

------------------------------------------
Ignazio Catanzaro

http://blogs.dotnethell.it/swdev/

HavanaMan Profilo | Junior Member

Arenati? Mi spiacerebbe perchè seguivo appassionatamente la cosa.
Ho guardato un po' i 3 livelli ed è un po' confusa la parte di "oggetto" o almeno per me che ho sempre programmato tutto all'interno...lo è.

Non c'è una vita di mezzo con parte design e parte sql in una dll? Non so tipo che la dll passa al design una dataset o cmq i dati e l'altra parte lo decripta...

forse dico un eresia :)

HavanaMan Profilo | Junior Member

Io torno al metodo di Luigi che spero non mi odierà

Io riprendendo il tuo esempio ho creato i 4 progetti

Progetto principale
Object
Interface
Sql

Finito di scrivere il codice compilo e uso per referenziare la dll creata in bin\release dei singoli progetti

Alla fine copio Sql dentro il debug di progetto principale mentre gli altri li "copia" in automatico, dovrebbe andare no?

E invece mi trovo con un "Indice oltre i limiti della matrice." e non capisco proprio perchè...

Mi puoi provare ad aiutare? Pian piano sto capendo il sistema di oggetti / interfacce ma mi blocca questo particolare

Grazie in anticipo
Luca

luigidibiasi Profilo | Guru

>Finito di scrivere il codice compilo e uso per referenziare la
>dll creata in bin\release dei singoli progetti

queste dll (quelle che referenzi direttamente nel progetto) vengono direttamente legate al progetto. Il metodo che stiamo discutendo non può quindi essere usato poiché non carichi le dll a runtime ma a loadtime (compile-time)

>Alla fine copio Sql dentro il debug di progetto principale mentre
>gli altri li "copia" in automatico, dovrebbe andare no?
Non riesco a capire cosa intendi per automatico... fai prima a postare il progetto e vediamo...
Luigi Di Biasi


http://www.dibiasi.it/
http://netsell.dibiasi.it - ecomm software -
http://blogs.dotnethell.it/luigidibiasi/

HavanaMan Profilo | Junior Member

Ecco il file :)

Grazie

luigidibiasi Profilo | Guru

Allora,

nel progetto arithmos non referenziare ART_OBJECT ma solo ART_INTERFACE (art_object è già referenziato in sql)

poi la riga:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
va sostituita con:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
L'indice 10 andava bene per il mio progetto, per il tuo se ti esplori la variabile PType vedi che la classe che cerchi sta all'indice 7.

Qui andrebbe fatto un discorso su come gestire i "nomi dei moduli" in modo da eliminare il problema di dover richiamare direttamente tramite indice ma prova prima se funziona
Luigi Di Biasi


http://www.dibiasi.it/
http://netsell.dibiasi.it - ecomm software -
http://blogs.dotnethell.it/luigidibiasi/

HavanaMan Profilo | Junior Member

Con le tue modifiche mi da questo errore:

Impossibile trovare il costruttore sul tipo 'ART_Sql.My.MySettings'.

luigidibiasi Profilo | Guru

>Con le tue modifiche mi da questo errore:
>
>Impossibile trovare il costruttore sul tipo 'ART_Sql.My.MySettings'.

ora ti allego il progetto modificato perché proprio non so dove guardare da qui
Luigi Di Biasi


http://www.dibiasi.it/
http://netsell.dibiasi.it - ecomm software -
http://blogs.dotnethell.it/luigidibiasi/

HavanaMan Profilo | Junior Member

Ok grazie!

luigidibiasi Profilo | Guru

prova un po' sta sul post di sopra
Luigi Di Biasi


http://www.dibiasi.it/
http://netsell.dibiasi.it - ecomm software -
http://blogs.dotnethell.it/luigidibiasi/

HavanaMan Profilo | Junior Member

Ma a te va?

Da te il 10 equivale a {ART_Sql.My.MySettingsProperty} ?

Perchè il tuo progetto mi da lo stesso errore del mio.

luigidibiasi Profilo | Guru

scusa ho allegato il progetto non salvato

devi beccare l'indice di {Name = "AnagraficaListino" FullName = "ART_Sql.AnagraficaListino"}
Luigi Di Biasi


http://www.dibiasi.it/
http://netsell.dibiasi.it - ecomm software -
http://blogs.dotnethell.it/luigidibiasi/

HavanaMan Profilo | Junior Member

Ora va, thx.

Solo che non si connette al db malgrado son sicuro che i dati siano giusti ARGH :D

luigidibiasi Profilo | Guru

se usi sqlserver prova ad usare:

Data Source=XXX;Initial Catalog=XXX;Trusted_Connection=True;User Id=uid;Password=pwd;
Luigi Di Biasi


http://www.dibiasi.it/
http://netsell.dibiasi.it - ecomm software -
http://blogs.dotnethell.it/luigidibiasi/

HavanaMan Profilo | Junior Member

Si, uso SQLServer ma la riga che ho usato prima la utilizzo il un altro software "allinone" (ovvero programmato tutto al suo interno) e funziona.

infatti facendo un form nella soluzione principale con

Dim cn As New SqlConnection("Server=XXX\xxx;Database=XXX;Trusted_Connection=True;") Dim cmd As SqlCommand Dim dr As SqlDataReader Dim sql As String cn.Open() Try sql = "SELECT * FROM listino WHERE listino_id=@listino_id" cmd = New SqlCommand(sql, cn) cmd.Parameters.Clear() cmd.Parameters.AddWithValue("@listino_id", SqlDbType.Int).Value = 1 dr = cmd.ExecuteReader If Not dr.HasRows Then dr.Close() : dr = Nothing cmd.Dispose() cn.Close() : cn.Dispose() : cn = Nothing cmd.Dispose() Else dr.Read() MsgBox(dr("listino_id") & " " & dr("listino_nome") & " " & dr("listino_sconto")) dr.Close() : dr = Nothing cmd.Dispose() cn.Close() : cn.Dispose() : cn = Nothing cmd.Dispose() End If Catch sqlex As SqlException MsgBox(sqlex.Message.ToString) Catch ex As Exception MsgBox(ex.Message.ToString) End Try

funziona...

HavanaMan Profilo | Junior Member

Niente, per ora non sono riuscito a risolvere...non capisco proprio dove stia l'errore, la stringa di connessione è funzionante al 100%

luigidibiasi Profilo | Guru

fai un po' di debug ... ti da timeout di connessione o qualche altro errore?
Luigi Di Biasi


http://www.dibiasi.it/
http://netsell.dibiasi.it - ecomm software -
http://blogs.dotnethell.it/luigidibiasi/

HavanaMan Profilo | Junior Member

No non va in timeout, entra qui

Dim RisultatoSql As ART_Interface.IListinoObject = SqlListino.GetListino(1)

e va direttamente all'errore di "Connessione al DBMS fallita."

luigidibiasi Profilo | Guru

debugga con f11 riga per riga in modo che entri nei metodi...
Luigi Di Biasi


http://www.dibiasi.it/
http://netsell.dibiasi.it - ecomm software -
http://blogs.dotnethell.it/luigidibiasi/

HavanaMan Profilo | Junior Member

Anche con F11 fa lo stesso procedimento...o forse sono io che non capisco.

La stringa di connessione sicuro funziona, il problema sta forse nel passaggio della stessa.

HavanaMan Profilo | Junior Member

Ti ho mandato una mail :)

neo996sps Profilo | Junior Member

Ciao a tutti,

e il bello è che sembrava che il tutto si fosse arenato. Ora, chi è riuscito a capire veramente bene può fare un piccolo tutorial da scaricare?
Errare è umano, ma per fare veramente casino ci vuole la password di root

luigidibiasi Profilo | Guru

neo toglimi una curiosità, ma tu questo software veramente lo vuoi fare opensource?

Luigi Di Biasi


http://www.dibiasi.it/
http://netsell.dibiasi.it - ecomm software -
http://blogs.dotnethell.it/luigidibiasi/

neo996sps Profilo | Junior Member

perchè no? Un gestionale che tutti possono modificare realizzato in seno alla comunity sarebbe una bella cosa. Se poi vediamo che conviene che ognuno tracci la propria strada e si arrangi a fare il tutto ci scambiamo solamente le idee e il modo di gestire alcune parti del programma
Errare è umano, ma per fare veramente casino ci vuole la password di root

fabioantoniololiva Profilo | Newbie

MI aggiungo al progetto se posso. Come posso esservi di aiuto?

amelix Profilo | Expert

Ciao!
Come è finito questo progetto?
Avete messo da qualche parte il tutto?

Andrea
http://about.me/andrea.melis
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5