Gambas-it

Gambas3 => Programmazione => Topic aperto da: Gianluigi - 31 Ottobre 2015, 23:23:17

Titolo: Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 31 Ottobre 2015, 23:23:17
Come promesso a sotema apro la nuova discussione iniziata qui (http://www.gambas-it.org/smf/index.php?topic=4418.msg36819#msg36819) e proseguita qui (http://www.gambas-it.org/smf/index.php?topic=4527.msg37208#msg37208) in discussioni che per ragioni diverse hanno preso diversi indirizzi rispetto al loro enunciato.
Questa potrebbe essere la volta buona che il titolo della  discussione ne rispecchi alla fine il contenuto.  :D
Piccolo riassunto dalle puntate precedenti: Il Geom. Manicotto Indeciso della Rubinetto Felice ci ha commissionato un gestionale per la sua azienda, essendo appunto Indeciso sia di nome che di fatto tocca a noi decidere per lui.
Attualmente siamo nella fase di progettazione, anzi si potrebbe tranquillamente definire pre-progettazione in quanto stiamo aspettando da sotema le “direttive” per installare PostgreSQL.
Una volta sincronizzato i database e presa confidenza con lo stesso dovremo finire di raccogliere tutta la documentazione in uso al cliente per decidere come progettare il nuovo gestionale.
Attualmente abbiamo raccolto solo le bolle di spedizione (DDT) e le fatture sul cui modello vengono fatti anche gli accrediti e gli addebiti e sto raccattando fra i miei appunti per farvi avere i preventivi, prima nota e conto cassa, commesse o ordini, schede assistenza tecnica.
Siete pregati di farmi avere indicazioni affinché io possa reperire ricevute fiscali scontrini e quant'altro utile al progetto.
Per adesso ci fermiamo qui che mi sembra già molto.

Solo vorrei aggiungere questo, in qualità di capitano dovrei decidere gli step di lavoro, ma essendo noto che io di database ci capisco poco, vorrei spiegare per sommi capi come intenderei procedere per capirne da voi le carenze e anche se siete d'accordo.
Nota: Se sarete d'accordo poi non lamentatevi se ne pretenderò il corretto svolgimento.

Come detto il primo passaggio è quello della raccolta ti tutti i documenti e le notizie utili a comporre il quadro di quello che fa il cliente per poi decidere come costruire il database.

Il secondo passaggio è quello di estrarre da questi documenti tutte le voci che devono essere memorizzate nel database.

Il terzo passaggio sarà quello di riunire le voci in relazioni e disegnare le tabelle, decidendone le chiavi.

Il quarto passaggio sarà quello di decidere le tabelle di raccordo e le chiavi esterne.

Il quinto passaggio sarà quello di disegnare le finestre dell'interfaccia grafica.

Il sesto passaggio sarà quello si creare le interrogazioni e il codice per far funzionare le finestre.

Cosa ne dite?
 :ciao:
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: tornu - 01 Novembre 2015, 11:13:19
Ciao Gianluigi,
fammi capire, vuoi esempi di documenti per poter capire quali sono le informazioni utili alla progettazione del DB ?
Diciamo che se questa è la tua richiesta , è vero che potremmo prendere spunto ma non sarà sufficente in quanto
nel DB ci saranno tanti campi che sui documenti naturalmente non ci sono, comunque dovrei avere del materiale da
proporti. La strada che hai indicato per lo sviluppo del progetto diciamo che và bene, è ovvio che potrà essere modificata
strada facendo. Ci chiedi di non lamentarci se pretenderai il corretto svolgimento...ma secondo te ?... :P
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 01 Novembre 2015, 12:20:56
Ciao Gianluigi,
fammi capire, vuoi esempi di documenti per poter capire quali sono le informazioni utili alla progettazione del DB ?
Diciamo che se questa è la tua richiesta , è vero che potremmo prendere spunto ma non sarà sufficente in quanto
nel DB ci saranno tanti campi che sui documenti naturalmente non ci sono, comunque dovrei avere del materiale da
proporti. La strada che hai indicato per lo sviluppo del progetto diciamo che và bene, è ovvio che potrà essere modificata
strada facendo. Ci chiedi di non lamentarci se pretenderai il corretto svolgimento...ma secondo te ?... :P
:D
Ciao Tornu,
penso di non essere stato sufficientemente chiaro su cosa secondo me sarebbe corretto fare con questa iniziativa, vale a dire lo scopo ultimo.
Prima occorre chiarirsi su cosa intendiamo per gestionale, lo so la parola sembra esaustiva, ma  se noi l'analizziamo essa dice tutto ma anche niente.
Intendiamo un gestionale che vada bene per qualunque tipo di azienda e che quindi tenga conto di tutte le possibili esigenze che hanno imprese con indirizzi diversi?
Io direi proprio di no.
Capacità a parte, lo scopo di questa nostra iniziativa dovrebbe essere quello di far capire come ci si dovrebbe organizzare per affrontare la progettazione e poi la realizzazione di un gestionale costruito sulle precipue esigenze di chi ce lo commissiona.
Naturalmente noi realizzeremo un gestionale ipotetico per un ipotetico cliente che vive nel modo di mezzo dove sappiamo tutti non esiste malizia, corruzione, le tasse sono eque, se parli di fondi neri pensano al residuo del caffè e all'amministrazione pubblica mai verrebbe in mente di fare un controllo sui conti.
Già così è un'impresa titanica.
Se noi ragioneremo a fondo su tutte le esigenze del nostro cliente e ci scambieremo le oppinioni su come meglio affrontare l'organizzazione dei dati dovremmo ottenere automaticamente tutti i campi da memorizzare, nessuno dimenticato o non considerato.
Se così non è dovresti per favore approfondire ciò che intendi. Sui documenti usati dall'azienda ci sono tutte le voci utili al suo operare, mancano quelle per organizzarle in un database? Ma è proprio di queste che occorre discutere e decidere dopo aver scovato tutte le prime con un'opera degna di Sherlock Holmes.
Capire a fondo cosa fa un'azienda non è cosa semplice, ma se non lo si capisce non saremo mai in grado di consegnarli un database utile.
Se quanto detto ha un senso  :D allora inizia a mandare documenti  :P
 :ciao:
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: sotema - 01 Novembre 2015, 14:20:10
Visto come si stanno mettendo le cose, proporrei come prima attività quella di aprire una ragione sociale (gambas-it srl) con lo scopo di commercializzare il prodotto concepito dalla follia di questo gruppo.
Suona come uno scherzo, però se ci pensate stiamo già ragionando come una start-up.
Per quanto riguarda la raccolta di documenti, l'osservazione di Tornu è esatta, nel DB saranno presenti campi che non appariranno nelle fatture o altri documenti. Se vuoi scrivere un gestionale completo devi prevedere una gestione tecnico/amministrativa (Contabilità Generale e Contabilità Industriale), raccogliere dati statistici e analisi che nessun documento utilizzerà, pensa per un attimo all'analisi vendite (prodotti più venduti, margini di guadagno, gestione dei beni strumentali o capital equipment) tutte cose che non finiscono nei documenti.
Inoltre dovremmo trovare un esperto che ci guidi nella produzione di una serie di strutture contabili:

e non sono tutti. Se quanto sopra non ti ha terrorizzato...la mini guida su PgSQL è quasi pronta.
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 01 Novembre 2015, 16:03:34
Caro Sotema,
perdonami se mi permetto di dissentire convintamente e con veemenza, forse non sono capace a spiegare bene il mio pensiero ma io ho detto che occorre una capacità notevole (alla Sherlock Holmes) per scovare tutti i documenti e in questo comprendo tutti i report statistici, di bilancio, contabili e chi più ne ha più ne metta.
Capisco che una cosa nuova (un nuovo gestionale) per essere più utile del vecchio sistema necessiti di maggiori utilità, ma questo rientra nello scambio di pareri finali dopo la raccolta dei documenti o no?
O noi impostiamo una rotta oppure finiamo sugli scogli e non basta impostare la rotta occorre come giustamente ricordi dividere i compiti in base alle capacità se uno non sa nulla di contabilità difficilmente sa cosa cercare. Io quel che ho fatto l'ho sempre fatto seguendo le direttive dei contabili e comunque pur non sapendone niente qualche documento l'ho già scovato e lo posterò.
Certo è che se chi sa di contabilità si defila...
Raccolti tutti i documenti ci si riunisce e si decide cosa è utile al cliente.
Sarò miope e limitato ma se non è giusto procedere così occorre che mi dici chiaro in quale altro modo più intelligente dobbiamo muoverci.
Come ho detto ho già raccolto della documentazione che sto per inviare ma occorre andare per gradi e aspetto (inoltre deve essere ancora pulita dai dati reali  :) ).
Una curiosità: Cosa te ne fai di una statistica che non serve a nessun documento?
Ti posso chiedere un'altra cosa, ma se tu fossi titolare di un'azienda e ti si presenta un tizio che sa già le tue esigenze senza aver indagato a fondo i tuoi desiderata, la tua documentazione e chiesto lumi ai tuoi dipendenti a costui gli faresti fare il lavoro?
Sarà perché non mi chiamo Indeciso ma io certamente no.
 
Stavo preparando un protocollo di standardizzazione dei termini per il database, quello per il codice Gambas già esiste.
Come denominare le tabelle, i campi, le chiavi ecc. ma visto che non è chiaro come intendi farci muovere sospendo il lavoro e attendo istruzioni.

Non vorrei che mi fraintendessi, mi va stra bene se guidi le danze ma occorrono istruzioni precise sul come ci si deve muovere.
Le istruzioni precise si chiamano protocolli, se non vogliamo ribaltarci già nel parcheggio occorre prima di tutto decidere questo, se non sapremo organizzarci io dico che è inutile partire.
 :ciao:

PS: Figurati se mi terrorizzano le sfide, tuttalpiù mi gasano e mi scuotono dal mio senile torpore.  :D
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: sotema - 01 Novembre 2015, 18:35:10
Ciao Gianluigi, non intendevo muovere critiche al tuo operato, semplicemente volevo riporre l'attenzione sul fatto che la progettazione del DB va svolta a 360 gradi.
Sicuramente ho frainteso cosa intendevi per documenti, ho pensato che ti riferissi ai soli documenti fiscali (fatture, ddt, ricevute fiscali...)
ora è chiaro che ti riferivi a tutto ciò che costituisce un'azienda.
Bene la standardizzazione dei termini e della struttura del DB uno dei principi basilari per produrre una base dati solida.

Allego la mini guida sull'installazione di Postgresql. Sper di avere raggiunto il risultato di fornire le informazioni di base senza creare confusione nel lettore. Per ogni dubbio o richiesta sono disponibile.

Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: tornu - 01 Novembre 2015, 18:55:15
Ciao ragazzi,
come sollecitatomi da Gianluigi allego il mio contributo di documenti.
Per lo sviluppo la penso così, tutto quello detto fino ad ora và bene, si può corregge cammin facendo, con calma,
non ci insegue nessuno...giusto? (Gianluigi non è che il tuo cliente deve aprire domani... ;D), per quanto riguarda
la contabilità io momentaneamente (se la si vuole sviluppare) la lascerei da parte, nel senso che il gestionale si può
comunque sviluppare e collegarla successivamente.
Gianluigi, dare i nomi ai campi del DB è una cosa alquanto soggettiva, nel senso che ho visto che le software house
usano ognuna un loro metodo, c'è chi preferisce usare nomi per esteso (ragione_sociale, partita_iva) o chi usa delle
abbrevazioni (ragsoc, piva) comunque comprensibili, io preferisco il secondo, meno caratteri da scrivere nelle query.
N.B.: Per il limite di upload del Forum i documenti devo inviarli in due volte.
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: tornu - 01 Novembre 2015, 18:56:09
Secondo invio documenti gestionale.
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 01 Novembre 2015, 21:03:17
Ciao Gianluigi, non intendevo muovere critiche al tuo operato, semplicemente volevo riporre l'attenzione sul fatto che la progettazione del DB va svolta a 360 gradi.
Carissimo sotema, lo so a volte ho modi bruschi, non volevo apparire scortese, e tu sei autorizzato a criticarmi quanto ti pare e piace permesso esteso a tutti quelli che lo vogliono fare, anche se tu e tornu avete una licenza con poteri di critica extra.  :D
Citazione
Sicuramente ho frainteso cosa intendevi per documenti, ho pensato che ti riferissi ai soli documenti fiscali (fatture, ddt, ricevute fiscali...)
ora è chiaro che ti riferivi a tutto ciò che costituisce un'azienda.
Bene la standardizzazione dei termini e della struttura del DB uno dei principi basilari per produrre una base dati solida.
:ok:
Citazione
Allego la mini guida sull'installazione di Postgresql. Sper di avere raggiunto il risultato di fornire le informazioni di base senza creare confusione nel lettore. Per ogni dubbio o richiesta sono disponibile.

Temo che nei comandi inseriti nella guida ci sia un refuso ti si è spostato il simbolo di User ($) dopo main e questo in un primo momento mi ha confuso in quanto avendomi Ubuntu installato la 9.3 credevo che il malfunzionamento dipendesse da quello.
Non avendo capito ho provato a cambiare peer con trust in gedit  (sudo gedit /etc...) ma ho ottenuto un errore al momento del salvataggio.
Purtroppo adesso devo andare ho un impegno inderogabile sta per iniziare Dawnton Abbey  :P
Ci aggiorniamo a mezzanotte  :ciao:
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: sotema - 01 Novembre 2015, 21:30:51
Temo che nei comandi inseriti nella guida ci sia un refuso ti si è spostato il simbolo di User ($) dopo main e questo in un primo momento mi ha confuso in quanto avendomi Ubuntu installato la 9.3 credevo che il malfunzionamento dipendesse da quello.
Non avendo capito ho provato a cambiare peer con trust in gedit  (sudo gedit /etc...) ma ho ottenuto un errore al momento del salvataggio.
Purtroppo adesso devo andare ho un impegno inderogabile sta per iniziare Dawnton Abbey  :P
Ci aggiorniamo a mezzanotte  :ciao:
Probabilmente il simbolo $ cui ti riferisci è il carattere terminale del prompt utente
Quale errore ottieni al salvataggio?
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 02 Novembre 2015, 00:56:16
Probabilmente il simbolo $ cui ti riferisci è il carattere terminale del prompt utente
Quale errore ottieni al salvataggio?

Si scusa ho fatto un po di confusione sono cose che con la fretta...
Poi io vi proprio...
Domani con calma mi guardo il tutto e ti riferisco, ma qualcosa senza vi? No eh.   ;D
 :ciao:  :sleepy:
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 02 Novembre 2015, 11:31:36
Ciao carissimo Sotema,
quando hai letto quello che ti ho scritto qui
Citazione
Temo che nei comandi inseriti nella guida ci sia un refuso ti si è spostato il simbolo di User ($) dopo main e questo in un primo momento mi ha confuso in quanto avendomi Ubuntu installato la 9.3 credevo che il malfunzionamento dipendesse da quello.
Non avendo capito ho provato a cambiare peer con trust in gedit (sudo gedit /etc...) ma ho ottenuto un errore al momento del salvataggio.
quale è stata la tua reazione, ti è scappata una risata oppure sei rimasto male vedendo svilito il tuo impegno? Probabilmente un insieme misto ad altro a cui non desidero pensare.
Be hai perfettamente ragione, sono stato persino tentato di cancellare  :-[ il mio post ma oramai tu, l'unico che non avrebbe dovuto leggerlo, lo avevi già visto.
Lo so posso chiederti scusa e naturalmente lo faccio e mi cospargo pure il capo di cenere, ma rimane il fatto che in risposta a un tuo notevole sforzo per farci avere una valida guida, io per colpa di un'idiota frenesia che mi pervade da sempre a fronte di novità interessanti, ho risposto in questo modo assurdo.
Ho letto finalmente la tua guida perfetta, scritta benissimo, chiarissima, esaustiva, si aggiungo anche esaustiva in quanto permette, mettendoti sui giusti binari, di affrontare meglio la guida ufficiale.
Cosa posso aggiungere, c'è un modo di dire che più o meno recita così: “Non aiutare gli altri se non sei in grado di sopportarne l'ingratitudine”, ecco l'ingratitudine da me non l'avrai mai su questo puoi scommetterci, anche ti dovessi diventare antipatico e smettessi di parlarmi, sappi che io sono grato a tutti quelli che mi hanno aiutato e che magari non mi sopportano più.
Temo purtroppo che potrai ancora, come è successo ieri, avere in cambio stupida superficialità ed è giusto che ti avvisi vista l'impervia lunga strada che ci attende.
Mi riprometto di essere più accorto in futuro, e di accendere il cervello prima di postare, però conoscendomi spero di poter contare su una tua coriacea pazienza.
 :-*
PS:
Occorre proprio avvisare chi novello gamberetto magari non scafato su come funzionano i forum, che potrebbe essere ingannato da ciò che appare sopra gli avatar, i titoli non vogliono dire proprio niente, qui ve ne è la dimostrazione palese essi vengono dati in base al numero degli interventi e non alla capacità.
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: sotema - 02 Novembre 2015, 19:04:09
Tranquillo Gianluigi,
ho sopportato di peggio, molto peggio. Ho la FORTUNA ( :o) di vivere nello stesso palazzo di mia suocera. Credo non serva aggiungere altro...
Qualunque dubbio, perplessità o chiarimento non esitare a chiedere.
 :ciao:
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 02 Novembre 2015, 19:47:17
Tranquillo Gianluigi,
ho sopportato di peggio, molto peggio. Ho la FORTUNA ( :o) di vivere nello stesso palazzo di mia suocera. Credo non serva aggiungere altro...
Speriamo non sappia che partecipi a questo forum  :rotfl:
Bene ora so che hai una pazienza di ferro e sono più tranquillo  :D
Vi chiedo un po di tempo per studiare PostgreSQL e poi si riparte, naturalmente se ti viene in mente qualcosa riguardo all'organizzazione o ti capita sottomano qualche documento...

Citazione
Qualunque dubbio, perplessità o chiarimento non esitare a chiedere.
 :ciao:
Grazie
 :ciao:
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 05 Novembre 2015, 00:12:43
Oggi qualche passetto avanti nella comprensione dei database penso di averlo fatto.  :D
Ho un po battagliato ma poi sono riuscito a creare via codice Gambas il mio primo ultra piccolissimo database PostgreSQL (4 tabelle in tutto).
Sono riuscito a popolare tutte le tabelle, in tutto ho usato nove istruzioni SQL.
Ho finalmente potuto appurare che Berserker79, Golia e Milio avevano perfettamente ragione a consigliarmi di raddoppiare l'apostrofo nelle stringhe, ( \”) non funziona nelle query con PostgreSQL.

Una cosa che non ho capito \dn a me mostra solo public e postgres come schema.
Ho provato a costruire query con pgAdminIII anche se non ho ancora bene capito come funziona (bene è un eufemismo  ;D).

A seguire qualche testimonianza delle mie sudate conquiste. A dire il vero non troppo sudate visto la bella guida di sotema che contiene la piccola dimenticanza di una d nella parte comandi psql, \u invece di \du che però appare corretto subito dopo nell'esempio basta aggiungerla io l'ho già fatto.
Codice: [Seleziona]
gian@gian:~$ psql -U giangi -d template1
Password for user giangi:
psql (9.3.10)
Type "help" for help.

template1=> \l
template1=> \du
                             List of roles
 Role name |                   Attributes                   | Member of
-----------+------------------------------------------------+-----------
 giangi    | Create role, Create DB                         | {}
 postgres  | Superuser, Create role, Create DB, Replication | {}

template1=> \c rubinettofelice
You are now connected to database "rubinettofelice" as user "giangi".
rubinettofelice=> \d
         List of relations
 Schema |   Name   | Type  | Owner 
--------+----------+-------+--------
 public | articoli | table | giangi
 public | artord   | table | giangi
 public | clienti  | table | giangi
 public | ordini   | table | giangi
(4 rows)

rubinettofelice=> \dn
  List of schemas
  Name  |  Owner   
--------+----------
 public | postgres
(1 row)

rubinettofelice=> \d+ clienti
                               Table "public.clienti"
   Column    |         Type          | Modifiers | Storage  | Stats target | Description
-------------+-----------------------+-----------+----------+--------------+-------------
 id_cli      | integer               | not null  | plain    |              |
 cli_nome    | character varying(15) |           | extended |              |
 cli_cognome | character varying(15) |           | extended |              |
 cli_citta   | character varying(20) |           | extended |              |
Indexes:
    "clienti_pkey" PRIMARY KEY, btree (id_cli)
Referenced by:
    TABLE "ordini" CONSTRAINT "ordini_id_cli_fkey" FOREIGN KEY (id_cli) REFERENCES clienti(id_cli)
Has OIDs: no
rubinettofelice=> \d+ articoli
                                Table "public.articoli"
   Column   |         Type          | Modifiers | Storage  | Stats target | Description
------------+-----------------------+-----------+----------+--------------+-------------
 id_art     | integer               | not null  | plain    |              |
 art_nome   | character varying(25) |           | extended |              |
 art_prezzo | real                  |           | plain    |              |
Indexes:
    "articoli_pkey" PRIMARY KEY, btree (id_art)
Referenced by:
    TABLE "artord" CONSTRAINT "artord_id_art_fkey" FOREIGN KEY (id_art) REFERENCES articoli(id_art)
Has OIDs: no
rubinettofelice=> \d+ artord
                            Table "public.artord"
     Column      |  Type   | Modifiers | Storage | Stats target | Description
-----------------+---------+-----------+---------+--------------+-------------
 id_art          | integer | not null  | plain   |              |
 id_ord          | integer | not null  | plain   |              |
 artord_quantita | integer |           | plain   |              |
 artord_prezzo   | real    |           | plain   |              |
Indexes:
    "artord_pkey" PRIMARY KEY, btree (id_art, id_ord)
Foreign-key constraints:
    "artord_id_art_fkey" FOREIGN KEY (id_art) REFERENCES articoli(id_art)
    "artord_id_ord_fkey" FOREIGN KEY (id_ord) REFERENCES ordini(id_ord)
Has OIDs: no

rubinettofelice=> \d+ ordini
                          Table "public.ordini"
   Column   |  Type   | Modifiers | Storage  | Stats target | Description
------------+---------+-----------+----------+--------------+-------------
 id_ord     | integer | not null  | plain    |              |
 id_cli     | integer |           | plain    |              |
 ord_data   | text    |           | extended |              |
 ord_sconto | integer |           | plain    |              |
Indexes:
    "ordini_pkey" PRIMARY KEY, btree (id_ord)
Foreign-key constraints:
    "ordini_id_cli_fkey" FOREIGN KEY (id_cli) REFERENCES clienti(id_cli)
Referenced by:
    TABLE "artord" CONSTRAINT "artord_id_ord_fkey" FOREIGN KEY (id_ord) REFERENCES ordini(id_ord)
Has OIDs: no
rubinettofelice=> SELECT  id_Cli, cli_nome, cli_cognome, cli_citta FROM clienti;
                    rubinettofelice
 id_cli |  cli_nome  | cli_cognome |     cli_citta     
--------+------------+-------------+-------------------
      1 | Pippo      | Franco      | Roma
      2 | Giobatta   | Parodi      | Genova
      3 | Franco     | Neri        | Firenze
      4 | Franca     | Piombo      | Milano
      5 | Daniele    | Persicotti  | Bergamo
      6 | Dino       | Ciabatta    | Trieste
      7 | Adele      | Riposi      | Venezia
      8 | Fraz       | Genvesi     | Bolzano
      9 | Concetto   | Lopresti    | Palermo
     10 | Efisio     | Mannu       | Cagliari
     11 | Franco     | Gullo       | Reggio Calabria
     12 | Daria      | Ricotto     | Bologna
     13 | Aldo       | Magro       | L'Aquila
     14 | Gino       | Viottolo    | Città di Castello
     15 | Pina       | Lolli       | Roma
     16 | Giovanna   | Serra       | Roma
     17 | Franca     | Stella      | Roma
     18 | Gian Carlo | Zerbi       | Genova
     19 | Tony       | Birulò      | Trieste
     20 | Aldo       | Birulò      | Venezia
     21 | Mario      | Parodi      | Genova
(21 rows)

rubinettofelice=> SELECT  id_art, art_nome, art_prezzo FROM articoli;
                rubinettofelice
 id_art |         art_nome         | art_prezzo
--------+--------------------------+------------
   1001 | Rubinetto piccolo        |         10
   1002 | Rubinetto medio          |         15
   1003 | Rubinetto grande         |         20
   1004 | Tubo rame diam. 1        |      0.055
   1005 | Tubo rame diam. 2        |       0.11
   1006 | Chiave pappagallo media  |          8
   1007 | Chiave pappagallo grande |         15
   1008 | Giratubi medio           |         12
   1009 | Giratubi grande          |       30.5
  10010 | Treccia stoppa           |          5
  10011 | Pasta siliconata         |        8.7
  10012 | Pasta lavamani grande    |          6
  10013 | Busta O-Ring assortiti   |        3.5
  10014 | Serie 12 cacciaviti T    |         12
  10015 | Serie 12 cacciaviti X    |         12
  10016 | Cassetta A idraulico     |         20
  10017 | Cassetta B idraulico     |        112
  10018 | Rotolo stagno saldatura  |          7
  10019 | spazzola acciaio         |          5
  10020 | tagliatubi univerale     |       23.5
(20 rows)


 :ciao:
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: sotema - 06 Novembre 2015, 14:15:14
Oggi qualche passetto avanti nella comprensione dei database penso di averlo fatto.  :D

Bene.
Una cosa che non ho capito \dn a me mostra solo public e postgres come schema.
Devo pensare lo Schema come un contenitore in cui puoi creare oggetti del db da tenere separati da altri consentendone l'accesso a gruppi di utenti specifici. E' perfettamente lecito avere una tabella Cliente nello schema Public ed una tabella Cliente nello schema Gianluigi.
Per indirizare l'una o l'altra devi usare la sintassi schema.tabella  Public.Cliente o Gianluigi.Cliente. Ovviamnete i dati contenuti nelle due tabelle possonon differire o essere identici.
Lo schema Public è lo schema predefinito (postgres non è una schema ma il proprietario dello schema Public) e viene creato dalla configurazione iniziale.
Per creare un nuovo schema devi itulizzare il comando
Codice: [Seleziona]
CREATE SCHEMA nomeschema ...
Nel file di configurazione postgresql.conf la chiave search_path serve ad impostare la lista degli schemi in cui effettuare la ricerca degli oggetti.
Lo schema da utilizare può essere anche impostata al volo con l'istruzione sql SET SEARC_PATH nome

Un consiglio, per i valori monetari, laddove serve una corretta approssimazione, puoi usare il tipo Numeric, progettato appositamente per contenere valori monetari, tieni presente che le operazioni matematiche su questo tipo sono più lente rispetto agli Integer.
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 06 Novembre 2015, 22:08:19
Ciao Sotema,
quindi non real ma numeric per precisione decimale sui soldi, grazie.  :ok:
Avevo un po guardato saltabeccando la sontuosa documentazione di PostgreSQL, peccato che sia in inglese che d'accordo che è un pochino più semplice di prima da capire visto il grande aiuto di Google Translator, però quando si affrontano concetti nuovi...  :rolleyes:
Davanti alle spiegazioni difficili che siano in inglese o italiano ormai tendo sempre di più ad assopirmi ho paura che l'età non mi aiuti proprio.  :sleepy:
Dicevo che guardando qui e la nelle spiegazioni avevo incontrato CREATE SCHEMA ma non avevo capito l'utilità degli schemi e temo ancora non mi sia del tutto chiara.
Il fatto è che qui siamo di fronte a un signor  database mentre io ho usato sempre piccoli database che erano dei file unici facili da comprendere, sapevi dove erano li copiavi e mandavi al cliente...

Come ho avuto già modo di dire ho necessità di raffigurare l'insieme in modo concreto per poter capire come funziona, io e l'astrazione viviamo in due dimensioni separate.

Lo so capita sempre dopo l'euforia iniziale arrivano le prime delusioni in concomitanza alle difficoltà a comprendere e poi non siamo tutti uguali, il fatto di essere troppo ignorante e non particolarmente intelligente di certo non mi aiuta.  :'(

Ti chiedo alcune cose, ma sia chiaro che è senza impegno alcuno, intendo dire che se non hai tempo o voglia non mi rispondi e io rimango contento di te in uguale misura, lo giuro davvero.
Già hai spiegato che PostgreSQL può lavorare sia in locale che in rete e la tua guida mi ha permesso di creare un database di prova ecc..., potresti ora delineare un po meglio il quadro:
Dove sono i vari file di PostgreSQL?
Come lo/li spedisci a un cliente?
Crei il database da codice al momento del primo avvio? Se si o a volte, dove lo inserisci?
Io mi sono limitato a crearlo come da tue indicazioni e poi l'ha trovato Gambas in localhost, ma in una realtà lavorativa?
Crei sempre uno schema per ogni utilizzatore o gruppo? Serve per separare il grado di conoscenza fra i vari livelli degli operatori e il loro grado di accesso ai dati?
Che postgres fosse il proprietario dello schema public lo avevo capito, scusa mi sono spiegato malissimo.
Oltre agli schemi, nella tua bella guida ci mostri le sequenze, rispondo come il finto generale di Quella sporca dozzina a proposito dello stato del Missouri, mai sentito e non è che la documentazione mi abbia illuminato.
Per ora mi sembra possa bastare, se però hai cose da aggiungere ti giuro che le leggerò con attenzione.
 :ciao:
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Berserker79 - 07 Novembre 2015, 12:56:03
Ciao a tutti, progetto interessante a cui mi piacerebbe dare un contributo.
Inizio col descrivere brevemente la struttura del gestionale, basato su DB2, che utilizzo in azienda.

Prendo in esempio la tabella anagrafica dell'articolo:
La tabella riporta tutti gli attributi legati all'articolo come codice, descrizione, peso, unità di misura, codice merceologico ecc..
a sua volta un attributo dell'articolo, può avere una propria tabella, ad esempio l'unità di misura viene gestita dalla sua tabella dalla quale possiomo selezionarne il tipo desiderato.

La tabella articolo credo abbia un legame con oltre 50 tabelle "minori", fra le quali scegliere i vari attributi.

Le tabelle "minori", in realtà non sono gestite in maniera individuale, ma fanno parte di un'unica tabella.
Questa ha una colonna che funge da identificativo per tutte le tabelle "minori" mentre le altre colonne riportano i dati veri e propri.

Faccio un paragone con la tabella articolo creata da Gianlugi,
dove abbiamo id_art, art_nome, art_prezzo mentre da me il prezzo, che varia periodicamente, ha una sua tabella dedicata in cui trovo il codice articolo, le date di validità e il prezzo.

Oltre alle tabelle anagrafiche, ci sono le tabelle su cui vengono inseriti giornalmente i dati provenienti da le varie mansioni degli uffici,
ad esempio l'entrata merce al magazzino, la spedizione della merce ai clienti, gli ordini in arrivo dai fornitori, le registrazioni contabili ecc.

Tutte queste attività, sono gestite da molteplici tabelle dedicate, ad esempio tutte le attività di uscita merce giornaliere, vengono memorizzate su una prima tabella, successivamnete in notturna, delle routine analizzano tutti i dati e quelli che superano tutta una serie di controlli, vengono memorizzati in una seconda tabella che quindi conterrà solo i movimenti corretti, arrichhendoli di ulteriori informazioni.

Il campi delle tabelle hanno una nomenclatura che segue questa logica, i primi due caretteri riportano i primi due caretteri della tabella di appartenenza, i restanti, identificano il campo vero e proprio, in questo modo il campo XXART sappiamo che appartiene alla tabella dell'anagrafica articolo, mentre il campo YYART appartiene alla tabella delle uscite merci.
Questo torna utile in fase di progettazione perchè permette di poter idenficare meglio le tabelle e perchè al netto del prefisso, il campo ha lo stesso nome in tutto il db.

A disposizione per qualsiasi chiarimento, ciao.
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: sotema - 07 Novembre 2015, 15:47:55
Ciao Sotema,
quindi non real ma numeric per precisione decimale sui soldi, grazie.  :ok:
Avevo un po guardato saltabeccando la sontuosa documentazione di PostgreSQL, peccato che sia in inglese che d'accordo che è un pochino più semplice di prima da capire visto il grande aiuto di Google Translator, però quando si affrontano concetti nuovi...  :rolleyes:
http://docs.itpug.org/ (http://docs.itpug.org/)

Ti chiedo alcune cose, ma sia chiaro che è senza impegno alcuno, intendo dire che se non hai tempo o voglia non mi rispondi e io rimango contento di te in uguale misura, lo giuro davvero.
Già hai spiegato che PostgreSQL può lavorare sia in locale che in rete e la tua guida mi ha permesso di creare un database di prova ecc..., potresti ora delineare un po meglio il quadro:
Dove sono i vari file di PostgreSQL?
se ti riferisci ai vari database la loro locazione è determinata dalla variabile d'ambiente PGDATA, può variare a seconda del SysOp in uso (Linux, Win, BSD...), su linux può variare a seconda della distribuzione , in genere sono nella cartella /var/lib/postgresql/9.4/main/base ma sono identificati da un codice numerico e non è immediato associare un cluster, questo è il termine esatto, al nome del DB.

Come lo/li spedisci a un cliente?
Tra le varie utilità a disposizione vi è l'applicazione pg_dump che esegue il backup di un intero database; dispone di molte opzioni (a te la ghiotta occasione di studiarle). Per effettuare la copia della struttura di un DB vuoto da trasferire al cliente puoi usare la sintassi:
Codice: [Seleziona]
pg_dump -f rubifelix -U test -s -C -d rubinettofelice
che crea un file di testo contenente le istruzione SQL per creare il database. Tale file può essere dato in pasto a pg_restore (non mi chiedere a cosa serve perché ti licenzio  ;D) oppure puoi farlo leggere dal client psql con il comando \i nomefile

Crei il database da codice al momento del primo avvio? Se si o a volte, dove lo inserisci?
In linea di principio preferisco creare una classe specializzata per creare il db, nel caso questi non esista, al primo avvio del programma.

Ora vado a farmi delle caldarroste... :ciao:
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 07 Novembre 2015, 17:43:52
Ciao a tutti, progetto interessante a cui mi piacerebbe dare un contributo.
Inizio col descrivere brevemente la struttura del gestionale, basato su DB2, che utilizzo in azienda.
Grande Berserker79,
se ti unisci a noi ci renderai felici.  :D
Magari non mi crederai ma un po invidio il tuo lavoro, beati voi che sapete cosa significa “gestionale” e avete la capacità di lavorarci su.

Citazione
Prendo in esempio la tabella anagrafica dell'articolo:
La tabella riporta tutti gli attributi legati all'articolo come codice, descrizione, peso, unità di misura, codice merceologico ecc..
a sua volta un attributo dell'articolo, può avere una propria tabella, ad esempio l'unità di misura viene gestita dalla sua tabella dalla quale possiomo selezionarne il tipo desiderato.

La tabella articolo credo abbia un legame con oltre 50 tabelle "minori", fra le quali scegliere i vari attributi.

Le tabelle "minori", in realtà non sono gestite in maniera individuale, ma fanno parte di un'unica tabella.
Questa ha una colonna che funge da identificativo per tutte le tabelle "minori" mentre le altre colonne riportano i dati veri e propri.
Vuoi dire che una grande tabella fa da base a delle viste di supporto, intendi questo quando parli di tabelle minori?

Citazione
Faccio un paragone con la tabella articolo creata da Gianlugi,
dove abbiamo id_art, art_nome, art_prezzo mentre da me il prezzo, che varia periodicamente, ha una sua tabella dedicata in cui trovo il codice articolo, le date di validità e il prezzo.
La mia tabellina ordini era solo per provare, l'ho estrapolata da un piccolo esempio che avevo tirato giù per parlare di Pragma in SQLite con Picavbg non ha nessuna pretesa di rappresentare una vera tabella, mi incuriosisce molto il fatto che, se capisco bene, nella tua azienda avete lo stesso listino con prezzi diversi distinti solo dalle date differenti. Ho capito bene? Ma se così fosse non c'è rischio di errori? Questo non si scontra con l'univocità nelle relazioni? Pensandoci bene forse è indispensabile un periodo di transazione fra i listini che permetta di smaltire il vecchio sul fronte della contabilità prima di entrare a regime. È per questo motivo che ci sono listini uguali con date e prezzi diversi? Immagino quindi che la chiave primaria preveda incorporata la data oppure la chiave è composita?

Citazione
Oltre alle tabelle anagrafiche, ci sono le tabelle su cui vengono inseriti giornalmente i dati provenienti da le varie mansioni degli uffici,
ad esempio l'entrata merce al magazzino, la spedizione della merce ai clienti, gli ordini in arrivo dai fornitori, le registrazioni contabili ecc.

Tutte queste attività, sono gestite da molteplici tabelle dedicate, ad esempio tutte le attività di uscita merce giornaliere, vengono memorizzate su una prima tabella, successivamnete in notturna, delle routine analizzano tutti i dati e quelli che superano tutta una serie di controlli, vengono memorizzati in una seconda tabella che quindi conterrà solo i movimenti corretti, arrichhendoli di ulteriori informazioni.
Pensavo che con i moderni computer un'attività “notturna” potesse essere evitata e si potesse controllare immediatamente. Se questo lo si potesse evitare io lo auspicherei, se il futuro è la vendita elettronica c'è bisogno di risposte immediate. Anche qui però pensandoci bene si può fare un primo controllo per la risposta immediata ( tipo lo abbiamo o no a magazzino), quindi il controllo più approfondito che coinvolga tutte le componenti interessate in fase successiva (tipo il controllo sulla carta di credito o solvibilità).

Citazione
Il campi delle tabelle hanno una nomenclatura che segue questa logica, i primi due caretteri riportano i primi due caretteri della tabella di appartenenza, i restanti, identificano il campo vero e proprio, in questo modo il campo XXART sappiamo che appartiene alla tabella dell'anagrafica articolo, mentre il campo YYART appartiene alla tabella delle uscite merci.
Questo torna utile in fase di progettazione perchè permette di poter idenficare meglio le tabelle e perchè al netto del prefisso, il campo ha lo stesso nome in tutto il db.

A disposizione per qualsiasi chiarimento, ciao.
Ho momentaneamente sospeso la compilazione dei protocolli di lavoro anche perché essendo io quello che ne sa di meno sui gestionali, devo prima chiedere a voi.
Appena capisco un po di più di PostgreSQL ho intenzione di rimettermi al lavoro.

Riguardo la nomenclatura se proponessi ad esempio:
1. I nomi delle tabelle devono sempre essere plurali se un nome di tabella deve riportare un nome composto tipo AliquoteIva lo si rovescerà per ottenere un chiaro finale plurale e cioè IvaAliquote.
2. I nomi di campo devono sempre essere singolari si potranno abbreviare la dove non è possibile fraintenderne il significato.
3. I nomi di campo saranno preceduti dalle prime tre lettere del nome della tabella più il tratto di sottolineatura fatto salvo il punto 2 e cioè fraintendere a quale tabella ci si riferisce.
4. Le chiavi primarie inizieranno sempre con ID_ e le prime tre lettere del nome della tabella fatto salvo il punto 2.
5. Le chiavi esterne saranno nominate come le loro chiavi di origine.

Se ho capito quanto dici questo non andrebbe bene?

Bene arrivato  :ciao:
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 07 Novembre 2015, 17:50:38
...

Ora vado a farmi delle caldarroste... :ciao:

Buone le caldarroste! Da bambino avevo messo a perdere mia madre che si era dovuta attrezzare con tanto di padella forata.

Dopo, satollo del sublime cibo, se ti va di rispondere anche a quello che hai lasciato in sospeso...   :rotfl:


Dai che scherzo è Berserker79 che mi ha messo di buon'umore.  :D Sembra che abbiamo imbarcato un nuovo avventuriero  :ok:

 :-*  :ciao:

Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Berserker79 - 08 Novembre 2015, 14:48:23
Citazione
Vuoi dire che una grande tabella fa da base a delle viste di supporto, intendi questo quando parli di tabelle minori?

Si tratta di una tabella che nella prima colonna ha inserito il codice/nome della tabella minore, mentre nel secondo campo sono inseriti tutti i dati degli altri campi della tabella minore.
Faccio un esempio:
la tabella minore TBEAN, gestisce il tipo ean, al suo interno troviamo le colonne "TIPO EAN", "CODICE EAN", "EAN ABILITATO".
Nella tabella reale troveremo i dati in questo modo
CODICE_TABELLA  DATI_TABELLA
TBEAN                       E1234567890123S

il dato presente nella colonna "DATI_TABELLA" contiene il carattere E che va associato alla colonna "TIPO EAN", i caratteri 1234567890123 da associare alla colonna "CODICE EAN"
e il carattere S che va associato alla colonna "EAN ABILITATO".

Citazione
La mia tabellina ordini era solo per provare, l'ho estrapolata da un piccolo esempio che avevo tirato giù per parlare di Pragma in SQLite con Picavbg non ha nessuna pretesa di rappresentare una vera tabella, mi incuriosisce molto il fatto che, se capisco bene, nella tua azienda avete lo stesso listino con prezzi diversi distinti solo dalle date differenti. Ho capito bene? Ma se così fosse non c'è rischio di errori? Questo non si scontra con l'univocità nelle relazioni? Pensandoci bene forse è indispensabile un periodo di transazione fra i listini che permetta di smaltire il vecchio sul fronte della contabilità prima di entrare a regime. È per questo motivo che ci sono listini uguali con date e prezzi diversi? Immagino quindi che la chiave primaria preveda incorporata la data oppure la chiave è composita?
la tabella dei listini, ha due colonne che servono a stabilire i periodi di applicazione del listino, inizo periodo e fine periodo.
Questi due campi ti permettono di avere uno storico del listino, mentre se io aggiornassi il prezzo sempre sullo stesso record non potrei fare dei controlli a ritroso sulle variazioni del prezzo.
Ad adempio, oggi ordino al fornitore x, l'articolo y al prezzo z. Successivamnete il fornitore mi comunica un cambio prezzo, che vado a sovrascrivere al prezzo precedente.
Al momento della consegna dalla merce che avevo ordinato, come faccio a verificare se il prezzo che mi ha applicato è quello corretto alla data del mio ordine, tenendo anche conto che la fattura può arrivare anche diverso tempo dopo la data del mio ordine?
Per quanto riguarda la gestione della tabella, ovviamente le date fanno parte della chiave primaria, in modo che il listino non possa avere a partire dalla stessa data due prezzi differenti.

Citazione
Pensavo che con i moderni computer un'attività “notturna” potesse essere evitata e si potesse controllare immediatamente. Se questo lo si potesse evitare io lo auspicherei, se il futuro è la vendita elettronica c'è bisogno di risposte immediate. Anche qui però pensandoci bene si può fare un primo controllo per la risposta immediata ( tipo lo abbiamo o no a magazzino), quindi il controllo più approfondito che coinvolga tutte le componenti interessate in fase successiva (tipo il controllo sulla carta di credito o solvibilità).

Quindi diciamo che ci sono tabelle che chiamo di "lavoro" che subiscono modifiche continumente, da parte degli utenti che svolgono le loro mansioni, mentre ci sono tabelle che chiamo "di consolidamento" che vengono gestite esclusivamente dalle routine notturne, e che contengolo solo dati validi.

Facciamo un esempio:
Faccio un ordine al fornitore di 30 articoli. Questo ordine si trova nella tabella di lavoro A e fino a quando non arriverà la consegna, non passerà sulla tabella di consolidamento B.
Al momento della consegna, rispetto al mio ordine originale, il fornitore non ha consegnato n articoli e di alcuni, ha consegnato delle quantità inferiori alla mia richiesta.
Sulla tabella di lavoro A avrò articoli ordinati, quantità ordinata, quantità ricevuta, mentre sulla tabella di consolidamento B, passeranno solo i movimenti validi perdendo di conseguenza gli articoli che il fornitore non mi ha consegnato. Perderò anche il campo della quantità ordinata, trovando solo la quantità ricevuta insieme ad altri dati come il numero fattura del fornitore.

Se devo realizzare per l'ufficio commerciale un report che mostri tutti gli ordini in consegna futura, ovviamente attingero dalla tabella A.
Mentre se devo realizzare un report che mostri l'analisi delle merci ricevute, attingo alla tabella B che risultà più indicata rispetto alla tabella A (che contiene anche lei i dati della merce ricevuta) in quanto è assente dalle righe superflue della merce non consegnata.
Se devo realizzare un report che mi indica il livello di servizio del fornitore, dovro necessariamente attingere alla tabella A in quanto è l'unica ad avere il dato di orinato e di consegnato.
Se devo realizzare un report sugli ordini consegnati in attesa di ricezione della fattura, dovrò puntare necessariamente alla tabella B che contiene questo dato.

Spero di aver spiegato bene la differenza fra le due tipologie di tabelle, come puoi vedere non è legato ad un discorso di risposta immediata alle richieste utente.

Citazione
Ho momentaneamente sospeso la compilazione dei protocolli di lavoro anche perché essendo io quello che ne sa di meno sui gestionali, devo prima chiedere a voi.
Appena capisco un po di più di PostgreSQL ho intenzione di rimettermi al lavoro.

Riguardo la nomenclatura se proponessi ad esempio:
1. I nomi delle tabelle devono sempre essere plurali se un nome di tabella deve riportare un nome composto tipo AliquoteIva lo si rovescerà per ottenere un chiaro finale plurale e cioè IvaAliquote.
2. I nomi di campo devono sempre essere singolari si potranno abbreviare la dove non è possibile fraintenderne il significato.
3. I nomi di campo saranno preceduti dalle prime tre lettere del nome della tabella più il tratto di sottolineatura fatto salvo il punto 2 e cioè fraintendere a quale tabella ci si riferisce.
4. Le chiavi primarie inizieranno sempre con ID_ e le prime tre lettere del nome della tabella fatto salvo il punto 2.
5. Le chiavi esterne saranno nominate come le loro chiavi di origine.

Se ho capito quanto dici questo non andrebbe bene?

Per quanto riguarda i nomi delle tabelle io utilizzerei solo caratteri maiuscoli, non so perchè ma quando programmo in sql mi piace utilizzare solo maiscuolo  :rolleyes:.
Per quanto riguarda i campi chiave, io sposterei alla fine _ID.
Purtroppo di postgresql non conosco nulla, volevo utilizzarlo ma ho fatto un passo indietro perchè non sono riuscito e non so se sia possibile, collegargli un database esterno (nel mio caso il db del gestionale). Anzi se quancuno di voi sa se è possibile collegare un db esterno allo stesso modo dei linked server su sql server sarebbe bellissimo.
Ciao.
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 08 Novembre 2015, 16:17:08
Ciao Berserker79,
ti ringrazio molto per le tue dettagliate spiegazioni  :ok:, certo è che più mi parlate di gestionale e più mi rendo conto in che bel ginepraio vi sto attirando  :D
...
(un sacco di notizie  :D )
...
Purtroppo di postgresql non conosco nulla, volevo utilizzarlo ma ho fatto un passo indietro perchè non sono riuscito e non so se sia possibile, collegargli un database esterno (nel mio caso il db del gestionale). Anzi se quancuno di voi sa se è possibile collegare un db esterno allo stesso modo dei linked server su sql server sarebbe bellissimo.
Ciao.

Allora devi proprio approfittare dell'occasione per cimentarti con lui.
Nel guazzabuglio di informazioni che ho in testa in questo momento ricordo di aver letto che è possibile collegare PostgreSQL a basi di dati esterne, cosa abbastanza recente credo.
Sono andato a cercare dove avevo letto questo ma non sono riuscito a recuperare l'informazione.  :rolleyes:
Mi sembrava fosse nella documentazione ufficiale ma non ci giurerei.  :-\
Confido in sotema per avere notizie certe. Comunque continuo con le ricerche...

a proposito...

Caro Sotema,
ho scoperto una cosa che mi ha lasciato di stucco: Nella mia home c'è un file (.pgpass) che mostra in chiaro la password dell'utente giangi ma non l'avevamo criptata in md5?  :rolleyes:

È forse dovuto al fatto che per brevità l'ho inserita direttamente nel codice?
 :ciao:  :ciao:
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 08 Novembre 2015, 16:30:08
Ciao Berserker79,
ho trovato (http://blog.2ndquadrant.it/postgresql-9-5-import-foreign-schema/) dove avevo letto la notizia, spero ti sia utile.

 :ciao:
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: sotema - 08 Novembre 2015, 18:47:25
Bravo Gianluigi, vedo che ti stai impegnando.  ;D

Precedentemente a FDW era possibile linkare un database SQL Server tramite ODBC driver; la configurazione era più complessa e richiedeva l'installazione del driver odbc come componente aggiuntivo.
Ciao Berserker79,
ti ringrazio molto per le tue dettagliate spiegazioni  :ok:, certo è che più mi parlate di gestionale e più mi rendo conto in che bel ginepraio vi sto attirando  :D
Caro Sotema,
ho scoperto una cosa che mi ha lasciato di stucco: Nella mia home c'è un file (.pgpass) che mostra in chiaro la password dell'utente giangi ma non l'avevamo criptata in md5?  :rolleyes:
Mai successo.

È forse dovuto al fatto che per brevità l'ho inserita direttamente nel codice?
 :ciao:  :ciao:

dovrei vedere il codice...
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 08 Novembre 2015, 19:51:04
Bravo Gianluigi, vedo che ti stai impegnando.  ;D
L'impegno ce lo metto, purtroppo il cervello è quello che è  :mad:

Citazione
Mai successo.
dovrei vedere il codice...

Ho creato l'utente come da tue istruzioni salvo cambiare test in giangi e la password.
(Mi è venuta in mente una cosa la prima volta che ho usato pgAdminIII ho salvato la password ma poi mi sono accorto che quando accedevo al database da terminale con psql -U giangi -d template1 non mi veniva più chiesta la password e allora sono andato di nuovo su pgAdminIII e ho tolto la spunta e adesso è tornato a chiederla. Che sia dovuto a questo?)

Poi ho aperto il database, ho creato le tabelle e le ho popolate al solito come ho sempre fatto con SQL, questo il codice di accesso al database:

Codice: [Seleziona]
Public $Conn As New Connection
Public sNomeDB As String = "rubinettofelice"

Public Sub AproDB()

  With $Conn
    .Close()
    .Type = "postgresql"   
    .Host = "localhost"
    .Login = "giangi"
    .Password = "CippaLippa"
    .Name = sNomeDB
    .Open()   
  End With
 
  Catch
    Print Error.Text

End
Public Sub ChiudoDB()
 
  $Conn.Close
 
  Catch
    Print "Incredibile errore su Close"
     
End

Ciao e grazie dell'attenzione
 :ciao:
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: sotema - 08 Novembre 2015, 21:13:20
Bravo Gianluigi, vedo che ti stai impegnando.  ;D
L'impegno ce lo metto, purtroppo il cervello è quello che è  :mad:

Citazione
Mai successo.
dovrei vedere il codice...

Ho creato l'utente come da tue istruzioni salvo cambiare test in giangi e la password.
(Mi è venuta in mente una cosa la prima volta che ho usato pgAdminIII ho salvato la password ma poi mi sono accorto che quando accedevo al database da terminale con psql -U giangi -d template1 non mi veniva più chiesta la password e allora sono andato di nuovo su pgAdminIII e ho tolto la spunta e adesso è tornato a chiederla. Che sia dovuto a questo?)
 :ciao:
Hai ragione, il file .pgpass viene creato da pgadmin3 se decidi di salvare la password. la cosa mi era sfuggita perchè non utilizzo mai questa funzione.
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 09 Novembre 2015, 17:57:26
...
Hai ragione, il file .pgpass viene creato da pgadmin3 se decidi di salvare la password. la cosa mi era sfuggita perchè non utilizzo mai questa funzione.

è vero, il bello è che ti avvisa pure ma io davanti agli avvisi mi comporto sempre in modo irragionevole, se sono in inglese spesso non li leggo perché quasi mai li comprendo alla prima a volte mi succede anche con quelli in italiano di non capirli.
Speriamo mi serva da lezione.

Mi è venuta un'idea forse per essere tutti alla pari e non avere differenti comportamenti dovremmo compilare l'ultimo stabile?

Sai mi sto rendendo conto di che bestia è PostgresSQL rispetto ai giocattoli da me usati fino ad ora ho dato il comando template1=> \h ALTER e... mi sono spaventato del risultato.
Veramente straordinario quello che può fare questo database, più ne leggo e più mi accorgo di quel niente che so e pensare che ho solo iniziato e che una buona parte di quello che ho letto non l'ho neanche capita...  :rolleyes:

È interessantissimo e continuo a “picchiarmi” con lui il divertimento, almeno il mio, prosegue...  :D

 :ciao:
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Berserker79 - 09 Novembre 2015, 20:00:43
Ciao Berserker79,
ho trovato (http://blog.2ndquadrant.it/postgresql-9-5-import-foreign-schema/) dove avevo letto la notizia, spero ti sia utile.

 :ciao:

Grazie per il link, appena posso faccio qualche prova e vi faccio sapere.
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: sotema - 09 Novembre 2015, 20:53:56
Sai mi sto rendendo conto di che bestia è PostgresSQL rispetto ai giocattoli da me usati fino ad ora ho dato il comando template1=> \h ALTER e... mi sono spaventato del risultato.
Veramente straordinario quello che può fare questo database, più ne leggo e più mi accorgo di quel niente che so e pensare che ho solo iniziato e che una buona parte di quello che ho letto non l'ho neanche capita...  :rolleyes:

È interessantissimo e continuo a “picchiarmi” con lui il divertimento, almeno il mio, prosegue...  :D
 :ciao:

Hai dato un'occhiata al link che ti ho segnalato? Contienela documentazione, versione 9.1, quasi completamente tradotta in italiano.
 :ok:
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 10 Novembre 2015, 00:50:44

Hai dato un'occhiata al link che ti ho segnalato? Contienela documentazione, versione 9.1, quasi completamente tradotta in italiano.
 :ok:

Ciao Sotema,
certo che ho studiato in italiano li dove mi hai indicato altrimenti non avrei capito nulla del tutto.  :rolleyes:
Ho creato una tabella con la primary key auto incrementale usando il tipo serial, invece con CREATE SEQUENCE che ho la possibilità di impostare la key in vari modi non sono riuscito a farla funzionare, cioè sono riuscito a creare la sequenza dandogli un nome sono riuscito a creare la tabella con la primary key di quel tipo ma poi non riesco a popolarla.
Ora è tardi domani riprovo.
La Sequence sul tuo tutorial è stata creata così?
Ho anche creato uno schema, mi pareva di aver capito che non necessitava scriverne il nome per qualificare la tabella se questa era univoca ma invece... con public puoi non specificarlo ma con gli altri schemi devi, giusto o sbaglio qualcosa?
Sai ho sempre lavorato su database in uso esclusivo (più o meno) pertanto non ho mai considerato se non superficialmente le difficoltà che si possono incontrare solo a incrementare una chiave in uno scenario dove possono tentare di farlo contemporaneamente centinaia di persone.
Accidenti quanti tipi di dato supporta PostgreSQL!
Sto attraversando momenti di vero sconforto, ho paura (anzi ne sono certo) di essere troppo scemo per un programma così raffinato, mi sento così fuori luogo... speriamo bene.
Già mi sentivo inadeguato con SQLite, figurati...
Va bene bando alle ciance, che domani si ricomincia sempre che riesca un po a riposare  :sleepy:
 :ciao:
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 10 Novembre 2015, 16:17:51

la tabella dei listini, ha due colonne che servono a stabilire i periodi di applicazione del listino, inizo periodo e fine periodo.
Questi due campi ti permettono di avere uno storico del listino, mentre se io aggiornassi il prezzo sempre sullo stesso record non potrei fare dei controlli a ritroso sulle variazioni del prezzo.
Ad adempio, oggi ordino al fornitore x, l'articolo y al prezzo z. Successivamnete il fornitore mi comunica un cambio prezzo, che vado a sovrascrivere al prezzo precedente.
Al momento della consegna dalla merce che avevo ordinato, come faccio a verificare se il prezzo che mi ha applicato è quello corretto alla data del mio ordine, tenendo anche conto che la fattura può arrivare anche diverso tempo dopo la data del mio ordine?
Per quanto riguarda la gestione della tabella, ovviamente le date fanno parte della chiave primaria, in modo che il listino non possa avere a partire dalla stessa data due prezzi differenti.


Ciao Berserker79

Allora se capisco bene, visto che comunque per vari motivi occorre mantenere (almeno in parte) i listini storici che possono essere ripescati in base alla data (periodo da a) a questo punto diventa superfluo in RigheOrdini (intendo la tabella di collegamento fra ordini e articoli, OrdArt nel mio esempio) inserire il prezzo dell'articolo venduto, lo si potrebbe ripescare con una view o una query oppure sarebbe troppo complicato? O non è così che si fa normalmente?
Mantenete lo storico solo dei prezzi o anche quello delle descrizioni o/e specifiche? Se non lo mantenete come fate nei periodi di transizione?
Forse la cosa più giusta sarebbe quella di mantenere l'intero listino descrizioni comprese e poi darsi una regola di business che non so dopo 50 anni si rimuovono dal database. Ammesso che fra 50 anni ci siano ancora i computer.  ;D
 :ciao:
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 10 Novembre 2015, 16:51:54
Ciao sotema,
mi occorre aiuto, non riesco a far funzionare questa tabella con la quale volevo studiare SEQUENCE.
Ho creato il database mio_test di proprietà di test ho creato lo schema mioschema e due tabelle entrambe auto incrementali.
La prima mioschema.fornitori usando serial per la primary key (ci ho provato anche un unique),  questa funziona  con queste prove di inserimento agendo da terminale mio_test=> (nota: ho fatto casino con nome e cognome scusa ma ai fini pratici...):
Codice: [Seleziona]
CREATE TABLE mioschema.impiegati(
ID_Imp serial,
imp_codice text,
imp_cognome text,
imp_nome text,
PRIMARY KEY(ID_Imp),
UNIQUE(imp_codice)
);

– vari inserimenti con lo stesso schema devo ancora capire le funzioni di PostgreSQL.
INSERT INTO mioschema.impiegati (imp_codice, imp_cognome, imp_nome) VALUES ('codice6', 'Sergia', 'Mellina');

SELECT nextval('mioschema.impiegati_id_imp_seq');

INSERT INTO mioschema.impiegati (ID_Imp, imp_codice, imp_cognome, imp_nome) VALUES (nextval('mioschema.impiegati_id_imp_seq'), 'codice8', 'Lucia', 'Mondello');

INSERT INTO mioschema.impiegati VALUES (nextval('mioschema.impiegati_id_imp_seq'), 'codice9', 'Lorenzo', 'Tramaglino');

NOTA2: Avendo letto con SELECT il nextval mi si è creato un vuoto.

DOMANDA: Ho visto che ci sono parecchie funzioni in PostgreSQL immagino che siano più veloci di quanto può fare Gambas ciclando la SQL, come ti regoli di solito?

La seconda tabella mioschema.fornitori usando SEQUENCE così al momento di popolarla ottengo questi errori:

Codice: [Seleziona]
CREATE SEQUENCE mioschema.pippo
START WITH 1
INCREMENT BY 1
MINVALUE 1
MAXVALUE 3
CYCLE;


CREATE TABLE mioschema.fornitori(
ID_for mioschema.pippo,
for_cognome text,
for_nome text,
PRIMARY KEY(ID_for)
);



===============================================================================================
INSERT INTO mioschema.fornitori VALUES (nextval('mioschema.pippo'), 'Ciccia', 'Pino');

ERROR:  column "id_for" is of type mioschema.pippo but expression is of type bigint
LINE 1: INSERT INTO mioschema.fornitori VALUES (nextval('mioschema.p...
                                                ^
HINT:  You will need to rewrite or cast the expression.

================================================================================================
INSERT INTO mioschema.fornitori (ID_for, for_cognome, for_nome) VALUES (1, 'Bella', 'Lella');

ERROR:  column "id_for" is of type mioschema.pippo but expression is of type integer
LINE 1: ...fornitori (ID_for, for_cognome, for_nome) VALUES (1, 'Bella'...
                                                             ^
HINT:  You will need to rewrite or cast the expression.

==================================================================================================
INSERT INTO mioschema.fornitori (ID_for, for_cognome, for_nome) VALUES (nextval('mioschema.pippo'), 'Bella', 'Lella');

ERROR:  column "id_for" is of type mioschema.pippo but expression is of type bigint
LINE 1: ...fornitori (ID_for, for_cognome, for_nome) VALUES (nextval('m...
                                                             ^
HINT:  You will need to rewrite or cast the expression.

=====================================================================================================
INSERT INTO mioschema.fornitori (for_cognome, for_nome) VALUES ('Bella', 'Lella');

ERROR:  null value in column "id_for" violates not-null constraint
DETAIL:  Failing row contains (null, Bella, Lella).

È perché ho esagerato con una sequenza cortissima? Bisogna indicare il tipo di valore, ma come?
 :rolleyes:  :rolleyes:  :rolleyes:

Comunque anche a far paciughi mi diverto un sacco  :coder:  :hatecomputer:
 :ciao:
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Berserker79 - 10 Novembre 2015, 19:50:38

la tabella dei listini, ha due colonne che servono a stabilire i periodi di applicazione del listino, inizo periodo e fine periodo.
Questi due campi ti permettono di avere uno storico del listino, mentre se io aggiornassi il prezzo sempre sullo stesso record non potrei fare dei controlli a ritroso sulle variazioni del prezzo.
Ad adempio, oggi ordino al fornitore x, l'articolo y al prezzo z. Successivamnete il fornitore mi comunica un cambio prezzo, che vado a sovrascrivere al prezzo precedente.
Al momento della consegna dalla merce che avevo ordinato, come faccio a verificare se il prezzo che mi ha applicato è quello corretto alla data del mio ordine, tenendo anche conto che la fattura può arrivare anche diverso tempo dopo la data del mio ordine?
Per quanto riguarda la gestione della tabella, ovviamente le date fanno parte della chiave primaria, in modo che il listino non possa avere a partire dalla stessa data due prezzi differenti.


Ciao Berserker79

Allora se capisco bene, visto che comunque per vari motivi occorre mantenere (almeno in parte) i listini storici che possono essere ripescati in base alla data (periodo da a) a questo punto diventa superfluo in RigheOrdini (intendo la tabella di collegamento fra ordini e articoli, OrdArt nel mio esempio) inserire il prezzo dell'articolo venduto, lo si potrebbe ripescare con una view o una query oppure sarebbe troppo complicato? O non è così che si fa normalmente?
Mantenete lo storico solo dei prezzi o anche quello delle descrizioni o/e specifiche? Se non lo mantenete come fate nei periodi di transizione?
Forse la cosa più giusta sarebbe quella di mantenere l'intero listino descrizioni comprese e poi darsi una regola di business che non so dopo 50 anni si rimuovono dal database. Ammesso che fra 50 anni ci siano ancora i computer.  ;D
 :ciao:

Ciao, nella tabella degli ordini metti anche il prezzo in modo da avere accesso immediatamente all'informazione evitando join fra le tabelle dei listini.

Lo storico va tenuto per il prezzo e non per le descrizioni. Nel caso del cambio di una specifica, non la si aggiorna, ma si crea una nuova posizione lasciando inalterata la vecchia.

Noi gestiamo tre tipi di listino su tre tabelle differenti, listini di acquisto, listini di cessione e listini di vendita al pubblico.
I listini di cessione/pubblico sono composti da tre campi che permettono di classificare il listino come listino standard, oppure offerta, oppure netto ecc.
Il sistema così composto, ci permette di tenere attivi più listini da poter utilizzare per le varie fasce di clienti.
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 11 Novembre 2015, 00:34:59

Ciao, nella tabella degli ordini metti anche il prezzo in modo da avere accesso immediatamente all'informazione evitando join fra le tabelle dei listini.
:ok:  me lo aveva detto anche Tornu, Sotema lo aveva confermato, mi arrendo  :D
Citazione
Lo storico va tenuto per il prezzo e non per le descrizioni. Nel caso del cambio di una specifica, non la si aggiorna, ma si crea una nuova posizione lasciando inalterata la vecchia.
Puoi farmi un esempio, non mi è molto chiaro cosa fai, attivi un campo obsoleto?

Citazione
Noi gestiamo tre tipi di listino su tre tabelle differenti, listini di acquisto, listini di cessione e listini di vendita al pubblico.
I listini di cessione/pubblico sono composti da tre campi che permettono di classificare il listino come listino standard, oppure offerta, oppure netto ecc.
Il sistema così composto, ci permette di tenere attivi più listini da poter utilizzare per le varie fasce di clienti.
:ok:
Grazie
 :ciao:
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 11 Novembre 2015, 00:45:01
Ho visto che per usare COPY, ad esempio molto potente per copiare i dati da un file di testo, occorre avere i privilegi di super user; è possibile cambiare ruolo durante l'utilizzo da parte dell'utente? Oppure c'è un modo per dare questo specifico privilegio ad un user?
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: sotema - 11 Novembre 2015, 23:55:56
Ciao Gianluigi purtroppo in questi giorni non ho possibilità di usare internet e sto scrivendo dal cellulare. Nel fine settimana ti chiarirò i dubbi.
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 12 Novembre 2015, 10:59:12
Carissimo sotema,
nessunissimo problema ad attendere, prima cosa perché non ci insegue nessuno, secondariamente ne approfitterò per cercare di studiare un po meglio PostgreSQL  :D
Se poi dovessi aggiungere qualche nuovo dubbio non ti preoccupare è anche un modo di studiare chissà che poi non riesca anche a trovare la risposta  :rolleyes: :mad:
Lo abbiamo già detto ma è sempre utile ribadirlo, il tempo che dedichiamo a Gambas & Co. è ritagliato da impegni più importanti e pressanti, è una delle nostre aree di svago e finché rimarrà tale  prima o poi ci ritorneremo felici di farlo, ma è chiaro che non si possono dare tempi certi.
Pensandoci bene questa discussione potrebbe anche evolversi in qualcosa di più utile ma, come usa dire, meglio è non mettere il carro davanti ai buoi.
 :ciao:
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: sotema - 14 Novembre 2015, 16:27:53
Codice: [Seleziona]
CREATE TABLE mioschema.impiegati(
ID_Imp serial,
imp_codice text,
imp_cognome text,
imp_nome text,
PRIMARY KEY(ID_Imp),
UNIQUE(imp_codice)
);

– vari inserimenti con lo stesso schema devo ancora capire le funzioni di PostgreSQL.
INSERT INTO mioschema.impiegati (imp_codice, imp_cognome, imp_nome) VALUES ('codice6', 'Sergia', 'Mellina');

SELECT nextval('mioschema.impiegati_id_imp_seq');

INSERT INTO mioschema.impiegati (ID_Imp, imp_codice, imp_cognome, imp_nome) VALUES (nextval('mioschema.impiegati_id_imp_seq'), 'codice8', 'Lucia', 'Mondello');

INSERT INTO mioschema.impiegati VALUES (nextval('mioschema.impiegati_id_imp_seq'), 'codice9', 'Lorenzo', 'Tramaglino');

NOTA2: Avendo letto con SELECT il nextval mi si è creato un vuoto.

Nella tabella hai creato il campo ID_Imp specificando come tipo di dato SERIAL, che è uno speciale tipo di INTEGER ad autoincremento. Quando specifichi il tipo SERIAL per un campo PostgreSQL crea automaticamente una sequenza associata ad esso per generare il valore che andrà immesso nel recordo successivo. In effetti le istruzioni:
Codice: [Seleziona]
CREATE TABLE fornitore
(
  fornitore_id serial,
  ...
);

oppure
Codice: [Seleziona]
CREATE SEQUENCE fornitore_id_seq
  INCREMENT 1
  MINVALUE 1
  MAXVALUE 9223372036854775807
  START 1
  CACHE 1;

CREATE TABLE fornitore
(
  fornitore_id integer DEFAULT nextval('fornitore_id_seq'::regclass),
  ...
)

sortiscono lo stesso effetto. Ad ogni inserimento di record nella tabella il campo fornitore_id verrà incrementato di un intero.

Il vantaggio di utilizzare una sequenza personalizzata consiste nel fatto che puoi determinare quale sia il valore dell'incremento.
Codice: [Seleziona]
CREATE SEQUENCE fornitore_id_seq
  INCREMENT 2
  MINVALUE 1
  MAXVALUE 9223372036854775807
  START 1
  CACHE 1;
genera una successione di soli interi dispari.   ;)

L'incremento è inteso in senso algebrico.
Codice: [Seleziona]
CREATE SEQUENCE prova_id_seq
  INCREMENT -1
  MINVALUE 10
  MAXVALUE 1000
  START 1000
  CACHE 1;
genera una squenza decrementale.  ;D

Citazione
NOTA2: Avendo letto con SELECT il nextval mi si è creato un vuoto.
l'istruzione SELECT nextval('nome_sequenza'::regclass) non fa altro che forzare l'incremento della sequenza, non avendo inserito record nella tabella cui questa si riferisce ottieni un 'vuoto'. Esistono alcuni metodi per manipolare le sequenze.
Citazione
DOMANDA: Ho visto che ci sono parecchie funzioni in PostgreSQL immagino che siano più veloci di quanto può fare Gambas ciclando la SQL, come ti regoli di solito?

Penso ti riferisca ai metodi del componente gb.db come Connection.Find, Connection.Edit ... il quale ha lo scopo di creare un livello intermedio tra l'applicazione ed il database. Non sapendo a priori quale DB userai (SQLite, MySQL,PostgreSQL) questi metodi ti sono di notevole aiuto, poichè non dovrai modificare il codice per adattarlo ad eventuali realtà differenti. Sarà Gambas a convertire l'istruzione nella sintassi corretta.
Se diversamente stai scrivendo una applicazione che utilizzerà solo e comunque uno specifico DB, allora con il comando Connection.Exec("istruzione sql") potrai ottenere un maggior controllo al costo di qualche riga di codice (ed eventuali errori) in più.
Libero arbitrio.... 8)

Citazione
Ho visto che per usare COPY, ad esempio molto potente per copiare i dati da un file di testo, occorre avere i privilegi di super user; è possibile cambiare ruolo durante l'utilizzo da parte dell'utente? Oppure c'è un modo per dare questo specifico privilegio ad un user?
Ti riferisci al comando COPY di sql oppure al comando \copy di psql? Ad ogni modo, per utilizzare il comando COPY (FROM/TO) da sql devi possedere il privilegio di SELECT (per COPY TO) sulla tabella da cui vuoi prelevare i dati, il privilegio INSERT per la tabella in cui scrivere i dati (per COPY FROM). In realtà ti basta avere quei privilegi per le colonne che utilizzi nel comando.
Chiaro?
Infine NO il privilegio di SUPERUSER non può ssere cambiato al volo. Puoi assegnarlo nella fase di creazione dell'utente o utilizzare in seguito l'istruzione
Codice: [Seleziona]
ALTER ROLE nomeutente WITH SUPERUSER;

Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 14 Novembre 2015, 17:50:05
Ciao Sotema,
grande  :ok: spiegazioni dettagliatissime ora mi metto a studiare :ok: :D

Riguardo a COPY a seguire quanto ho tentato di fare, come vedi il database impedisce all'utente di copiare da un file di testo dicendo che non ha i privilegi di superuser anche se poi suggerisce che chiunque può copiare. Nota che test è colui che ha creato il database e può usare select e insert :rolleyes:
Codice: [Seleziona]
gian@gian:~$ psql -U test -d template1
Password for user test:
psql (9.3.10)
Type "help" for help.

template1=> \c mio_test
You are now connected to database "mio_test" as user "test".
mio_test=> \d Articoli
               Table "public.articoli"
     Column      |         Type          | Modifiers
-----------------+-----------------------+-----------
 id_art          | character varying(10) |
 art_descrizione | text                  |
 art_prezzo      | numeric               |

mio_test=> SELECT * FROM articoli;
mio_test=> COPY Articoli
mio_test-> FROM '/home/gian/Articoli.txt'
mio_test-> DELIMITER ';';
ERROR:  must be superuser to COPY to or from a file
HINT:  Anyone can COPY to stdout or from stdin. psql's \copy command also works for anyone.
mio_test=> \du
                             List of roles
 Role name |                   Attributes                   | Member of
-----------+------------------------------------------------+-----------
 giangi    | Create role, Create DB                         | {}
 postgres  | Superuser, Create role, Create DB, Replication | {}
 test      | Create role, Create DB                         | {}
Ma il comando di psql (\copy) può essere usato da Gambas con exec?
 :ciao:

PS: mi scuso col Manzoni per aver confuso un suo personaggio con la spiaggia di Palermo  :-[
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: sotema - 14 Novembre 2015, 19:35:08
Ciao Sotema,
grande  :ok: spiegazioni dettagliatissime ora mi metto a studiare :ok: :D

Riguardo a COPY a seguire quanto ho tentato di fare, come vedi il database impedisce all'utente di copiare da un file di testo dicendo che non ha i privilegi di superuser anche se poi suggerisce che chiunque può copiare. Nota che test è colui che ha creato il database e può usare select e insert :rolleyes:
Codice: [Seleziona]
gian@gian:~$ psql -U test -d template1
Password for user test:
psql (9.3.10)
Type "help" for help.

template1=> \c mio_test
You are now connected to database "mio_test" as user "test".
mio_test=> \d Articoli
               Table "public.articoli"
     Column      |         Type          | Modifiers
-----------------+-----------------------+-----------
 id_art          | character varying(10) |
 art_descrizione | text                  |
 art_prezzo      | numeric               |

mio_test=> SELECT * FROM articoli;
mio_test=> COPY Articoli
mio_test-> FROM '/home/gian/Articoli.txt'
mio_test-> DELIMITER ';';
ERROR:  must be superuser to COPY to or from a file
HINT:  Anyone can COPY to stdout or from stdin. psql's \copy command also works for anyone.
mio_test=> \du
                             List of roles
 Role name |                   Attributes                   | Member of
-----------+------------------------------------------------+-----------
 giangi    | Create role, Create DB                         | {}
 postgres  | Superuser, Create role, Create DB, Replication | {}
 test      | Create role, Create DB                         | {}
Ma il comando di psql (\copy) può essere usato da Gambas con exec?
 :ciao:

PS: mi scuso col Manzoni per aver confuso un suo personaggio con la spiaggia di Palermo  :-[
Si solo un SUPERUSER può copiare da o verso un file. Un utente normale può usare COPY tabella (campo1,campo2,...) FROM stdin WITH DELIMITER 'carattere_separatore';
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Berserker79 - 15 Novembre 2015, 06:16:11
Citazione
Lo storico va tenuto per il prezzo e non per le descrizioni. Nel caso del cambio di una specifica, non la si aggiorna, ma si crea una nuova posizione lasciando inalterata la vecchia.
Puoi farmi un esempio, non mi è molto chiaro cosa fai, attivi un campo obsoleto?


Ciao,
mettiamo che tu abbia due categorie di punti vendita, una categoria per punti vendita di piccoli dimensioni con un tipo di assortimento di articoli alla vendita, e l'altra per punti vendita di grandi dimensioni con un assortimento di articoli più ampio.
Mettiamo che per i primi pv utilizzerai il listino AAA e per i secondi il listino BBB.
Ad un certo punto, decidi di utilizzare per tutti i pv il listino BBB, quindi il listino AAA non verrà più utilizzato.
Il listino AAA va lasciato comunque in modo da trovare i dati per interogazioni sui pv della prima categoria, in date in cui avevano associato il listino AAA.
Nel caso si decida di non utilizzare più il listino AAA e che questo non debba essere più visibile nel gestionale per l'uso da parte del personale, si può abilitare un campo  che indica che quel listino non è più valido e quindi il gestionale, sa che deve scartarlo.
Prima di cancellare effettivamente dei record, bisogna considerare l'importanza del tipo di dato. Ad esempio, la tabella degli ordini clienti è gestita in modo che un ordine se cancellato, può essere ripristinato.
Questo perchè le righe non vengono cancellate veramente, ma viene attivato un campo che sta ad indicare se il record è cancellato o no.
Nel caso dei listini, io farei la stessa cosa, terrei tutto quello creato. Proprio questo fine settimana ho dovuto valorizzare dei movimenti a partire dal 2011 ad oggi, ripescando il prezzo associato ad ogni articolo per ogni movimento giornaliero.

Stai prevedendo di inserire nelle tabelle (almeno quelle più importatnti) dei campi dove indicare data, ora e utente che ha inserito/modificato/cancellato il record?
Ciao.
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 16 Novembre 2015, 18:14:18
Scusate ragazzi ma sono due giorni (quasi tre) che mi picchio col sistema operativo (Ubuntu 14.04.3).  :-[
Ho fatto un errore che lo ha reso instabile e alla fine mi sono deciso a reinstallare lasciando però la partizione /home intatta. Il fatto è che prima di decidermi alla reinstallazione le ho provate tutte quelle che so ma anche che non so e infatti ho solo perso tempo.
Ora pare funzionare.

@Sotema,
seguendo i tuoi consigli finalmente sono riuscito a creare con SEQUENCE la chiave auto incrementale come desideravo per capire anche il ciclo.
É molto semplice, arrivato all'ultimo numero ricomincia da capo ma attualmente non riesco a immaginarmene un utilizzo pratico.
Lo studio di PostgreSQL continua...  :D

@Berserker79,
grazie per avermi ricordato di aggiungere i campi per memorizzare chi effettua cosa. Ho preso nota e ne riparliamo quando inizieremo a discutere dei campi delle tabelle.  :ok:

In questi giorni insieme allo studio di PostgreSQL vorrei che iniziassimo a mettere giù il protocollo per la standardizzazione dei termini, purtroppo è chiaro che ognuno di noi ha una sua idea diversa io chiederei a sotema di darci una dritta in quanto è l'unico a usare già PostgreSQL che, se ho capito bene, cambia tutto in minuscolo.
Sotema hai parlato anche di standardizzazione della struttura cosa intendevi esattamente?

Vi rimanderei al primo post quello di apertura di questa discussione, siamo d'accordo sul sentiero da seguire per non perderci o avete proposte più sensate e/o complete da avanzare?
Grazie
 :ciao:
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: sotema - 16 Novembre 2015, 22:16:04
Scusate ragazzi ma sono due giorni (quasi tre) che mi picchio col sistema operativo (Ubuntu 14.04.3).  :-[
Ho fatto un errore che lo ha reso instabile e alla fine mi sono deciso a reinstallare lasciando però la partizione /home intatta. Il fatto è che prima di decidermi alla reinstallazione le ho provate tutte quelle che so ma anche che non so e infatti ho solo perso tempo.
Ora pare funzionare.
Sbagliando si impara... ;D

@Sotema,
seguendo i tuoi consigli finalmente sono riuscito a creare con SEQUENCE la chiave auto incrementale come desideravo per capire anche il ciclo.
É molto semplice, arrivato all'ultimo numero ricomincia da capo ma attualmente non riesco a immaginarmene un utilizzo pratico.
Lo studio di PostgreSQL continua...  :D
Il valore massimo di una sequenza è pari a 263-1 per le sequenze ascendenti e -1 per le sequenze discendenti; raggiunto tale valore la prossima chiamata a nextval() genera un errore. La soluzione è far ripartire la sequenza. Ovviamente devi gestire la cosa qualora il campo controllato dalla sequenza debba contenere valori unici.

io chiederei a sotema di darci una dritta in quanto è l'unico a usare già PostgreSQL che, se ho capito bene, cambia tutto in minuscolo.
Sotema hai parlato anche di standardizzazione della struttura cosa intendevi esattamente?
La 'traduzione' in minuscolo è una convenzione utilizzata per migliorare la lettura delle query, dove le parole chiave vengono scritte in maiuscolo per distinguerle dai nomi di campi, tabelle, funzioni ed ogni altro oggetto del DB. Esiste comunque la possibilità, che personalmente non utilizzo mai e che sconsiglio vivamente di memorizzare i nomi in maiuscolo, i doppi apici: CREATE TABLE "CLIENTE" ...
Riguardo la standardizzazione dei nomi, ogni strada è valida, purché la si rispetti in tutte le tabelle; circa la struttura ti faccio un esempio pratico.
Nella tabella cliente abbiamo il campo cli_id che diventa relazione per la tabella ordine_cliente, ebbene il campo nella tabella ordine_cliente deve chiamarsi anch'esso cli_id.

Vi rimanderei al primo post quello di apertura di questa discussione, siamo d'accordo sul sentiero da seguire per non perderci o avete proposte più sensate e/o complete da avanzare?
Grazie
 :ciao:
Ora vado a rileggerlo.
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 17 Novembre 2015, 22:33:36
La 'traduzione' in minuscolo è una convenzione utilizzata per migliorare la lettura delle query, dove le parole chiave vengono scritte in maiuscolo per distinguerle dai nomi di campi, tabelle, funzioni ed ogni altro oggetto del DB. Esiste comunque la possibilità, che personalmente non utilizzo mai e che sconsiglio vivamente di memorizzare i nomi in maiuscolo, i doppi apici: CREATE TABLE "CLIENTE" ...
Riguardo la standardizzazione dei nomi, ogni strada è valida, purché la si rispetti in tutte le tabelle; circa la struttura ti faccio un esempio pratico.
Nella tabella cliente abbiamo il campo cli_id che diventa relazione per la tabella ordine_cliente, ebbene il campo nella tabella ordine_cliente deve chiamarsi anch'esso cli_id.

Ciao Sotema,
Io avevo scritto questo in una domanda a Berserker79
Citazione da: Gianluigi
Riguardo la nomenclatura se proponessi ad esempio:
1. I nomi delle tabelle devono sempre essere plurali se un nome di tabella deve riportare un nome composto tipo AliquoteIva lo si rovescerà per ottenere un chiaro finale plurale e cioè IvaAliquote.
2. I nomi di campo devono sempre essere singolari si potranno abbreviare la dove non è possibile fraintenderne il significato.
3. I nomi di campo saranno preceduti dalle prime tre lettere del nome della tabella più il tratto di sottolineatura fatto salvo il punto 2 e cioè fraintendere a quale tabella ci si riferisce.
4. Le chiavi primarie inizieranno sempre con ID_ e le prime tre lettere del nome della tabella fatto salvo il punto 2.
5. Le chiavi esterne saranno nominate come le loro chiavi di origine.

Vedo che tu usi per le tabelle nomi singolari ma su questo non sarei d'accordo essendo la tabella un insieme di tanti campi mi appare cosa più intuitiva utilizzare per le tabelle il plurale e per il campo il singolare. Se però ti comporta problemi dillo pure.

Ricapitoliamo:
1. I nomi delle tabelle devono sempre essere plurali se un nome di tabella deve riportare un nome composto tipo aliquote_iva lo si rovescerà per ottenere un chiaro finale plurale e cioè iva_aliquote.
2. I nomi di campo devono sempre essere singolari si potranno abbreviare la dove non è possibile fraintenderne il significato.
3. I nomi di campo saranno preceduti dalle prime tre lettere del nome della tabella più il tratto di sottolineatura fatto salvo il punto 2 e cioè fraintendere a quale tabella ci si riferisce.
Si potrebbe aggiungere che se una tabella è composita il prefisso raddoppierà tipo rig_ord_prezzo.
4. Le chiavi primarie inizieranno con le prime tre lettere del nome della tabella fatto salvo il punto 2 e 3 e finiranno con _id.
5. Le chiavi esterne saranno nominate come le loro chiavi di origine.
6. Più in generale direi che che tutti i nomi escluso i comandi SQL vadano scritti minuscolo e separati dallo underscore o trattino basso.
7. Per facilitare la lettura delle QUERY proporrei di scriverle su più righe tipo (scusate la banalità):
    sMioSql = "SELECT *"
    sMioSql &= " FROM clienti"
    sMioSql &= " ORDER BY cli_cognome DESC,"
    sMioSql &= " cli_nome DESC"
    sMioSql &= ";"

Forse ci sarebbe da parlare di altro ancora, ho un po guardato in giro ma sono troppo poco pratico di  database tosti e non, ho visto che tanti inseriscono nel nome anche PK FK TRG ecc.
A me non pare il caso, forse si potrebbe fare un'eccezione per i campi indicizzati, cosa ne pensate?

Scusate ragazzi se vi appaio un po svuotato, ma i fatti di Parigi...
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Berserker79 - 18 Novembre 2015, 07:23:08
Ciao, sono in dubbio sul mettere il prefisso della tabella prima del nome del campo.
Se lo stesso campo, presente su due tabelle diverse, ha una chiave esterna, la chiave esterna come la imposti?
E poi, vuoi veramente usare le chiavi esterne? Perché non affidare al programma il controllo sull'immissione dei dati, tanto l'utente finale non credo che effettuerà mai dei lavori direttamente in sql sul db, ma lavorera solo tramite il gestionale.

Ritornando al discorso delle sequenze, valuta l'idea di utilizzare delle tabelle dove scrivere l'ultimo numero utilizzato, magari abinandolo all'anno.
Sul gestionale su cui lavoro, molti progressivi (fatture, bolle, registri iva, ecc.), sono insertiti in tabelle dove trovi il campo anno, il codice protocollo, e l'ultimo numero utilizzato.
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 18 Novembre 2015, 11:43:11
Ciao, sono in dubbio sul mettere il prefisso della tabella prima del nome del campo.
Se lo stesso campo, presente su due tabelle diverse, ha una chiave esterna, la chiave esterna come la imposti?
E poi, vuoi veramente usare le chiavi esterne? Perché non affidare al programma il controllo sull'immissione dei dati, tanto l'utente finale non credo che effettuerà mai dei lavori direttamente in sql sul db, ma lavorera solo tramite il gestionale.
Ciao Berserker79,
scusami ma non capisco ad una chiave esterna (FK) corrisponde una chiave primaria (PK).
La chiave primaria è un campo particolare che da solo o in combinazione con altri campi rende univoco il record.
Le chiavi sono a livello di tabella non di campo, vale a dire non esiste un campo che autonomamente ha una chiave primaria e/o esterna.
Le chiavi esterne garantiscono in modo certo al 100% (del limite umano) l'integrità referenziale.
Per tanto che noi si possa essere capaci, attraverso il nostro codice, mai potremmo garantire lo stesso grado di certezza.
Se si nasconderà un baco nel nostro codice l'uso delle FK ci permetterà di scovarlo e comunque impedirà di compromettere i nostri dati.
La chiave esterna sarà facilmente identificabile dal prefisso differente rispetto agli altri campi “primari” della tabella.
Comprendo benissimo di essere quello che ha meno esperienza di tutti, e l'aver pretese di creare un database “perfetto” ti potrà far sorridere o peggio, ma credimi o si parte col piede giusto oppure la marcia va a farsi benedire.
Se ben mi ricordo si parte col piede sinistro :)

Citazione
Ritornando al discorso delle sequenze, valuta l'idea di utilizzare delle tabelle dove scrivere l'ultimo numero utilizzato, magari abinandolo all'anno.
Sul gestionale su cui lavoro, molti progressivi (fatture, bolle, registri iva, ecc.), sono insertiti in tabelle dove trovi il campo anno, il codice protocollo, e l'ultimo numero utilizzato.

Non fraintendere lo studio di PostgreSQL col gestionale.
In questo momento io sto cercando di capire come funziona PostgreSQL per sommi capi tanto da poter poi proporre qualcosa e capire almeno in parte quello che ci risponderà Sotema.

Spero siate d'accordo entrambi che ci conviene discutere un problema per volta, se non vi dispiace e se non lo avete già fatto, proporrei di creare sui vostri desktop una cartella Gestionale Rubinetto Felice.
In questa cartella andremo a mettere tutto quello che ci viene in mente per poi sottoporlo al momento opportuno e cioè quando affronteremo il particolare argomento.
Badate non è una critica, serve solo a evitarci di disperdere buone idee col rischio di smarrirle.

Concluso questo aspetto passeremo poi a definire tutte le voci dei dati che dovremo immagazzinare nelle nostre tabelle.
Come detto ho già raccolto un po di voci, ma specialmente sul lato contabilità di cui nulla so penso di essere carente, se tu te ne capisci manda quello che hai.
Evitiamo di postare “dati sensibili” sono sufficienti le voci e una piccola spiegazione se è il caso.
Penseremo in seguito come raggruppare queste voci in relazioni, per ora è sufficiente capire quali dati occorrerà in seguito manipolare per ottenere le informazioni utili al business dell'azienda.
Grazie
 :ciao:
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 18 Novembre 2015, 11:54:50
Ciao Berserker79,
rimanendo nel campo studio di PostgreSQL ti devo proprio ringraziare perché a volte mi concentro su un solo aspetto senza guardare all'insieme.
Ad esempio come tu hai suggerito poco fa se abbini un campo data ad una sequenza a ciclo otterrai una chiave primaria composita infinita.
Grazie, anche le cose più semplici per me sono difficili da capire  :rolleyes:

 :ciao:
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Berserker79 - 18 Novembre 2015, 19:24:03
Ciao Gianluigi, ci tengo a precisare che rispetto il tuo impegno nel voler realizzare un db come si deve e che non mi permetterei mai di deridere il tuo lavoro.

Il mio dubbio sulle chiavi esterne nasce dal fatto che sia sul db del gestionale che sul db della BI, non ne usiamo.
Pensiamoci bene, per garantire l'integrità dei dati, come vuoi gestire le chiavi esterne, vuoi creare una chiave esterna per tutti i campi attributo di una tabella?
Oppuere vuoi crearla solo per alcuni campi o solo per alcune tabelle?

Io non le ho mai usate, ma ritengo richiedano un maggiore impegno e tempo da dedicare alla realizzazione del db.
Ma anche con le chievi esterne, sul gestionale dovrai comunque attivare i controlli sull'immissione da parte del personale.
Quindi, perchè non dirottare tutto il controllo sul gestionale?
Io sul db, metterei solo il vincolo affinche i campi non possano assumere valori null.

In questi giorni vedo di recuperare del materiale sulle tabelle della contabilità e le posto.
Ciao.
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: sotema - 18 Novembre 2015, 21:37:46
Ciao Gianluigi,
vedo che ti stai impegnando molto nello studio di PostgreSQL. Bravo.
Ho seguito lo scambio tra te e Berseker79 e devo dire che sono d'accordo con entrambi. Dal punto di vista dello studio fai benissimo ad approfondire la conoscenza di PostgrSQL, un database sofisticato e potente, quindi complicato.
Riguardo l'uso delle chiavi esterne vorrei precisare che il loro scopo principale è quello di garantire che non vengano immessi valori non congrui in un determinato campo; ad esempio nella tabella ordini il valore di cliente_id deve obbligatoriamente esistere nella tabella clienti. in caso contrario PostgreSQL impedirà l'immissione del record. Ma se l'immissione dati viene effettuata tramite un applicativo (non da sql) tale verifica la puoi fare molto semplicemente popolando una combobox con tutti i clienti attivi, rendendo inutile la FK. In alternativa dovresti gestire l'eventuale messaggio di errore, cosa assai più complicata.
Anche riguardo le sequenze, nella progettazione di un gestionale, spesso conviene la soluzione proposta da Berseker79, una tabella contenente l'ultimo progressivo ti semplifica di molto il lavoro; non pensare mai di utilizzare una sequenza, ad esempio, per il progressivo di una fattura. Ad ogni cambio anno dovrai reinizializzare la sequenza, tieni presente che il progressivo della sequenza viene incrementato solo al momento dell'immissione del record.
Rimane il fatto che conoscere la materia che si tratta è fondamentale.
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 19 Novembre 2015, 00:52:14
Va bene dovrò mettere delle penali per chi devia dal solco tracciato.   :P
Vi vedo molto ma molto indisciplinati, stiamo decidendo o almeno dovremmo decidere della nomenclatura da usare e invece parliamo di tutto tranne che di quello.
Se andremo avanti così ho paura che manco partiamo con questo benedetto gestionale.  >:(
Comunque visto che oramai abbiamo iniziato...
Parto dalla cosa più semplice lo studio di PostgreSQL: Io non ho detto che useremo le sequenze nel gestionale ne che le useremo col ciclo e la data, ho solo ringraziato Berserker79 per avermi illuminato su una sua possibile applicazione avendo citato l'anno inserito nella chiave primaria, tutto li e ho anche specificato che parlavo di studio e non di gestionale, vi prego di non fare confusione fra studio e gestionale.
Riguardo l'uso delle chiavi esterne vorrei precisare che il loro scopo principale è quello di garantire che non vengano immessi valori non congrui in un determinato campo; ad esempio nella tabella ordini il valore di cliente_id deve obbligatoriamente esistere nella tabella clienti. in caso contrario PostgreSQL impedirà l'immissione del record. Ma se l'immissione dati viene effettuata tramite un applicativo (non da sql) tale verifica la puoi fare molto semplicemente popolando una combobox con tutti i clienti attivi, rendendo inutile la FK. In alternativa dovresti gestire l'eventuale messaggio di errore, cosa assai più complicata.

È chiaro che noi utilizzeremo Gambas per immettere e/o eliminare dati nel database ma non vedo nessunissima complicazione a implementare la sicurezza. Del resto i database danno semplici strumenti per farlo. Oltre a non essere particolarmente complicato ci obbliga a fare le cose correttamente e ci garantisce da eventuali errori.
Io non capisco questa riluttanza da parte vostra, a fronte di un po di codice in più avremo garantiti i dati, ripeto garantiti i dati che sono l'unica cosa veramente importante, la cosa che conta.
Vi rammento che basta una svista un errore logico per inquinarli e poi la frittata è servita.
Non garantire le tabelle, i campi, le relazioni ecc. è il modo migliore per ottenere un database di EMME.   :-[
Voi dovrete essere pazienti con me, molto pazienti perché vi dovrete liberare dai fardelli che vi impongono le aziende che vogliono un database “che funzioni veloce” anche con l'hardware scadente dei clienti.
Se la corretta via prevede tre campi dove altri ne utilizzano solo uno, una vista più elaborata e complicata perché non abbiamo potuto ridondare dati in altre tabelle in modo da non avere problemi di coerenza o una tabella in più per non avere campi vuoti in un'altra e magari il database cammina più lento, vorrà dire che chi lo vorrà usare si comprerà l'hardware adeguato ad un ottimo prodotto.  ;D
So benissimo di avere una bella pretesa, una faccia di tolla, voler adeguare a me che non so, voialtri che sapete invece di essere io ad adattarmi, però credetemi se avrete la certosina pazienza di seguirmi nel folle camino non vi pentirete.
La mia ignoranza mi rende immune da scorie.
E poi scusate fatevi questa domanda, che gusto c'è a fare qualcosa nel modo che già conosco?

Cari Berserker79 e Sotema spero tanto comprendiate lo spirito amichevole di quanto vi scrivo e l'ammirazione che ho per voi (che estendo anche a Tornu sperando tenga fede al suo nome) e che possiate pertanto riuscire a sopportare i miei soprusi.  :-*
Berserker79 mi sono dimenticato di comprenderti fra le persone che hanno una speciale licenza di critica insieme a Tornu e Sotema, se ti va puoi anche sorridere si me che lo accetto volentieri perché so non essere di derisione o almeno lo spero  :D
Per BI intendi business intelligence? Caspita se lavori in un'azienda all'avanguardia!  :ok:

E ora fate i bravi bambini e ditemi cosa ne pensate della nomenclatura, vi va bene? Manca qualcosa?

 :ciao:

PS: Sotema quando parli di combobox ti riferisci mica allo speciale widget creato da Milio?
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Berserker79 - 19 Novembre 2015, 21:09:28
Ciao Gianlugi, per il discorso della nomenclatura, per me va bene quanto proposto da te, anche se io solitamente scrivo tutto in maiuscolo.
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 19 Novembre 2015, 23:24:27
Mi sto domandando come reagirei io a quanto da me scritto nel precedente post se fossi al posto di uno di voi due.
Probabilmente proverei un po di risentimento pensando “guarda un po questo bel tipo, gli metto a disposizione la mia esperienza e lui pretende di saperne più di me e mi sta pure a sfottere facendo il finto modesto, non rendendosi conto delle cavolate (direi cavolate? Davvero?) astronomiche che spara come verità fondamentali”. Penserei seriamente di lasciarlo andare al suo destino e abbandonare il progetto.
Sono contento che al vostro posto ci siate voi.  :D
In effetti quello che ho scritto non mi piace, non che non dica quello che penso anzi, ma è mal esposto, insomma non è facile spiegare bene cosa vorrei riuscire a fare.
Il punto è, come già ho avuto modo di dire, che occorrerebbe semplicemente saperlo ma io non lo so.
O meglio lo so ma solo in parte, quella iniziale occorrerà che ve la esponga con più dovizia di particolari in modo da evitarci nuove incomprensioni.
Potremo così verificare se l'obiettivo è perseguibile oppure no.
Io non so cosa è effettivamente un gestionale ma ho la presunzione di credere di sapere teoricamente come si progetta un buon database.
La progettazione di un database prescinde il software sia di database che di programmazione.
Credo proprio che durante la progettazione non bisognerebbe mai porsi la domanda “già ma poi questo con Gambas e PosgreSQL come lo metto in pratica?”, trovo che sarebbe un errore.
Per ora non pensiamoci se non come ipotesi di studio come fare questo o quello nella pratica, magari la soluzione viene da se con la buona progettazione.
Io credo questo un database ben progettato poi lo si potrà mettere in pratica con qualunque strumento.
Detto questo entriamo un po più nel particolare e iniziamo a mettere qualche paletto:
Qui vi elenco pochi assiomi, regole che io giudico imprescindibili al buon funzionamento di un database relazionale.

Tabella:
Ha sempre una chiave primaria che ne garantisce l'integrità a livello di record, i suoi campi contengono un unico valore, non contiene campi calcolati, rappresenta un singolo oggetto o evento.
Campo:
È unico in tutto il database, è in relazione con gli altri campi della tabella rappresentandone una caratteristica, contiene un valore unico, vale a dire che tale informazione non può essere suddivisa in parti più piccole, non può contenere un valore calcolato.
Relazione:
L'integrità relazionale è data dalla corretta individuazione delle chiavi primarie e delle chiavi esterne, permette di inserire ed eliminare record senza effetti negativi.
Vista:
Per ottenere tutte le informazioni come i campi calcolati e i dati filtrati da più tabelle.

Naturalmente ci sono le eccezioni, i campi ridondati ma devono essere i meno possibile e solo dove strettamente necessario in quanto comportano una possibile fonte di errore.
È anche vero però che troppi join nuocciono alle query.

Lo so ne abbiamo già discusso e mi avete detto che nei vostri gestionali non è così.
Ciò non toglie che noi inizialmente nella fase progettuale ci atterremo a queste poche e semplici regole che non sono scolpite nella roccia ma sono solo di buonsenso.

È prematuro attualmente che non abbiamo ancora isolato i dati che dovremo raggruppare in relazioni per poter ottenere le informazioni utili al database già discutere di questo, questo per ora è il solco in cui ci muoveremo la stella polare su cui tracceremo la rotta poi al momento opportuno discuteremo e risolveremo.
La cosa è molto semplice al momento opportuno basterà dimostrare che un metodo o sistema è meglio di un altro per quel tale e talaltro motivo.
Non sono la vestale del campo perfetto basta convincermi con valide motivazioni. Ad esempio dirmi “nel mio gestionale non c'è” non è sufficiente.

Se anche a Sotema, Tornu e chiunque altro vorrà partecipare va bene la nomenclatura e la trova sufficiente possiamo passare a raggruppare questi benedetti dati.

Appena ho messo giù un esempio calzante e rappresentativo di quello che intendo lo posto così che possiate partecipare anche voi se vorrete con elenchi di dati o con suggerimenti e critiche costruttive.
La mia idea di questa fase era di tipo colloquiale cioè una immaginaria discussione fra noi e il cliente ma visto che non ha funzionato proviamo così.

Come ho già detto e ripetuto io di contabilità non ne so se qualcuno di voi è ferrato nel campo è pregato di postarne i dati utili e un po di spiegazioni. Tornu aveva proposto di non metterla nel progetto voi cosa ne dite? Io proverei se però ci si rende conto di non poter continuare si è sempre in tempo a fare marcia indietro.

Vi chiedo un po di pazienza proviamo a muoverci così e vediamo se diventiamo più produttivi.
Grazie dell'attenzione, buon lavoro.
 :ciao:
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: sotema - 20 Novembre 2015, 22:58:56
1. I nomi delle tabelle devono sempre essere plurali se un nome di tabella deve riportare un nome composto tipo aliquote_iva lo si rovescerà per ottenere un chiaro finale plurale e cioè iva_aliquote.
2. I nomi di campo devono sempre essere singolari si potranno abbreviare la dove non è possibile fraintenderne il significato.
3. I nomi di campo saranno preceduti dalle prime tre lettere del nome della tabella più il tratto di sottolineatura fatto salvo il punto 2 e cioè fraintendere a quale tabella ci si riferisce.
Si potrebbe aggiungere che se una tabella è composita il prefisso raddoppierà tipo rig_ord_prezzo.
4. Le chiavi primarie inizieranno con le prime tre lettere del nome della tabella fatto salvo il punto 2 e 3 e finiranno con _id.
5. Le chiavi esterne saranno nominate come le loro chiavi di origine.
6. Più in generale direi che che tutti i nomi escluso i comandi SQL vadano scritti minuscolo e separati dallo underscore o trattino basso.
7. Per facilitare la lettura delle QUERY proporrei di scriverle su più righe tipo (scusate la banalità):
    sMioSql = "SELECT *"
    sMioSql &= " FROM clienti"
    sMioSql &= " ORDER BY cli_cognome DESC,"
    sMioSql &= " cli_nome DESC"
    sMioSql &= ";"
Premesso che non ho remore ad applicare la metodologia indicata queste le mie considerazioni.
1. OK
2. OK
3. Di solito non uso prefissi nel nome di campo, preferisco usare gli alias1
4. Non mi piace usare il trattino basso, rallenta la digitazione, solitamente uso idcliente e non id_cliente.
5. Assolutamente d'accordo
6. Vedi punto 3
7. Se vuoi che la sentenza SQL nel codice sia comprensibile dovrai obbligatoriamente attenerti a questo.

1 Gli alias sono un modo per abbreviare la sentenza SQL. Ad esempio invece di scrivere
Codice: [Seleziona]
SELECT prodotti.descrizione, fornitori.ragionesociale FROM prodotti, frornitori ...;
puoi scrivere:
Codice: [Seleziona]
SELECT p.descrizione, f.ragionesociale FROM prodotti as p, fornitori as f ...;
dove p ed f sono gli alias di tabella. In query molto lunghe sono molto utili, indispensabili quanto due o più nomi di campo nella query sono uguali.
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 21 Novembre 2015, 16:39:00

Premesso che non ho remore ad applicare la metodologia indicata queste le mie considerazioni.
1. OK
2. OK
3. Di solito non uso prefissi nel nome di campo, preferisco usare gli alias1
4. Non mi piace usare il trattino basso, rallenta la digitazione, solitamente uso idcliente e non id_cliente.
5. Assolutamente d'accordo
6. Vedi punto 3
7. Se vuoi che la sentenza SQL nel codice sia comprensibile dovrai obbligatoriamente attenerti a questo.

1 Gli alias sono un modo per abbreviare la sentenza SQL. Ad esempio invece di scrivere
Codice: [Seleziona]
SELECT prodotti.descrizione, fornitori.ragionesociale FROM prodotti, frornitori ...;
puoi scrivere:
Codice: [Seleziona]
SELECT p.descrizione, f.ragionesociale FROM prodotti as p, fornitori as f ...;
dove p ed f sono gli alias di tabella. In query molto lunghe sono molto utili, indispensabili quanto due o più nomi di campo nella query sono uguali.

Ciao Sotema,
scusa ma mi scappa da ridere non per quello che scrivi, ci mancherebbe! Ma per la situazione che si è venuta a creare, fino ad ora siamo in quattro che abbiamo detto la nostra sulla nomenclatura  e cane se ce n'è uno che è d'accordo con gli altri.  :rotfl:
Forse ma non sono sicuro Tornu potrebbe avvicinartisi però ama le abbreviazioni tipo piva al posto di partitaiva (o partita_iva).
Berserker79 vorrebbe tutto maiuscolo PARTITA_IVA, io il CamelCase  PartitaIva e se non ho capito male tu semplicemente partitaiva.
Be insomma altrimenti non saremmo italiani.  :D
Ripeto se ho capito bene sei d'accordo su abbreviare i nomi solo dove non ci può essere incomprensione se ad esempio Tornu a cui piacciono le abbreviazioni "spinte" ha voglia e tempo può postare un elenco di abbreviazioni per evitarcele (le incomprensioni).
La chiave primaria scritta idcliente a me va bene anche io non ho remore, solo sono molto paciugone e tendo sempre a confondermi è per quello che metto il prefisso per sapere di chi è il campo io quelle poche volte che ho creato query complicate ho sempre usato gli alias non sapevo che il prefisso me le potesse evitare  :rolleyes:

Ricapitoliamo:
1. I nomi delle tabelle non contengono spazi e devono sempre essere plurali se un nome di tabella deve riportare un nome composto tipo aliquoteiva lo si rovescerà per ottenere un chiaro finale plurale e cioè ivaaliquote.
2. I nomi di campo devono sempre essere singolari si potranno abbreviare la dove non è possibile fraintenderne il significato non possono contenere spazi né lettere accentate es. citta e non città (è ovvio ma è bene dirlo).
3. Le chiavi primarie inizieranno con id tipo idcliente
4. Le chiavi esterne saranno nominate come le loro chiavi di origine.
5. Per facilitare la lettura delle QUERY le scriveremo su più righe tipo:
    sMioSql = "SELECT *"
    sMioSql &= " FROM clienti"
    sMioSql &= " ORDER BY cognome DESC,"
    sMioSql &= " nome DESC"
    sMioSql &= ";"

Caro Berserker79 io e te ci dobbiamo sacrificare e probabilmente un po anche Tornu ma non possiamo proprio inimicarci Sotema che è l'unico che conosce PostgreSQL.   ;D :P

Scherzi a parte visto che dobbiamo dialogare con lui tanto vale farlo come vuole PostgreSQL.
Ci abitueremo meglio a leggerne le risposte.
 :ciao:
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: sotema - 21 Novembre 2015, 17:47:48
Ciao Sotema,
scusa ma mi scappa da ridere non per quello che scrivi, ci mancherebbe! Ma per la situazione che si è venuta a creare, fino ad ora siamo in quattro che abbiamo detto la nostra sulla nomenclatura  e cane se ce n'è uno che è d'accordo con gli altri.  :rotfl:
E fino a qui tutto normale...
Forse ma non sono sicuro Tornu potrebbe avvicinartisi però ama le abbreviazioni tipo piva al posto di partitaiva (o partita_iva).
Berserker79 vorrebbe tutto maiuscolo PARTITA_IVA, io il CamelCase  PartitaIva e se non ho capito male tu semplicemente partitaiva.
Be insomma altrimenti non saremmo italiani.  :D
Almeno in questo caso siamo d'accordi in due, anch'io come Tornu preferisco abbreviare laddove possibile. Gli esempi che ho postato erano solo...esempi.
Per quanto riguarda il tutto maiuscolo apprezzato da Berserker79, purtroppo come hai già scoperto è PostgrSQL stesso che pone dei vincoli e dover scrivere sempre i nome racchiusi tra doppi apici può portare ad errori, oltre che complicare la vita.
Ripeto se ho capito bene sei d'accordo su abbreviare i nomi solo dove non ci può essere incomprensione se ad esempio Tornu a cui piacciono le abbreviazioni "spinte" ha voglia e tempo può postare un elenco di abbreviazioni per evitarcele (le incomprensioni).
La chiave primaria scritta idcliente a me va bene anche io non ho remore, solo sono molto paciugone e tendo sempre a confondermi è per quello che metto il prefisso per sapere di chi è il campo io quelle poche volte che ho creato query complicate ho sempre usato gli alias non sapevo che il prefisso me le potesse evitare  :rolleyes:
Se e appena avrò tempo preparo un elenco di abbreviazioni anch'io, poi sceglieremo tra tutte le proposte.
Ricapitoliamo:
1. I nomi delle tabelle non contengono spazi e devono sempre essere plurali se un nome di tabella deve riportare un nome composto tipo aliquoteiva lo si rovescerà per ottenere un chiaro finale plurale e cioè ivaaliquote.
2. I nomi di campo devono sempre essere singolari si potranno abbreviare la dove non è possibile fraintenderne il significato non possono contenere spazi né lettere accentate es. citta e non città (è ovvio ma è bene dirlo).
3. Le chiavi primarie inizieranno con id tipo idcliente
4. Le chiavi esterne saranno nominate come le loro chiavi di origine.
5. Per facilitare la lettura delle QUERY le scriveremo su più righe tipo:
    sMioSql = "SELECT *"
    sMioSql &= " FROM clienti"
    sMioSql &= " ORDER BY cognome DESC,"
    sMioSql &= " nome DESC"
    sMioSql &= ";"

Caro Berserker79 io e te ci dobbiamo sacrificare e probabilmente un po anche Tornu ma non possiamo proprio inimicarci Sotema che è l'unico che conosce PostgreSQL.   ;D :P

Scherzi a parte visto che dobbiamo dialogare con lui tanto vale farlo come vuole PostgreSQL.
Ci abitueremo meglio a leggerne le risposte.
 :ciao:
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Berserker79 - 22 Novembre 2015, 09:20:05
Forse ma non sono sicuro Tornu potrebbe avvicinartisi però ama le abbreviazioni tipo piva al posto di partitaiva (o partita_iva).
Berserker79 vorrebbe tutto maiuscolo PARTITA_IVA, io il CamelCase  PartitaIva e se non ho capito male tu semplicemente partitaiva.
Be insomma altrimenti non saremmo italiani.  :D
Almeno in questo caso siamo d'accordi in due, anch'io come Tornu preferisco abbreviare laddove possibile. Gli esempi che ho postato erano solo...esempi.
Per quanto riguarda il tutto maiuscolo apprezzato da Berserker79, purtroppo come hai già scoperto è PostgrSQL stesso che pone dei vincoli e dover scrivere sempre i nome racchiusi tra doppi apici può portare ad errori, oltre che complicare la vita.

Non sapevo che postgrsql volesse i campi in maiuscolo racchiusi fra virgolette, quindi inutile discuterne, si vada per il tutto minuscolo.
Anche io sono d'accorso sull'usare le abbrevazioni per tabelle e campi, usando lo stesso nome per un campo che si trova su più tabelle.
Ad esempio, l'ipotetica tabella "clienti" avra il campo "cliente_id" che sarà chiave primaria, mentre la tabella "ordini_clienti" avra sempre il campo "cliente_id" anche se qui non è parte della chiave primaria.
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 22 Novembre 2015, 12:08:22

Anche io sono d'accorso sull'usare le abbrevazioni per tabelle e campi, usando lo stesso nome per un campo che si trova su più tabelle.
Ad esempio, l'ipotetica tabella "clienti" avra il campo "cliente_id" che sarà chiave primaria, mentre la tabella "ordini_clienti" avra sempre il campo "cliente_id" anche se qui non è parte della chiave primaria.

Cioa Berserker79,
e ti pareva! L'unico che non ama le abbreviazioni sono io  :'(
Mi raccomando attieniti all'ultima nomenclatura in cinque punti idcliente, id davanti non più dietro e senza underscore.
 :ciao:

PS: Io comando... ma decide Sotema  ;D
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 22 Novembre 2015, 12:14:51
Come credo sappiamo tutti il modello relazionale di database è stato elaborato nel 1970 dal Dr. Edgard Codd ed è basato su teorie matematiche avanzate.
Io che sono una persona molto ignorante non avrei nessuna chance se mi dovessi basare su dette teorie. Per fare un esempio:
“TERZA FORMA NORMALE: Una tabella è in 3NF se è in 2NF e tutti gli attributi non chiave dipendono funzionalmente solo dalla chiave (eliminazione delle dipendenze funzionali transitive). “
questo enunciato messo così per me ha poco significato e se dovessi studiare la progettazione così lascerei subito perdere.
Fortunatamente o sfortunatamente fate voi, anni fa mi capitò di leggere una traduzione in italiano della Mondadori del libro di Michael Hernandez che tentava di spiegare in base alle sue esperienze la progettazione in modo elementare a patto però che si seguissero certe linee guida.
Questo mi permise a suo tempo di creare qualche piccolo database funzionante.
Naturalmente sostenere che, sulla base di quanto detto, ho la presunzione di sapere progettare un database gestionale sarebbe una vera “smargiassata”.
Però dette linee guida sono l'unico sistema che io conosco e che posso seguire.
Hernandez sostiene che per evitarsi di uscire dai binari occorre per prima cosa chiarirsi bene attraverso un enunciato stringato quali sono gli obiettivi finali del database, a cosa serve?
Dire gestionale è esaustivo? Occorrerà specificare meglio?
Quindi si passa alla fase due: Analisi del database legacy interviste e quant'altro occorra per poter estrapolare tutte le voci utili al database.
Cercherò quindi attraverso il semplice esempio che allego di rappresentarvi questa fase per cercare tutti gli elementi di base per poter costruire le tabelle del nostro gestionale.
Qui prendo in esame solo il documento Offerta inviatoci da Tornu così potete vedere come vorrei procedere e dirmi la vostra.
Se la cosa vi sembra sensata poi si prosegue nell'affinamento fino a raggiungere la base delle tabelle.
Poi si passa alle relazioni, alle regole di business, alle visualizzazioni.
Si ricontrolla il tutto e se ci soddisfa si passa alla progettazione con Gambas.
 :ciao:
PS: Mi sono accorto di essermi molto arrugginito ma è anche vero che io di gestionale nulla so.
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: sotema - 22 Novembre 2015, 17:00:39
Mi raccomando attieniti all'ultima nomenclatura in cinque punti idcliente, id davanti non più dietro e senza underscore.
 :ciao:
PS: Io comando... ma decide Sotema  ;D

Visto che siamo 3 contro 1 vada per cliente_id, sul resto mi pare siamo tutti d'accordo. Quindi si parte.
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: sotema - 22 Novembre 2015, 17:20:35
Ciao Guanluigi,
ho dato uno sguardo veloce all'elenco voci offerta, ci sono due voci ripetute: Sconto cassa e Sconto incondizionato.
A mio parere mancano  le voci Codice Iva e Iva Riga, inoltre terrei separati Partita Iva e Codice Fiscale poiché possono differire.
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Berserker79 - 22 Novembre 2015, 18:15:13
Ciao Gianluigi,
se ho capito bene, hai postato un esempio di come vorresti gestire sul db la tabella relativa alle offerte, in particolare nell'ultima pagina dove proponi i possibili campi?

Allego il tuo file dove ho apportato alcune modifiche e aggiunte (ultima pagina) secondo la mia idea di come andrebbe impostata la tabella.
Se ho frainteso il tuo precedente post, mi spiegherai meglio cosa intendevi.
Ciao.
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: tornu - 23 Novembre 2015, 00:13:31
Buonasera a tutti i "temerari" partecipanti a questo progetto,
purtroppo mi sono dovuto assentare tutto questo tempo per motivi lavorativi,
ed essendo fuori sede non ho potuto partecipare attivamente alle vostre discussioni.
Rientrerò a breve (non è una minaccia... ;D)
Comunque complimenti per quanto fin qui sviluppato anche in temini di apporto riguardo
gli aspetti teorici sui DB. Non ho letto aproffonditamente tutti i post, ma vedo che Gianluigi
si stà facendo una discreta cultura in merito, bravo.
Ora vi saluto, ci sentiamo a breve :ciao:
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 23 Novembre 2015, 00:46:32
Ciao Tornu,
felicissimo di risentirti iniziavo a preoccuparmi  :D
Grazie e a presto.
 :ciao:
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 23 Novembre 2015, 01:11:31
Ciao ragazzi,
lo so non mi sono spiegato bene.
Comprendo benissimo che voi abbiate già un'idea di come si costruisce un database gestionale, un'idea vostra legata alle individuali esperienze.
Io vorrei con questa discussione ragionare di come è possibile costruire un gestionale mirato alle esigenze di un particolare cliente.
Usando la stessa metodologia poi si potrà creare qualunque tipo di database.
Per questo ci siamo inventati l'azienda Rubinetto Felice e noi dovremmo essere al contempo intervistatori e intervistati a seconda di chi pone le domande, vale a dire che dovremmo sapere interpretare il ruolo del programmatore del database ma anche degli impiegati e/o proprietario di Rubinetto felice
Diciamo pure che le domande poi sarò più che altro io a farle a voi, ma non è detto che debba essere sempre così.
Noi non stiamo ancora costruendo il database, in questa fase iniziale dobbiamo raccogliere la documentazione e capire come il cliente la usa e di che informazioni ha bisogno.
Io ho postato un semplice esempio di quello che vorrei facessimo per isolare tutte le voci che poi diventeranno tabelle e campi.
Ho preso come esempio l'offerta postata da Tornu in doc2 e ne ho isolato le varie voci, per farvi vedere il sistema di come interpretarle per poi successivamente con vari passaggi tradurle in campi da raggruppare in tabelle
Capiamoci bene non stavo facendo la tabella offerte stavo solo isolando i soggetti e le caratteristiche che appaiono in quel documento.
Ad esempio Sotema ha parlato di iva e anche io concordo, anche l'offerta dovrebbe riportarla.
Infatti io ho parlato di “facciamo finta che questa sia l'offerta ...”, era solo per farvi vedere il metodo con cui avrei intenzione di procedere in quanto come detto non sono un matematico.
Comunque sia un sistema per capire cosa dobbiamo mettere insieme ci vorrà giusto? Per me questo è molto valido e abbastanza semplice.
Se noi analizziamo tutti i documenti report e analisi compresi ed estraiamo con il metodo che vi ho mostrato tutte le voci otterremo un mare di doppioni ma avremo anche tutte le informazioni di cui abbisogna l'organizzazione. Naturalmente i doppioni andranno eliminati.
Spero di essere stato un po più chiaro se guardate la seconda pagina io estraggo tutte le voci che giudico dei soggetti candidati a poter essere delle tabelle, nella terza pagina cerco di estrarre tutte le caratteristiche candidate a diventare dei campi, ma badate bene non i campi di una particolare tabella solo possibili campi candidati a diventare campi definitivi, dopo essere stati ben rifiniti.
Alla fine dell'analisi di tutto quanto avremo un mare di campi e dovremo raggrupparli in relazione fra loro ottenendo così automaticamente le tabelle che andremo a confrontare con i soggetti visti all'inizio e che mano a mano che esamineremo i documenti individueremo.
Fatto questo creeremo le tabelle di raccordo ecc. ecc. ecc.
Naturalmente se conoscete metodologie migliori è il momento di farmele conoscere.
 :ciao:
PS: Ho problemi con Ubuntu per colpa mia e sto reinstallando tutto, credo di averci rimesso anche qualcosa che non sono riuscito a salvare  >:(
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 24 Novembre 2015, 00:05:59
Ciao Sotema,
già che stavo reinstallando tutto ho provato a installare PostgreSQL 9.4.5 sembrava essere andato tutto ok, invece anche dopo che ho impostato la password cifrata continua a non chiedermela.
Con il comando: psql -U postgres -d template1 su peer fallisce come giusto, con md5 stesso comportamento che con trust.  :rolleyes:
Qualche suggerimento?
Allego stralcio del file pg_hba.conf e risposta shell:
Codice: [Seleziona]
# DO NOT DISABLE!
# If you change this first entry you will need to make sure that the
# database superuser can access the database using some other method.
# Noninteractive access to all databases is required during automatic
# maintenance (custom daily cronjobs, replication, and similar tasks).
#
# Database administrative login by Unix domain socket
local   all             postgres                                md5

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local   replication     postgres                                peer
#host    replication     postgres        127.0.0.1/32            md5
#host    replication     postgres        ::1/128                 md5


gian@gian:/etc/postgresql/9.4/main$ psql -U postgres -d template1
psql (9.4.5)
Digita "help" per avere un aiuto.

template1=#

Per installare PostgreSQL 9.4.5 ho usato questa procedura:

Codice: [Seleziona]
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'    

    wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | \
    sudo apt-key add -
    sudo apt-get update
    sudo apt-get upgrade
    sudo apt-get install postgresql-9.4 postgresql-contrib pgadmin3

Mi sono scritto un piccolo promemoria dei comandi base di VI lo allego magari è utile a qualcuno, comunque è praticamente copiato dalla guida di pluto.

Non hai niente da chiedermi sul metodo di lavoro? E nulla da rispondere alle mie domande nel file?
Domanda che estendo a Berserker79 e Tornu.

 :ciao:
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 24 Novembre 2015, 10:55:29
Ciao Sotema,
ieri ero stanco e non mi è venuto in mente che avrei potuto (dovuto) riavviare.
Stamattina pare proprio funzionare.
Non mi ero neanche accorto che psql mi parlava in italiano, figo.  8)
Ecco l'output di psql:
Codice: [Seleziona]
gian@gian:~$ psql -U postgres -d template1
Inserisci la password per l'utente postgres:
psql (9.4.5)
Digita "help" per avere un aiuto.

template1=# \q
gian@gian:~$ psql -U postgres -d template1
Inserisci la password per l'utente postgres:
psql (9.4.5)
Digita "help" per avere un aiuto.

template1=# CREATE ROLE test WITH CREATEDB CREATEROLE LOGIN ENCRYPTED PASSWORD 'testone';
CREATE ROLE
template1=# \du
                          Lista dei ruoli
 Nome ruolo |                 Attributi                 | Membro di
------------+-------------------------------------------+-----------
 postgres   | Superutente, Crea ruoli, Crea DB, Replica | {}
 test       | Crea ruoli, Crea DB                       | {}

template1=#

 :D :D :D

 :ciao:
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: sotema - 24 Novembre 2015, 21:59:05
Ciao Sotema,
ieri ero stanco e non mi è venuto in mente che avrei potuto (dovuto) riavviare.
Stamattina pare proprio funzionare.
Non mi ero neanche accorto che psql mi parlava in italiano, figo.  8)
 :ciao:
I file di configurazione vengono letti all'avvio del server, per cui ogni modifica apportata, affinché diventi effettiva richiede che sia letta dal server. Puoi anche usare il comando: sudo service postgresql reload che non riavvia il server ma lo forza a rileggere la configurazione.
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 01 Dicembre 2015, 18:26:06

I file di configurazione vengono letti all'avvio del server, per cui ogni modifica apportata, affinché diventi effettiva richiede che sia letta dal server. Puoi anche usare il comando: sudo service postgresql reload che non riavvia il server ma lo forza a rileggere la configurazione.

Lo sai che solo ora ho realizzato quanto mi hai detto? Tu lo hai scritto chiaramente nella guida che dopo un cambiamento nei file di configurazione va dato questo comando.
Mi ero dimenticato di darlo e poi pretendevo che mi chiedesse la password  :mad:

Ho avuto un po da fare, nel frattempo speravo in qualche risposta alle mie domande principalmente vorrei sapere se siete d'accordo col metodo proposto. Comunque preparo sulla base di quanto ho già detto un elenco di campi e una proposta di tabelle e poi vediamo.
 :ciao:
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: sotema - 01 Dicembre 2015, 21:09:48
Ciao Gianluigi,
perdona il prolungato silenzio, ma il periodo pre natalizio è per me il peggiore dell'anno.
Riguardo al metodo che suggerisci a me va bene, tenendo conto che giochi al tempo stesso il ruolo del cliente e dello sviluppatore. Non sentirti frustato se non hai ottenuto risposte, vedrai che arrivano.

 :ciao:
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 01 Dicembre 2015, 21:59:33
Ciao Gianluigi,
perdona il prolungato silenzio, ma il periodo pre natalizio è per me il peggiore dell'anno.
Riguardo al metodo che suggerisci a me va bene, tenendo conto che giochi al tempo stesso il ruolo del cliente e dello sviluppatore. Non sentirti frustato se non hai ottenuto risposte, vedrai che arrivano.

 :ciao:

Caro Sotema,
Grazie dell'incoraggiamento  :-*
tranquillo non mi demoralizzo, purtroppo anche io ho avuto qualche problema e non mi sono dedicato al gestionale ma ora ho intenzione di mettermi sotto.
Il problema è che tante risposte non le conosco, ma confido in voi.  :D
 :ciao:
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 01 Dicembre 2015, 22:04:14
...
In questi giorni vedo di recuperare del materiale sulle tabelle della contabilità e le posto.
Ciao.

Ciao Berserker79,
so che sei impegnato, ma quando puoi ti rammento questa promessa  :D
 :ciao:
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 02 Dicembre 2015, 16:08:25
Ciao ragazzi,
Probabilmente l'avrete già letto, ma se così non fosse vi rammento che su Wikipedia è presente la categoria “Teoria delle basi di dati (https://it.wikipedia.org/wiki/Categoria:Teoria_delle_basi_di_dati)”  che rimanda a 74 voci tutte interessanti.
Fra queste vi segnalo in modo particolare:
12 (13) regole di Codd
Normalizzazione e De-normalizzazione
Integrità dati
Modello E-R
Se ci leggiamo tutte le regole che sottendono alla progettazione di un database robusto che possa dar vita ad un solido programma di gestione, potremmo anche decidere di lasciar perdere.
Seguendo invece il metodo Hernandez ci semplificheremo di molto la vita e sono certo che saremo in grado di fare qualcosa di buono.  :D
Sto lavorando al primo elenco generale sulla base dei documenti di Tornu  :coder:

 :ciao:

Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: tornu - 02 Dicembre 2015, 23:06:31
Ciao ragazzi,
sempre compatibilmente con il tempo libero e "rubando ore al riposo e anche a qualcun altro" riprendo la partecipazione a questo ambiziosissimo progetto. Scusatemi se magari parlo di cose che avete già discusso o dico qualche stronz... anche avendo letto
frettolosamente tutti i post dopo la mia assenza qualcosa sicuramente mi sfugge.
Alcune osservazioni:
Sono d'accordo con Sotema quando ha parlato dell'installazione del DB che sarebbe meglio che venga fatta attraverso il programma,
aggiungerei anche l'implementazione di un sistema di backup dei dati.
Riguardo i nomi di campi e tabelle, sono perfettamente d'accordo con chi sostiene di utilizzare i nomi scritti in minuscolo, visto anche,
da quello che ho letto che PgSql non "digerisce" il maiuscolo, ma raramente nella mia esperienza gli ho visti scritti in maiuscolo.
Per quanro riguarda le abbrevazioni di tabelle e campi io le preferisco, vi allego un elenco (non badate all'ordine) di esempi di nomi da
cui di solito "pesco" o prendo spunto per i miei progetti, fatemi sapere che ne pensate.
Allego anche alcune considerazioni evidenziate in verde sul documento postato da Gianluigi e commentato da Berserker79.
Intanto incomincio ad installare PgSql seguendo la guida e i link postati da Sotema e ci sentiamo a presto.
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 03 Dicembre 2015, 17:17:09
Ciao Tornu,
accidenti che accelerata!  :D
Citazione
Sono d'accordo con Sotema quando ha parlato dell'installazione del DB che sarebbe meglio che venga fatta attraverso il programma,  aggiungerei anche l'implementazione di un sistema di backup dei dati.
Sono d'accordo anche io
Citazione
Riguardo i nomi di campi e tabelle, sono perfettamente d'accordo con chi sostiene di utilizzare i nomi scritti in minuscolo, visto anche,  da quello che ho letto che PgSql non "digerisce" il maiuscolo, ma raramente nella mia esperienza gli ho visti scritti in maiuscolo.
Ok, ma nelle abbreviazioni tu scrivi cd (codice) invece di id (identificativo) ti va bene id o vuoi cd? A proposito T01 è solo per tua memoria? Significa Tabella 1?
Citazione
Per quanro riguarda le abbrevazioni di tabelle e campi io le preferisco, vi allego un elenco (non badate all'ordine) di esempi di nomi da cui di solito "pesco" o prendo spunto per i miei progetti, fatemi sapere che ne pensate.
Le trovo molto “spinte” e penso mi daranno qualche problema nella comprensione dei costrutti di interrogazione ma credo occorra farci un po l'abitudine e poi... per me vanno bene.
Citazione
Allego anche alcune considerazioni evidenziate in verde sul documento postato da Gianluigi e commentato da Berserker79.
Risposte sia tue che di Berserker79 molto interessanti di cui dovremo discutere più avanti, ma per la maggior parte premature e fuori contesto.
Come ho già tentato di spiegare in vari modi occorre che ci diamo un metodo organizzato di lavoro, noto ad esempio che le tue abbreviazioni sono accompagnate da lunghezza di campo e numero di decimali, significa che anche tu in qualche maniera avverti l'esigenza di organizzarti.
Bene. Il chiamato da me “metodo Hernandez” prevede un organizzazione sufficientemente elementare da essere capita anche dal sottoscritto per poter costruire database robusti cosa indispensabile per poterci poi edificare sopra un buon programma.
Cerchiamo di seguire questo metodo, lo dico perché altrimenti creeremo solo confusione.
Questo naturalmente se siete interessati a creare qualcosa di veramente nostro che non sia la scopiazzatura di cose costruite da altri.
Questo non vuol assolutissimamente significare che non terremo conto delle vostre esperienze, anzi ma andranno discusse tutte a tempo debito per essere approvate.
Per il momento raccogliamo la documentazione sarebbe più corretto dire raccogliete visto che siete voi quelli che ci lavorano e siete esperti di queste cose.
Io cercherò di estrapolare come vi ho fatto vedere tutte le voci (soggetti e caratteristiche) che poi mano a mano che le affineremo diventeranno nomi di tabelle e di campo.
Vi chiederete a cosa questo possa servire se voi avete i nomi di campo e di tabelle già belli e pronti.
Vi rispondo che così potremo verificare se veramente le scelte fatte a suo tempo da chi costruì il database siano le uniche praticabili o magari altre erano più corrette e comunque discutendone potremmo meglio comprenderle.
Non sarebbe male che voi che conoscete i gestionali postaste dei report o diate idea di quali risultati si aspettano certi uffici.
Citazione
Intanto incomincio ad installare PgSql seguendo la guida e i link postati da Sotema e ci sentiamo a presto.
Se hai Ubuntu 14.04 e desideri l'ultimo PostgreSQL stabile (9.4.5) puoi usare il metodo da me seguito ripreso pari pari dalla wiki ufficiale.

 :ciao:  :ciao:  :ciao:

PS: Tabella Aziende? Cosa intendete niente Clienti, fornitori ecc.
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Berserker79 - 03 Dicembre 2015, 21:16:09
Ciao Gianluigi,
come hai specificato, vuoi iniziare con l'analisi della documentazione presso il cliente,
quindi sareppe opportuno fare un riepilogo dei documenti necessari a tale scopo, verificando quelli già in nostro possesso, in modo da non reperire dei doppioni.
Cosa ne pensi/pensate?

Per la questione del nome dei campi e delle eventuali abbreviazioni, anche se adesso è prematuro parlarne,
dipenderà tutto (credo) dalla decisione di stabilire una lunghezza fissa per il nome del campo, che inevitabilmente obbliga a delle abbreviazioni più o meno estreme.
Ciao.
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: tornu - 03 Dicembre 2015, 21:29:09
Ok, ma nelle abbreviazioni tu scrivi cd (codice) invece di id (identificativo) ti va bene id o vuoi cd? A proposito T01 è solo per tua memoria? Significa Tabella 1?
L'elenco postato era solo per darvi un'idea di cosa io intendevo per abbreviazione nomi campi.
Tieni presente che è un elenco che mi sono costruito un pò di tempo fà, come ho detto lo uso solo come spunto per i nomi dei
campi.
Si T01 è un prefisso riferito alla identificazione delle tabelle, ma non lo uso, si può discutere se implementarlo o meno, per quanto mi riguarda non ho preclusioni in merito.
Va benissimo id.

Citazione
Le trovo molto “spinte” e penso mi daranno qualche problema nella comprensione dei costrutti di interrogazione ma credo occorra farci un po l'abitudine e poi... per me vanno bene.
Sicuramente a chi non è abituato ad usare questo "metodo" può creare qualche problema, ma niente vieta per esempio di aumentare
di qualche carattere i nomi per renderli più "umani".

Citazione
Come ho già tentato di spiegare in vari modi occorre che ci diamo un metodo organizzato di lavoro, noto ad esempio che le tue abbreviazioni sono accompagnate da lunghezza di campo e numero di decimali, significa che anche tu in qualche maniera avverti l'esigenza di organizzarti.
Certo che sì, prima di iniziare qualsiasi progetto che prevvede l'uso di un DB raccolgo tutte le informazioni che mi permettono di
avere una visione la più ampia possibile delle esigenze che il progetto deve prevvedere, è ovvio che essendo i miei progetti seppur
dei gestionali "piccoli", posso fare delle correzioni anche in corso d'opera se qualcosa dovesse esseremi sfuggita.

Citazione
Non sarebbe male che voi che conoscete i gestionali postaste dei report o diate idea di quali risultati si aspettano certi uffici.
Mi spieghi meglio cosa intendi.

Citazione
Se hai Ubuntu 14.04 e desideri l'ultimo PostgreSQL stabile (9.4.5) puoi usare il metodo da me seguito ripreso pari pari dalla wiki ufficiale.
Si, ho Ubunru 14.04 LTS, intendi il wiki ufficiale di Ubuntu ?

Citazione
PS: Tabella Aziende? Cosa intendete niente Clienti, fornitori ecc.
Sarebbe meglio Tabella Azienda, dove memorizzare tutti i dati inerenti la stessa, ragione sociale, sede legale, sede amministrativa,
partita iva, ecc.. da richiamare per esempio per l'instesatzione di tutti i documenti cartacei che verranno prodotti.
Al singolare, perchè al plurale sembrerebbe che il programma punti ad essere  multiazienda, non credo sia il caso di spingerci a questo
livello.
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 03 Dicembre 2015, 22:52:34

Citazione
Se hai Ubuntu 14.04 e desideri l'ultimo PostgreSQL stabile (9.4.5) puoi usare il metodo da me seguito ripreso pari pari dalla wiki ufficiale.
Si, ho Ubunru 14.04 LTS, intendi il wiki ufficiale di Ubuntu ?
No intendevo la Wiki di PostgreSQL, vedi un po qui (https://wiki.postgresql.org/wiki/Apt) purtroppo non mi ricordo come ho fatto ad arrivarci. Continuo ad avere problemi con Ubuntu e ho fatto tante di quelle prove...
In effetti avevo fatto una summa di vari articoli comunque è praticamente quello che ho fatto io, manca solo postgresql-contrib che come vedi io ho aggiunto poi apt si cerca quello giusto per la 9.4.5.
Citazione
Citazione
PS: Tabella Aziende? Cosa intendete niente Clienti, fornitori ecc.
Sarebbe meglio Tabella Azienda, dove memorizzare tutti i dati inerenti la stessa, ragione sociale, sede legale, sede amministrativa,
partita iva, ecc.. da richiamare per esempio per l'instesatzione di tutti i documenti cartacei che verranno prodotti.
Al singolare, perchè al plurale sembrerebbe che il programma punti ad essere  multiazienda, non credo sia il caso di spingerci a questo
livello.

Si ok adesso ho capito, grazie
 :ciao:
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 03 Dicembre 2015, 23:13:04
Ciao Berserker79,
Ciao Gianluigi,
come hai specificato, vuoi iniziare con l'analisi della documentazione presso il cliente,
quindi sareppe opportuno fare un riepilogo dei documenti necessari a tale scopo, verificando quelli già in nostro possesso, in modo da non reperire dei doppioni.
Cosa ne pensi/pensate?
Sono d'accordo, purtroppo i miei sono miseri e datatissimi praticamente inutili alla bisogna. Quelli più validi li ha postati Tornu che sono già tanta roba come usa dire.
Io avevo recuperato in rete cose inerenti la contabilità ma mi sono reso conto essere di scarso valore.
Confido molto in voi che lavorate al database.
Aggiungo qui visto che mi sono dimenticato di rispondere a Tornu che occorrerebbe avere campioni di report di analisi delle vendite, quelle cose che studiano gli uffici marketing che poi tirano giù grafici ecc.  :rolleyes:
Cose di questo genere.
Citazione
Per la questione del nome dei campi e delle eventuali abbreviazioni, anche se adesso è prematuro parlarne,
dipenderà tutto (credo) dalla decisione di stabilire una lunghezza fissa per il nome del campo, che inevitabilmente obbliga a delle abbreviazioni più o meno estreme.
Ciao.
Su questo non ho nulla da ridire mi fido di voi, non capisco il motivo pratico della lunghezza fissa, mi spiegate pleace.
Come detto penso che dopo un po ci si abitua
 :ciao:
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: tornu - 04 Dicembre 2015, 01:22:33
Io avevo recuperato in rete cose inerenti la contabilità ma mi sono reso conto essere di scarso valore.
Confido molto in voi che lavorate al database.
Non è un problema, l'unica cosa è che non saprei cosa proporre vista la vastità dei programmi di contabilità, se qualcuno mi
dice che tipo di documenti vedo di procurarli.

Citazione
Aggiungo qui visto che mi sono dimenticato di rispondere a Tornu che occorrerebbe avere campioni di report di analisi delle vendite, quelle cose che studiano gli uffici marketing che poi tirano giù grafici ecc.  :rolleyes:
Cose di questo genere.
Idem come sopra, perchè si spazia dalle normali analisi di acquisto, venduto, rotazione, ecc... fino ad arrivare alla Business Intelligence

Citazione
Per la questione del nome dei campi e delle eventuali abbreviazioni, anche se adesso è prematuro parlarne,
dipenderà tutto (credo) dalla decisione di stabilire una lunghezza fissa per il nome del campo, che inevitabilmente obbliga a delle abbreviazioni più o meno estreme.
Ciao.
Citazione
Su questo non ho nulla da ridire mi fido di voi, non capisco il motivo pratico della lunghezza fissa, mi spiegate pleace.
Come detto penso che dopo un po ci si abitua
 :ciao:
Se hai guardato attentamente la lista di campi che ho postato come esempio avrai notato che più o meno la lunghezza
dei nomi dei campi è uguale, questione di pulizia e ordine. Non so a te, ma a me è capitato di aver visto dei DB con nomi di
campi da 5 a 20 caratteri, inguardabili.
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 06 Dicembre 2015, 18:03:23
Non è un problema, l'unica cosa è che non saprei cosa proporre vista la vastità dei programmi di contabilità, se qualcuno mi
dice che tipo di documenti vedo di procurarli.
...
Idem come sopra, perchè si spazia dalle normali analisi di acquisto, venduto, rotazione, ecc... fino ad arrivare alla Business Intelligence
Di contabilità non so nulla, Tieni però conto che Rubinetto Felice è una piccolissima azienda avrà in tutto una dozzina di impiegati e neanche dieci rappresentanti di commercio nei suoi momenti di massimo splendore.
Quindi suppongo avrà bisogno di inviare al commercialista la prima nota, gestire le provvigioni (non so gli stipendi), gli ammortamenti, i cartellini ecc.
Per quanto concerne le ricerche di mercato anche qui non so nulla spero che qualcuno più esperto voglia darci qualche dritta altrimenti come già da te suggerito saremo costretti a escludere la contabilità.
Purtroppo le leggi che riguardano questo aspetto sono sempre in evoluzione e pertanto non si può pensare di fare una cosa definitiva, rimane il fatto che se riuscissimo a creare un metodo di progettazione valido si potrà usarlo come traccia anche in futuro per noi stessi e per altri che potrebbero essere interessati in futuro.
Saranno poi i contabili aziendali a spiegarci cosa vogliono dal nostro database, quindi noi basandoci sulle direttive qui sviscerate saremo in grado di ben lavorare.
All'inizio della discussione Sotema aveva parlato di:

Citazione
Se hai guardato attentamente la lista di campi che ho postato come esempio avrai notato che più o meno la lunghezza
dei nomi dei campi è uguale, questione di pulizia e ordine. Non so a te, ma a me è capitato di aver visto dei DB con nomi di
campi da 5 a 20 caratteri, inguardabili.

Hernandez sconsiglia le abbreviazioni sostenendo che possono generare confusione, ma se noi creiamo un documento di spiegazione ecco lì che il problema è superato.

Ho notato che il mio documento sui soggetti e le caratteristiche per individuare tabelle e i campi era un po confuso oltre all'iniziale incomprensione sul suo significato, ho deciso pertanto di farlo in forma tabellare a due colonne VOCE e NOTA così avremo modo di commentare inserendo ognuno la propria nota aggiungendo una o più righe.

Questo è un periodo un po così, causa "feste" e non solo ho prodotto veramente poco per il nostro gestionale. Scusate.
  :ciao:[/list]

PS: Qualcuno saprebbe mica dirmi come mai non riesco a eliminare il tag list dopo ciao?
 :ciao:  :ciao:
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 01 Gennaio 2016, 19:52:41
Come vi avevo anticipato questo è stato un periodo poco fecondo, ciò nonostante malgrado i dati insufficienti e la mia limitatissima, per non dire nulla, conoscenza di gestionali ho cercato di combinare qualcosa sul lato della progettazione.
Avevo anche anticipato che avrei seguito il “Metodo Hernandez” e pertanto allego dei dati estratti dai documenti postati da Tornu.
Il file intitolato caratteristiche dovrebbe contenere tutte le voci di campo presenti nei suddetti documenti.
Il file soggetti incompleto inizia a guardare verso i soggetti appunto che poi diventeranno le tabelle.
Ho anticipato a mo di esemplificazione il soggetto articoli anche se attualmente appare prematuro in quanto non abbiamo neanche finito di estrarre tutte le voci (caratteristiche e soggetti) che dovrebbero poi dare vita al nostro gestionale.
Il file soggetto articoli che introduce alla tabella articoli inizialmente propone solo i campi con relativi nomi abbreviati una volta approvato si dovranno indicare in apposito file tutti gli elementi logici, fisici e di business per ogni campo di tabella.
Dico la verità, visto che in precedenza non mi avevate seguito su questa strada avevo intenzione di fare tutto da solo e poi presentarvi un progetto di base da discutere, ma mi sono reso conto di non essere all'altezza del difficile compito viste le mie troppo scarse conoscenze in merito e i pochi dati in mio possesso.
Basandomi sui documenti di Tornu avevo estratto le voci, elencato le caratteristiche e iniziato a individuare i soggetti per abbinare i relativi campi, solo che mi sono reso conto per i motivi suddetti di non essere in grado di farlo senza le vostre approfondite conoscenze.
Se fossimo nella realtà e fossi solo a districarmi avrei certamente le stesse difficoltà e perplessità ma almeno avrei personale a cui rivolgermi per farmi spiegare come in precedenza risolvevano praticamente quel compito...
Vi faccio un esempio; subito sono partito con le cose che mi sembravano più semplici le future tabelle Fornitori, Clienti, Vettori, Azienda.
Hernandez dice che la tabella ideale deve rappresentare un singolo oggetto o evento insomma un singolo soggetto e fin qui ok i fornitori sono fornitori i clienti non lo sono o almeno non lo sono per la maggior parte e lo stesso vale per i vettori.
Però se noi analizziamo le voci di campo di questi soggetti ci accorgiamo che in larga parte le loro tabelle riportano gli stessi dati Ragione Sociale, Indirizzo, Località, Provincia, CAP, Nazione, Partita Iva, Codice Fiscale, Centralino Telefonico, Fax, E-mail, Sito Web, uno o più Contatti, uno o più Magazzini dove inviare e/o ritirare la merce ecc.*. Allora mi sono detto se il campo ideale rappresenta una caratteristica distinta del soggetto e deve contenere un singolo valore non separabile come la mettiamo con un cliente che non si chiama Rubinetto Felice Srl ma Mario Rossi?
Forse sarebbe più logico fare due distinzioni anagrafiche generali: Anagrafiche Aziendali e Anagrafiche Personali e poi, per dire, la tabella Clienti vedrà il codice di un'azienda e di una persona a seconda dei casi, magari ho appena detto un'idiozia ma credo occorra parlarne prima di proseguire nel progetto.
Parlavamo di Contatti ci sarà l'azienda a carattere familiare dove il titolare è anche l'unico impiegato, contatto ecc. ma avremo casi diametralmente opposti con tantissimi contatti e un codice aziendale nelle Anagrafiche Personali permetterà di trovarli tutti e un campo mansione ci dirà che tipo di lavoro svolge il nostro contatto.
Occorrerà valutare le peculiarità che distinguono i Clienti dai Fornitori ecc. e se non ne discuteremo io rimarrò fermo al palo.
Ho allegato anche un modello che se vorrete potrete usare per apportare i vostri contributi alla discussione.
 :ciao:

*Le ultime due voci (Contatti e Magazzini) essendo soggetti non possono essere dei campi di tabella ma esse stesse Tabelle.
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 05 Gennaio 2016, 20:03:44
Vi sottopongo un abbozzo di relazioni per la tabella Anagrafiche Aziende.
In attesa di vostro riscontro...
Ciao
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 06 Gennaio 2016, 14:51:00
Il file pdf mancava delle relazioni, ora ci sono  :)

 :ciao:
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: tornu - 06 Gennaio 2016, 21:04:20
Ciao Gianluigi,
non hai ancora digerito le abbuffate (...dici la verità  ;D) di queste festività che già ti sei rimesso a lavoro.
Do uno sguardo alla documentazione che hai postato...ci sentiamo presto  :ciao:
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 06 Gennaio 2016, 22:54:33
Ciao Gianluigi,
non hai ancora digerito le abbuffate (...dici la verità  ;D) di queste festività che già ti sei rimesso a lavoro.
Do uno sguardo alla documentazione che hai postato...ci sentiamo presto  :ciao:

Ciao Tornu,
ok aspetto e mentre smaltisco   :P allego nuovo file pdf con correzione e perplessità.

 :ciao:
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Berserker79 - 07 Gennaio 2016, 19:53:54
Ciao Gianluigi, purtroppo adesso sono sommerso di lavoro e non ho tempo di verificare quanto hai postato.
Spero nel fine settimana di trovare uno spazietto per dargli un'occhiata.
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: sotema - 16 Gennaio 2016, 20:11:29
Ciao Gianluigi.
Innanzitutto complimenti per la mole di lavoro svolto, immagino dedicandogli molto del tuo tempo libero.
Ho dato un'occhiata veloce a quanto da te prodotto e vorrei segnalare solo un paio di cose. Visto che usi una tabella principale Aziende cui associ le anagrafiche vettori, clienti, fornitori ed azienda perché non utilizzare le tabelle ereditate? La tabella principale sarà ANAZIE e le anagrafiche ereditano tutti i campi della tabella padre, in aggiunta ciascuna di esse avrà un campo Codice che ti permette di identificare la singola anagrafica. Ad esempio la tabella anacli conterrà il campo codcl (codice cliente), la tabella anafor il campo codfo...

Per quanto riguarda invece la gestione degli aggiornamenti invece dei campi datag ed oragg utilizzerei un solo campu ulagg di tipo timestamp.

Spero comunque di trovare un poco di tempo domani per approfondire l'analisi.

A presto.  :ok:
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 16 Gennaio 2016, 23:20:46
Cari Tornu, Berserker79 e Sotema,
piacere di risentirvi tutti e tre anche nel nuovo anno, spero che i vostri impegni vi lascino un po di tempo per il nostro hobby  :D
Vi rammento che se volete che vada avanti con le proposte occorre che mi mandiate del materiale.
Vi devo altresì confessare che io di magazzino...  :'(
@Sotema,
forte il suggerimento rivolto agli oggetti, era mia intenzione iniziale che progettassimo un database generico adatto a qualunque marca di database come raccomanda Hernandez, in effetti non ha senso visto che abbiamo scelto PostgreSQL e allora ti chiedo ma poi con SQL come si interroga una tabella ereditata? Come si disegna nello schema?
Ok ulagg (già fatto) e timestamp (da ricordare), risparmiamo un campo (intanto chissà quanti ne ho scordati)  :-[
Povero Hernandez quanti strappi alle sue regole

A proposito di campi dimenticati:
Per l'azienda aggiungo un campo registro imprese?
Sempre per l'azienda il logo va memorizzato in tabella? Magari il percorso del file?
Per le aziende tutte ci può essere una amministrazione con ragione sociale diversa, come si fa con l'eredità? Senza eredità si potrebbe cambiare la relazione da uno a uno in uno a molti...
In un gestionale parlavano di ragione sociale aggiuntiva, parlavano di questo?

A presto  :D
Gianluigi
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: sotema - 17 Gennaio 2016, 00:40:58
@Sotema,
forte il suggerimento rivolto agli oggetti, era mia intenzione iniziale che progettassimo un database generico adatto a qualunque marca di database come raccomanda Hernandez, in effetti non ha senso visto che abbiamo scelto PostgreSQL e allora ti chiedo ma poi con SQL come si interroga una tabella ereditata?

semplicemente con SELECT. Poniamo che la tabella anacli eredita la tabella anazie, ebbene con l'istruzione:
Codice: [Seleziona]
SELECT rasaz, indaz, idtcl FROM anacli ;
estrai i campi da entrambe le tabelle.
Come si disegna nello schema?
vedi allegato, nello schema studente, disoccupato e lavoratore ereditano persona.
A proposito di campi dimenticati:
Per l'azienda aggiungo un campo registro imprese?
Il Numero Registro Imprese corrisponde al Codice Fiscale (non la partita iva a meno che questa sia uguale al CF); la modifica è stata introdotta dal DPR 586 del 14 dicembre 1999. Aggiungerei invece il campo REA (Numero di Repertorio delle notizie Economiche e Amministrative del Registro delle Imprese). Mentre il numero RI è unico a livello nazionale e assegnato dalla CCIAA della provincia in cui risiede la sede legale, il numero REA è diverso per ogni provincia/CCIAA in cui apri una sede/unità locale. Di conseguenza apporterei le seguenti modifiche:
1. La tabella anamag deve essere rinominata in ansedi
2. La tabella ansedi deve contenere il campo nurea

Circa la problematica della Ragione Sociale aggiuntiva... è la prima volta che lo sento. Mi informo.

Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 17 Gennaio 2016, 19:01:45
Ciao Sotema,
Sono andato un po in tilt allego due relazioni dubbiose.  :mad:
Ho cambiato anamag in ansedi e aggiunto rease per nurea (ti dispiace se continuo a far entrare il nome di tabella nel nome di campo?)
Lo faccio nel tentativo di aiutare nell'individuazione dell'errore, se ad esempio stiamo costruendo un'interrogazione che prevede l'uso di 2 tabelle e vediamo finire un campo con una terza coppia di caratteri...
Ma sia chiaro che se non vi va bene facciamo come volete voi che siete gli esperti. Quindi su questo dovete esprimervi tutti.

Ritornando ad ansedi questa tabella suppongo conterrà anche le sedi dei vari magazzini (nostri dei vettori dei clienti a cui inviamo la merce ecc.), giusto? In questo caso occorrerà togliere il campo addetto che potrebbe andare per un magazzino ma è senz'altro restrittivo per delle sedi che possono avere parecchi addetti con mansioni diverse occorrerà anche inserire più campi, credo.

Un'altra cosa: Avevo già accennato alla possibilità di utilizzare per le aziende a conduzione famigliare la tabella personale, in questo caso se foste d'accordo occorrerebbe togliere il campo partita iva (pivaz) e aggiungerlo alle quattro tabelle particolari ( Clienti, fornitori, vettori e azienda).

Aiuto  :rolleyes:

NOTA: Allegato spostato al post successivo
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: sotema - 18 Gennaio 2016, 12:05:37
Ciao Gianluigi,
circa i nomi dei campi procedi pure con la logica sinora utilizzata; spesso nelle risposte ai post non bado alla precisione, è un difetto che mi porto fin dall'antichità.

Per quanto riguarda la tabella ansedi, dal diagramma Relazioni Aziende 2, mi pare di capire che la tabella anaper si collega alla tabella anamag attraverso le tabelle anacli, anafor, anavet, anazi; quindi sarai sempre in grado di associare la/le persone ad una aienda. Ci saranno aziende con più addetti di magazzino e aziende con un solo addetto. Dalla tabella mansio potrai selezionare gli addetti di magazzino.

Riguardo le imprese a conduzione famigliare anch'esse hanno l'obbligo di aprire una Partita Iva, qundi non vedo l'ostacolo.

Se ho male inteso ti prego di chiarirmi i tuoi dubbi.

EDIT:
ho scaricato la tabella ansed. Mi chiedo perché l'hai completamente riscritta. la struttura di anamag era corretta, poco importa che la sede sia un magazzino o uffici, resta pur sempre una sede.

Sotema
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 18 Gennaio 2016, 12:20:26
Ciao Sotema,
La tua risposta si basa su mie elucubrazioni molto confuse e ti chiedo scusa, perdonami.
Sai il problema è che io non ho chiara la situazione generale.
Basandomi sui documenti di Tornu subito ho pensato che avessimo a che fare con aziende che potessero avere più magazzini ma avevo pensato che se un'azienda aveva più filiali queste dovessero essere considerate aziende a se stanti.
Pare che non sia così, per esempio non ho tenuto conto di quelle aziende che hanno la sede amministrativa presso uno studio professionale e poi svolgono l'attività in altro luogo.
In generale non sono particolarmente sveglio ma ieri non lo ero in modo particolare anche perché seguire i risultati di calcio mentre si valuta un gestionale forse non è così conveniente.
Mi scuso per l'incomprensibile tabella anased l'ho confusa con lo studio dei codici forse a pranzo dovrei essere ancor più morigerato nel bere.
Provvedo a cambiarla e posto tutto qui, li mi limito a cancellare.
Propongo anche l'ennesima possibile relazione, non mi convince in quanto i magazzini non credo abbiano REA, Codice Fiscale, sito web...
 :ciao:
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: sotema - 18 Gennaio 2016, 14:00:23
Ciao Gianluigi,
penso ti stia ingarbugliando.
Che senso ha porre dei vincoli nella tabella anazie verso anacli, anafor,... quando queste sono già legate ad anazie tramite idazi? Non so perché avevi pensato alle tabelle anacli e anafor, forse per separare nettamente clienti e fornitori? IN questo caso ti suggerisco di inserire i campi codcl (codice cliente) e codfo (codice fornitore) dati da stampare obbligatoriamente sui documenti fiscali. Se poi predisponi una tabella listini (altra bella storia), potresti collegarla ad anacli per gestire le condizioni di vendita. La tabella anavet potresti popolarla con i campi relativi a Luoghi di consegna (potrebbe essere un corriere locale, regionale o nazionale) ed i relativi costi; la qualcosa potrebbe tornare utile in sede di preventivo. Anche i tempi di presa e consegna possono differire da un vettore all'altro.

Non comprendo invece lo scopo della tabella anazia.

seguire i risultati di calcio mentre si valuta un gestionale forse non è così conveniente.

sarà per questo che non mi interessa il calcio?
 ;D

Propongo anche l'ennesima possibile relazione, non mi convince in quanto i magazzini non credo abbiano REA, Codice Fiscale, sito web...
 :ciao:

Le sedi decentrate, siano esse magazzini o uffici, detengono un diverso Numero REA se risiedono in una provincia diversa dalla sede legale, facendo quindi capo ad una differente CCIAA.
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 18 Gennaio 2016, 14:39:04
Ciao Gianluigi,
penso ti stia ingarbugliando.
Ciao Sotema,
parole sante  :rolleyes:
Citazione
Che senso ha porre dei vincoli nella tabella anazie verso anacli, anafor,... quando queste sono già legate ad anazie tramite idazi? Non so perché avevi pensato alle tabelle anacli e anafor, forse per separare nettamente clienti e fornitori? IN questo caso ti suggerisco di inserire i campi codcl (codice cliente) e codfo (codice fornitore) dati da stampare obbligatoriamente sui documenti fiscali. Se poi predisponi una tabella listini (altra bella storia), potresti collegarla ad anacli per gestire le condizioni di vendita. La tabella anavet potresti popolarla con i campi relativi a Luoghi di consegna (potrebbe essere un corriere locale, regionale o nazionale) ed i relativi costi; la qualcosa potrebbe tornare utile in sede di preventivo. Anche i tempi di presa e consegna possono differire da un vettore all'altro.

A quale Tavola relazionale ti riferisci? Se ti riferisci alla prima (dubbiosa1) il codice è quello idazi essendo relazioni 1:1 le tabelle servono a contenere i dati che differenziano i clienti dai fornitori dall'azienda e dai vettori Io ho sempre agito così è sbagliato?
Citazione
Non comprendo invece lo scopo della tabella anazia.
Come detto la nostra azienda avrà un logo e dati particolari da esporre nei documenti o no? Tutto ciò che è particolare va messo nella tabella specifica tutto ciò che è comune nella tabella anazie, sempre parlando di relazioni 1:1 invece per le relazioni 1:N le cose cambiano.
Citazione
Le sedi decentrate, siano esse magazzini o uffici, detengono un diverso Numero REA se risiedono in una provincia diversa dalla sede legale, facendo quindi capo ad una differente CCIAA.
Significa che la tavola relazionale "NuovaRelazioneAziendale" ti convince? Mi era parso di no.  :P
Il problema è (parlando di dubbiosa1) che non riesco a capire come adattare la tabella pensata per i magazzini (intesi come luogo di invio e ritiro merce) con una tabella più generica che in pratica andrebbe a ricalcare anazie

Forse conviene soprassedere per ora che non abbiamo ancora il quadro completo? Oppure invece questi discorsi tendono a chiarire le cose?
 :ciao:
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: sotema - 18 Gennaio 2016, 18:47:21
Ciao Gianluigi,
perdonami se qualche volta perdo il filo, i tuoi richiami a quanto detto nei primi post è fondamentale. Purtroppo il tempo da dedicare al forum viene ritagliato tra i troppi impegni.
Cerco di essere più preciso possibile, ma sono convinto che ne usciremo vivi.
Il diagramma Relazione Aziendale 2 mi sembra quello meglio concepito, lavorerei su quello, apportando le seguenti modifiche:
1. Rinominare la tabella anamag in anasedi
2. Nella tabella anasedi inserire il campo reased
3. In tutte le tabelle eliminare il campo oragg e rinominare il campo datag in ulagg (timestamp)
4. Nella tabella rinominerei il campo idctl in idcli
5. I campi ulagg e utagg devono comparire in tutte le tabelle. Ma non sono delle relazioni.
6. La gestione dei vettori la farei in questo modo:
    La tabella principale anavet che contiene, tramite anazie, l'anagrafica
    Una tabella separata per la gestione della tipologia: locale, regionale, nazionale, espresso...
    Una tabella separata per la gestione dei tempi e delle condizioni economiche; spesso i corrieri offrono tabelle di costo in base al peso, ai volumi di lavoro ecc.
Ovviamente se la funzione di anacli, anafor e anavet è quella di gestire i campi che differenziano cade il discorso sulla eredità.

Le relazioni che ritengo superflue sono quelle inserite nel diagramma Nuova Relazione Aziende dove hai inserito in anazie i campi idcli, idfor, idvet.

Sotema

Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 18 Gennaio 2016, 23:25:20
Ciao Sotema,
scusa il ritardo della risposta, ma sono dovuto uscire e rientro solo adesso.
Ok domani mi metto all'opre e ridisegno le relazioni fra tabelle come da tue richieste anche se mi appare oscuro il motivo di inserire idcli al posto di idtcl (ID Tipologia Cliente) che avrebbe dovuto catalogare i clienti in base all'importanza e che potrebbe essere utile per la scontistica.
Per quale motivo non è sufficiente il codice azienda (idazi)?
Non comprendo come funziona l'eredità per le tabelle nei database, credevo avesse le stesse funzioni che ha per le classi, vale a dire ereditare tutti i campi dal padre (anazie) e poter averne in più dei suoi specifici ad esempio giusto la tipologia per i clienti, il logo per l'azienda o il nome abbreviato per i fornitori...
Se così non è sembra una cosa poco utile.
Ti ripeto la mia perplessità circa la tabella anamag da cambiare in anasedi sembra una ripetizione della tabella anazie quali campi reputi indispensabili in essa? Quali superflui?
In RelazioniAziendedubbiosa1 avevo tentato di seguire i tuoi suggerimenti a parte le ultime indicazioni cosa non ti convince della tabella ansedi?

 :ciao: Gianluigi
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: sotema - 20 Gennaio 2016, 00:07:53
Ciao Sotema,
scusa il ritardo della risposta, ma sono dovuto uscire e rientro solo adesso.
Come vedi anche io non scherzo coi tempi...
Nel mio ultimo post dicevo che prendevo a  riferimento il diagramma Relazione Aziende 2

mi appare oscuro il motivo di inserire idcli al posto di idtcl (ID Tipologia Cliente) che avrebbe dovuto catalogare i clienti in base all'importanza e che potrebbe essere utile per la scontistica.
Non avevo intuito che la t in idtcl stava per 'tipo', pensavo ad un errore di scrittura.

Ti ripeto la mia perplessità circa la tabella anamag da cambiare in anasedi sembra una ripetizione della tabella anazie quali campi reputi indispensabili in essa? Quali superflui?
Se lo scopo della tabella anasedi è catalogare le varie sedi (siano esse magazzini o no) delle aziende contenute in anazie, allora dovrai registrarvi i dati fiscali di ciascuna sede;  se poi la sede di cui parliamo è un filiale di Rubinetto Felice il Numero REA, che sarà differente da quello della sede centrale qualora la sede sia residente in una provincia diversa, deve necessariamente essere registrato poiché deve comparire nei documenti fiscali emessi dalla filiale. Per chiarire il concetto :

Spedizione a Sede o Magazzino  di un cliente
Sui documenti fiscali dovranno apparire:
Per Rubinetto Felice
Ragione Sociale
Indirizzo Sede Legale (Via - Comune - CAP - Provincia)
Codice Fiscale e Partita IVA (qualora differenti devono apparire entrambi)
Numero REA
Numero CCIAA

Per il Cliente
Ragione Sociale
Indirizzo Sede Legale (Via - Comune - CAP - Provincia)
Codice Fiscale e Partita IVA (qualora differenti devono apparire entrambi)
Indirizzo di spedizione Merce (se diverso dall' indirizzo della sede legale)

I dati relativi alle sedi diverse dalla Sede Legale, li metti in anasedi, per non avere la tabella anazie piena di campi nulli.
Ovviamente i dati delle Sedi Legali saranno in anazie.

Per quale motivo non è sufficiente il codice azienda (idazi)?
Se ti riferisci ad ulagg e utagg devono comparire in anacli per eventuali attività di audit. (chi ha fatto cosa?)

Attento, la gestione dei listini non è roba da ridere... ;D
Magari affronteremo il tema in futuro (la moglie si sta lamentando....)
Ciao
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 20 Gennaio 2016, 18:16:02
Come vedi anche io non scherzo coi tempi...
Caro Sotema cari tutti,
so benissimo che voi lavorate e dovete far fronte a onerosi impegni pertanto l'unico che ha il dovere di scusarsi per le lungaggini sono io, voi avete la speciale licenza che vi permette tempi biblici
L'unico inconveniente è che potrei non essere più fra i vivi prima della conclusione di questa discussione.   :'(
Come già detto da te in precedenza stiamo facendo una confusione pazzesca, il fatto è che io ogni tanto tento una fuga in avanti, e come spesso accade le fughe in avanti che vorrebbero servire da chiarimento si trasformano in offuscamento.  ;D
In questa fase dove non sono state ancora raccolte tutte le informazioni voler già creare diagrammi è decisamente prematuro ma io volevo invogliarvi mostrando un anticipo dei prossimi step.
Avevo già accennato alle anagrafiche aziendali e ad alcune perplessità e quindi ho voluto postare delle proposte per avere un vostro parere.
Purtroppo ancora adesso dopo averne parlato con te non ho chiaro se REA debba essere memorizzato solo per la nostra organizzazione o anche per le altre aziende: Clienti, fornitori ecc.  :rolleyes:
Di seguito cerco di ricapitolare le necessità che devono essere soddisfatte dal nostro gestionale riguardo all'archiviazione dei dati relativi alle aziende tutte.
Dato per acquisito che le aziende sono:
L'organizzazione che usa il database e che proporrei di chiamare col nuovo nome di anoraz, i clienti (anacli), i fornitori (anafor), i vettori (anavet) e le banche di appoggio.
Dato che le prime quattro devono memorizzare parecchi dati in comune, avevo pensato di riunire questi dati in un'unica tabella per lasciare alle singole tabelle i dati particolari.
Per un mio errore di valutazione già spiegato avevo creduto che la relazione fra queste tabelle particolari e la tabella comune fosse di 1:1.
Visto che questo non è penso che a questo punto il diagramma Relazione Aziendale 2 non possa più essere usato.
Trovo che ci si debba basare su relazioni uno a molti (1:N) fra le quattro tabelle particolari e la tabella aziende (anazie), se questo confonde si può benissimo variarle il nome in ansedi o anased (per rimanere nei 6 caratteri per le tabelle e i 5 per i campi).
Ecco perché ho proposto i diagrammi dubbiosi , questi ci permettono di assegnare ai clienti da 1 a n sedi, magazzini, laboratori ecc.
Ho provato a spostare la partita iva, ma questo funzionerebbe solo in dubbiosa2 che peraltro ha altri inconvenienti, perché il codice fiscale lo ha anche la tabella del personale e così avremmo potuto sfruttarla per assegnare ad essa le aziende personali.
Scusami se sono in disaccordo sullo schema, ma questa discussione serve proprio per confrontarci, giusto? Allego un nuovo diagramma basato su dubbiosa1 un po meglio spiegato, almeno lo spero.
Insieme al diagramma riposto gli schemi delle tabelle prego tutti voi di valutarle e apportare le vostre proposte di modifica alle tabelle e al diagramma.
Mi  raccomando fatemi sapere i campi che mi sono dimenticato e spiegatemi bene, magari facendo esempi basati sul gestionale da voi usato.
Lo so ho la testa dura in tutti i sensi specialmente in quello del comprendere.

 :ciao: Ciao a tutti.
Gianluigi

Nota: Stiamo parlando della piccola parte del diagramma che riguarda le aziende interessate, per ora limitiamoci a convenire su questo una volta che abbiamo definito questo aspetto gli innesteremo il resto un passo per volta.
Nota2: Se non volete perdere tempo a disegnare gli schemi a me basta uno schizzo a matita fotocopiato e poi ci penso io a metterlo in (diciamo così) bella. Non occorre scrivere tutti i campi bastano quelli interessati al diagramma e allegare le tabelle interessate se da voi aggiornate con nuovi e/o diversi campi.
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: sotema - 21 Gennaio 2016, 14:44:22
Purtroppo ancora adesso dopo averne parlato con te non ho chiaro se REA debba essere memorizzato solo per la nostra organizzazione o anche per le altre aziende: Clienti, fornitori ecc.
Allora facciamo luce...
Numero di iscrizione al Registro Imprese (RI): viene assegnato dalla Camera di Commercio (CCIAA) della provincia in cui risiede la Sede Legale di un' impresa; ogni impresa detiene uno ed un solo numero di Registro Impresa. Si tratta di un numero progressivo preceduto dalla sigla della CCIAA che lo ha rilasciato: TO 125687 - CT 99853168...
Dal 6 dicembre 2000 il numero RI è stato dismesso e sostituito dal Codice Fiscale  (non la Partita Iva) dell'impresa.

Numero di Repertorio Economico ed Amministrativo (REA): viene assegnato dalla Camera di Commercio (CCIAA) della provincia in cui risiede una Unità Locale dell'impresa sia questa un ufficio o un magazino Risulta quindi la seguente organizzazione:

Rubinetto Felice SrL

Sede Legale
Via della Cascata, 16
35121 Padova PD
PI 12865487139
Numero CCIAA PD 5541298
Numero REA 55429783


Filiale di MIlano
Via dei Fontanili, 12
20141 Milano MI
Numero CCIAA PD 5541298
Numero REA 653294


Deposito Merci
Via delle Termofili, 45
35031 Abano Terme Padova
Numero CCIAA PD 5541298
Numero REA 55429783


Deposito Merci
Via Pasterngo, 1
40123 Bologna
Numero CCIAA PD 5541298
Numero REA 882163


Tieni presente che è fatto obbligo di indicare su tutti i documenti fiscali il Numero RI, mentre il Numero REA può essere omesso.
Ai fini del nostro progetto è indispensabile memorizzare il  Numero RI e tutti i Numero REA solo per Rubinetto Felice.
Spero di averti chiarito le idee; nel fine settimana do una occhiata alle nuove relazioni.
Ciao.
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 21 Gennaio 2016, 15:27:10
Ciao Sotema,
ora si che è molto chiaro! Grazie :D
Penso che il diagramma postato da questo punto di vista possa andare bene, solo riguardo all'organizzazione per ogni unità fuori provincia basta come detto memorizzarla come sede di magazzino, sede di laboratorio ecc., intendo dire memorizzarla in anoraz e il gioco è fatto o almeno credo.
Bene attendo le tue valutazioni ma non solo le tue  :)
Grazie ancora  :ciao:
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Berserker79 - 23 Gennaio 2016, 00:34:48
Ciao Gianluigi, finalmente ho potuto dare un'occhiata a quanto hai proposto. Devo riguardarlo meglio, ma ti posso già anticipare che personalmente non condivido la scelta di inserire nella tabella anazie i campi idcli, idfor, ecc.. opterei per inserire nelle tabelle dei clienti e dei fornitori, il campo idazi. Potremmo anche pensare di non mettere direttamente nella tabelle clienti e fornitori il campo dell'azienda, ma gestire questi legami su altre tabelle. Fammi sapere cosa ne pensi.
Mi spiace di non poter partecipare più assiduamente, ma spero a breve di poter contribuire maggiormente.
Ciao.
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 23 Gennaio 2016, 14:51:55
Ciao Berserker79,
non ti preoccupare, anche a me farebbe piacere una tua più assidua partecipazione, ma come ho già avuto modo di dire se uno è impegnato per lavoro tutto sommato, visti i tempi, meglio così.  :D

Qui occorre capirci bene, il rapporto clienti, fornitori, vettori e organizzazione con la tabella di supporto è di uno a molti? Giusto?

Tu e Sotema intendete soltanto rovesciare il concetto? Evitare di avere tanti campi vuoti (se un anazie è cliente, fornitore vettore e organizz. saranno vuoti), è così?
Ho ridisegnato il diagramma vedete se adesso vi soddisfa.
È meno intuitivo ma una volta capito dovrebbe andare bene allo stesso modo, anzi meglio, spero.  :mad:
Si dovrebbero inserire anche gli stati in tutte le tabelle ma prima volevo che definissimo i campi di tutte queste tabelle, ma anche che mi inviaste le voci che ancora mancano, per poi passare ad allargarci alle altre tabelle nel diagramma.

Allegato RelazioniAziendeSeconda.pdf
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: sotema - 23 Gennaio 2016, 21:25:38
Tu e Sotema intendete soltanto rovesciare il concetto? Evitare di avere tanti campi vuoti (se un anazie è cliente, fornitore vettore e organizz. saranno vuoti), è così?
Quello che io, e credo Berseke79, intendo dire è che non serve una chiave primaria nelle tabelle clienti, fornitori e vettori, in quanto hai già la chiave primaria in anazie. Proprio per questo motivo ti accennavo alle tabelle ereditate. Una tabella figlia eredita tutti i campi dalla tabella madre; per cui ne deriva che se la tabella clienti eredita anazie, ne eredita anche la chiave primaria. In soldoni:
la tabella anazie contiene i dati:
Ragione Sociale, Indirizzo, Comune....
la tabella anacli contiiene i dati
Codice Cliente, listino associato, Vettore preferito, modalità pagamento (Ricevuta bancaria, bonifico, contrassegno...) e tutti quei campi che sono peculiari di un cliente.
In questo modo non avrai campi vuoti nella tabella clienti. La relazzione sarà stabilita tramite il campo idazi.
Sono consapevole che nel contenuto spazio di un post è difficile esprimere in modo esaustivo le idee, se mi avanza del tempo domani ti preparo un file con una struttura ridotta di db da caricare sul tuo server, in modo da illustrarti in pratica l'dea.
 :ciao:
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: sotema - 24 Gennaio 2016, 16:55:50
Rileggendo quanto ho scritto ieri sera mi chiedo quanto avesse bevuto prima...
Chiedo perdono a tutti ed in particolare a te Gianluigi per quanto scritto.
Una tabella eredita tutti i campi della tabella genitrice ma NON ne eredita i vincoli e la Chiave Primaria. L'utilizzo più frequente è prorpio quello di evitare duplicazioni di dati creando tabelle senza campi per la maggior parte nulli.
Ti faccio un esempio pratico. Immagina di dover catalogare i prodotti di un laboratorio che venda articoli di terzi e articoli auto prodotti. Potresti usare la seguente struttura.

Prodotti
- Codice
- Descrizione
- Prezzo
...

Terzi (eredita Prodotti)
- Fornitore

l'inserimento dei dati avverrà nel modo seguente:
INSERT INTO prodotti (codice, descrizione, prezzo) VALUES (1, 'Tazza ceramica', 12.3);
INSERT INTO prodotti (codice, descrizione, prezzo) VALUES (2, 'Piatto Fondo', 7.16);

INSERT INTO terzi (codice, descrizione, prezzo, fornitore) VALUES (3, 'Tazza vetro', 2.71,'Vetroglass');

le interrogazioni saranno eseguite:
SELECT * FROM prodotti; per l'elenco di tutti i prodotti

SELECT * FROM ONLY prodotti per l'elenco dei soli articoli auto prodotti.

SELECT * FROM terzi; per l'elenco degli articoli rivenduti ed i loro fornitori.

Fermo restando che entrambe le tabelle devono avere una loro chiave primaria.

Detto questo quello che risulta inutile, penso fosse quello che intendeva anche Berseker7, sono le relazioni idcli, idfor, idvet nella tabella anazie poichè esiste già la relazione idazi. Nel caso specifico delle tabelle ereditate anche la relazione idazie è superflua, se non dannosa.
Come sempre si tratta di decidere quale sia la strada migliore da seguire.
 :ciao:
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Berserker79 - 25 Gennaio 2016, 08:02:08
Ciao Gianluigi, che ne pensi di ritornare alla progettazione classica del database, lasciando stare le tabelle ereditate?
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 25 Gennaio 2016, 11:27:57
Ciao Sotema,
in questa fase che prevederebbe la sola raccolta di tutte le voci per poter estrarre tutte le caratteristiche da riunire in tabelle sotto i soggetti individuati, parlare di tabelle ereditate, che oltre a tutto sei l'unico a conoscere, è prematuro. Lo so sono stato io a fare una fuga in avanti ma voleva essere di stimolo all'invio delle voci, volevo farvi capire che senza le voci non si può proseguire la progettazione ma nel contempo anche sollecitare un parere.
Io penso che almeno da questo punto di vista tu possa accettare di seguire una “normale” progettazione rivolta ai database relazionali, saremo sempre in tempo a innestare successivamente, laddove utile, l'eredità.
Non lo so, ma non penso che l'eredità sconvolga completamente la progettazione, penso che la coadiuvi e la integri.
Più volte vi ho chiesto di rimanere nel binario della progettazione, di seguirne il tracciato.
Non vedo altro modo per poter agire sensatamente.
Il metodo Hernandez non è altro che un sistema elementare di progettare il database relazionale nei canoni indicati dal suo inventore (Codd), come già detto l'unico che io sia in grado di seguire.
Una volta che noi avremo individuato tutte le tabelle e tutti i campi con tutte le relazioni corrette e funzionanti, con tutti i campi del corretto tipo e delle giuste dimensioni, con le regole di business soddisfatte, a quel punto potremo entrare nel discorso di come metterlo in pratica con PostgreSQL e Gambas.

Ciao Berserker79,
l'ultimo pdf allegato credeva di venire incontro alle tue richieste e non contiene nessuna tabella ereditata, vorrebbe essere un normale diagramma di relazioni fra tabelle, limitatamente alle anagrafiche aziendali.

Siate gentili, se avete delle idee diverse dalle mie su come deve essere costruito il database perché io non sono stato capace di creare un buon schema, basta schizzarlo a matita su un foglio, scannerizzarlo e allegarlo, come detto non serve che scriviate tutti i campi bastano quelli utili allo schema e allegare gli elenchi laddove siano variati rispetto agli ultimi inviati.
Lo so magari siete abituati a disegnare diagrammi ER ma questo è molto più semplice ed intuitivo e non serve alcuna preparazione e conoscenza, io non do alcun valore a come è disegnata la tabella serve solo a contenere i campi contano solo le linee di relazione che uniscono campi di diverse tabelle e il lato uno o quello molti.
Più avanti quando affineremo il discorso potremmo anche decidere di rappresentare le tabelle in modo diverso a secondo del tipo

 :ciao: Ciao a tutti

PS. Caro Sotema ogni tanto una bella bevuta è proprio quello che ci vuole, forse non farà tanto bene ai database ma non ci giurerei  ;D
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Berserker79 - 25 Gennaio 2016, 19:19:42
Ciao Gianluigi,
dovresti rivedere la relazione fra anazie e ansedi, secondo me va tolta dalla tabella anazie il campo idsed, mentre va inserito nella tabella ansedi il campo idazi.
Come dice Sotema, su ansedi vanno inserite tutte le sedi dell'azienda diverse da quella legale, che va indicata nella tabella anazie.

Ma la tabella ansedi, dovrebbe contenere i dati delle sedi extra dei nostri clienti/fornitori o della nostra azienda?
Se è stata pensata per i nostri clienti/fornitori, credo che si possa evitare utilizzando solo le due tabelle principali clienti e fornitori.
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 25 Gennaio 2016, 19:57:13
Ciao Gianluigi,
dovresti rivedere la relazione fra anazie e ansedi, secondo me va tolta dalla tabella anazie il campo idsed, mentre va inserito nella tabella ansedi il campo idazi.
Come dice Sotema, su ansedi vanno inserite tutte le sedi dell'azienda diverse da quella legale, che va indicata nella tabella anazie.

Ma la tabella ansedi, dovrebbe contenere i dati delle sedi extra dei nostri clienti/fornitori o della nostra azienda?
Se è stata pensata per i nostri clienti/fornitori, credo che si possa evitare utilizzando solo le due tabelle principali clienti e fornitori.

Ciao Berserker79,
non fare confusione, dovresti essere in possesso della cartella Relazioni aziende 20-01, la tabella ansedi altro non è che una tabella di convalida o come cavolo si chiamano quelle tabelle che distinguono il tipo di record, in questo caso per sapere se la sede è un ufficio, un magazzino, un laboratorio.
Occorre che leggiate i file allegati ai diagrammi che descrivono le tabelle e il loro contenuto e che dovreste avere la cortesia di ampliare completandole.
Altrimenti vanificate i miei sforzi e non riusciamo a chiarirci.
Se poi la parola ansedi vi è indigesta cambiamo pure nome alla tabella anche a tutte io non ne faccio un problema.
La sede centrale è nella tabella particolare anacli, anafor ecc. il rapporto fra questa e anazie è un rapporto di uno a molti e serve per non avere limiti nel memorizzarne i dati (uffici esterni, magazzini ecc.).
Ho invertito la relazione su tua richiesta e in effetti ora non avremo 3 campi di chiavi esterne vuoti per ogni azienda.
Con questo schema se non mi sbaglio clamorosamente dovremmo poter memorizzare tutto quello che ci serve, naturalmente mancheranno senz'altro delle voci di campo, ma se fate i bravi e me le indicate...
 :ciao:
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Berserker79 - 28 Gennaio 2016, 21:07:32

Se lo scopo della tabella anasedi è catalogare le varie sedi (siano esse magazzini o no) delle aziende contenute in anazie, allora dovrai registrarvi i dati fiscali di ciascuna sede;  se poi la sede di cui parliamo è un filiale di Rubinetto Felice il Numero REA, che sarà differente da quello della sede centrale qualora la sede sia residente in una provincia diversa, deve necessariamente essere registrato poiché deve comparire nei documenti fiscali emessi dalla filiale. Per chiarire il concetto :

Spedizione a Sede o Magazzino  di un cliente
Sui documenti fiscali dovranno apparire:
Per Rubinetto Felice
Ragione Sociale
Indirizzo Sede Legale (Via - Comune - CAP - Provincia)
Codice Fiscale e Partita IVA (qualora differenti devono apparire entrambi)
Numero REA
Numero CCIAA

Per il Cliente
Ragione Sociale
Indirizzo Sede Legale (Via - Comune - CAP - Provincia)
Codice Fiscale e Partita IVA (qualora differenti devono apparire entrambi)
Indirizzo di spedizione Merce (se diverso dall' indirizzo della sede legale)

I dati relativi alle sedi diverse dalla Sede Legale, li metti in anasedi, per non avere la tabella anazie piena di campi nulli.
Ovviamente i dati delle Sedi Legali saranno in anazie.


Ciao Gianluigi, secondo quanto ha indicato Sotema, avevo capito che la tabella ansedi avrebbe contenuto gli indirizzi di tutte le varie sedi di un'azienda, diverse  da quella legale.
Per questo ti avevo indicato di cambiare il tipo di relazione.
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 28 Gennaio 2016, 23:13:59
 :ciao: Carissimo Berserker79,  :-*
hai ragione, ma io poi ho risposto a Sotema dicendogli che reputavo superato il diagramma a cui lui si riferiva in quanto basato su di un presupposto errato.
Penso che tutto sia nato perché avevo sbagliato la tabella ansedi derivata da anamag.
Avete tutti equivocato sul suo significato. Per me avete anche equivocato sulla tabella anazie.
Poi tu dicendomi di togliere i codici clienti, fornitori ecc. dalla tabella anazie, essendo ormai non più molto sveglio ho creduto di intravedere un escamotage nell'inversione della relazione.
Devo aver bevuto la stessa bevanda di Sotema.  ;D Sarà il caso di cambiare fornitore.  :bad:
Io poi per sovrappiù avevo anche fatto colazione con pane e volpe.  :-[

Attenzione battaglione, fra le miriadi di diagrammi da me fatti a vanvera forse l'unico che aveva una certa valenza è quello con le relazioni uno lato clienti, fornitori, vettori, organizzazione e i famigerati codici in anazie lato molti.
Lo riallego tanto per non confonderci (o per confonderci di più?).
Se non erro clamorosamente e se ho capito cosa mi ha detto Sotema Numero REA e Numero CCIAA servono solo per l'organizzazione (Rubinetto Felice) perché vanno sui documenti ufficiali.
Cambiano ogni volta che la sede periferica che può emettere documenti si trova fuori dalla provincia della sede.
Se, come io credo usi fare normalmente, l'organizzazione ogni volta che registra sul database una sede secondaria autonoma crea un nuovo record nella tabella principale (anoraz) ecco che non ci sarebbero problemi a usare l'ultimo schema da me proposto.

Le sedi, principali o secondarie che siano vengono registrate nelle tabelle anoraz per l'organizzazione, ma volendo anche per i clienti (anacli) i fornitori (anafor) e vettori (anavet).
La tabella generale anazie ha il compito di registrare i dati comuni anche a qualunque altro tipo di sede (di quale tipo si tratti sarà memorizzato con il supporto di ansedi).
I dati particolari delle sedi in anoraz, anacli, anavet, anafor. I dati comuni più gli indirizzi dei magazzini, laboratori ecc. in anazie.
Credo che quello che confonde sia il fatto che le tabelle principali mancano dei campi ragione sociale, indirizzo ecc.

Esempio pratico, devo registrare un nuovo cliente che ha la sede a Bergamo e il magazzino centrale  sempre a Bergamo ma in una via limitrofa a quella della sede (stesso palazzo) e in questo momento sta lavorando in più cantieri sparsi per l'Italia.
La maschera registrerà il codice in anacli insieme al tipo di cliente e agli eventuali altri dati utili e particolari propri dei clienti (se avrete la compiacenza di farmi sapere  :P ), l'indirizzo completo finirà nella tabella anazie col suo codice particolare e univoco collegato ad anacli con idcli e attraverso idsed sapremo che quello lì è l'indirizzo della sede centrale, poi la maschera registrerà gli altri indirizzi completi del magazzino e dei cantieri con lo stesso sistema.
Ogni registrazione avrà il collegamento con impiegati e addetti, telefoni e fax particolari, banche, valute.
Cosa ne dici, dite? Dovrebbe funzionare.

Se hai, avete, tempo di controllare le tabelle clienti, fornitori ecc. e dirmi quali campi mancano e/o sono errati...
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Berserker79 - 30 Gennaio 2016, 17:28:40
Ciao Gianluigi, veramente io preferivo lo schema "Relazioni Aziende 2".
Lo schema "RelazioniAziende(20-01)" proprio non mi convince.

Ti espongo qualche idea e poi decidi cosa ti può andare bene e cosa no.

1) la tabella anazie per me dovrebbe contenere solo i dati fiscali di un nostro cliente/fornitore/nostra azienda da utilizzare per l'emissione dei documenti fiscali e per la contabilità. Il tipo di rapporto è di tipo uno (azienda) a molti (clienti,fornitori,vettori).

2) la tabella anacli conterrà i dati specifici del cliente, come indirizzo di consegna (principale), tipologia di cliente, tipo di listino ecc.

3) se il cliente ha diversi punti di consegna, potremmo inserire nella tbl anacli, un campo che indica se è "multiconsegna" (passami il termine) ed inserire nella tabella ansedi tutte le varie sedi secondarie. ad ogni sede, si potrebbe anche abbinare uno specifico vettore.

Questi sono i punti principali che vorrei che fissassimo per poter proseguire.
Ciao.
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: sotema - 30 Gennaio 2016, 19:33:41
Ciao Gianluigi,
spiacente, ma concordo con Berseker79; da come hai disegnato le relazioni in  "RelazioniAziende(20-01)", sembrerebbe che un potenziale cliente possa avere più ragioni sociali, cosa praticamente impossibile. Mentre è possibile che un Cliente abbia diverse sedi. Ne consegue che la relazione deve essere, come detto da Berseker79, uno (anazie) a molti (anacli, anafor, anavet).

Io mi spingerei anche oltre inserendo nella tabella anazie i soli dati fiscali del cliente, rasaz, cofaz, pivaz e webaz, malaz (di solito tutte le aziende hanno una mail generica del tipo info@nomeazienda.dominio); nella tabella anacli inserirei i campi codcli (codice cliente), idazie per la relazione con anazie e il campo idsed come relazione alla tabella ansedi, il campo per identificare il listino associato (idlist?). La tabella ansedi conterrà i campi della sede: indirizzo, comune, cap, provincia, nazione, telefono, fax... ed un campo boolean, impostato a true se si tratta della sede legale. La tabella anaper, tramite i campo idsed e idazie farà il collegamento tra le persone, la sede e l'azienda.
Identico ragionamento per i fornitori.
 :ciao:
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 30 Gennaio 2016, 20:43:14
Sembrerebbe la fiera degli equivoci, io ho inserito nella tabella di supporto anazie la ragione sociale perché avevo capito che i magazzini, i negozi, i cantieri ne avessero una propria anche se dipendenti da un'unica sede. Se così non è basta togliere tutti i campi che non servono alla tabella di supporto e spostarli nella tabella delle sedi (anacli per i clienti) quelle col lato uno della correlazione.
Mi riferisco all'ultimo diagramma RelazioniAziende(20-01).

A cosa servono tre tabelle se sono sufficienti due?

Siete certi che le vostre idee sulle relazioni siano corrette?  :P

 :ciao:  :ciao:
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: sotema - 30 Gennaio 2016, 22:15:29
Una impresa detiene una ed una sola Ragione Sociale. Indipendentemente dal numero di Sedi, il termine corretto è Unità Locali, che verranno utilizzate per l'esercizio dello Scopo Sociale. La Ragione Sociale viene depositata presso la Camera di Commercio (CCIAA) della provincia dove risiede la Sede Legale; la sede legale può essere una Unità Locale dell'impresa ma anche uno Studio Legale, Studio Commercialista, residenza del Titolare o del Rappresentante Legale.  All'atto della registrazione dell'impresa viene assegnato un Numero di Partita Iva ed un Codice Fiscale (nel caso di Società di Persone o Società di Capitali spesso PIVA e CF coincidono). Ogni Sede viene poi identificata con un proprio Numero di Repertorio Amministrativo (il famoso REA).

Tre tabelle servono per tenere separati i Clienti dai Fornitori e per evitare campi nella tabella anazie, che sarebbero molto spesso impostati a NULL.  Immagina un SELECT * FROM anacli WHERE prvcli = 'RM' che ti riportasse anche i fornitori. Inoltre ti semplifica la gestione deglimordini dei clienti, la gestione dei preventivi e la gestione delle commesse.


Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 30 Gennaio 2016, 22:40:24
SELECT *
FROM anazie
WHERE proaz = "RM" AND "nuovo campo utile a sapere che si tratta di un cliente messo automaticamente dal programma e che mi ero scordato" = "cliente"

OK hai ragione è uno schifo e qui si dimostra che Hernandez a ragione quando dice “niente dati mischiati ma ben separati” ma allora potremmo sfruttare l'eredità facciamo una tabella sedgen e la facciamo ereditare alle quattro tabelle e lasciamo lo schema come da me fatto senza i campi inutili.
Non serve una terza tabella ansedi  :P

 :ciao:

PS: sedgen la faccio solo perché sono pigro e mi voglio risparmiare la scrittura quadrupla  :P

PS2: Scusate ma sono fuso (oggi giornata campale lato lavoro) vado a nanna, buonanotte a tutti  :sleepy:
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: sotema - 30 Gennaio 2016, 23:23:20
Buonanotte.
Per quando ti svegli ho preparato un semplice schema per illustrarti il mio punto di vista. Perdona se non ho utilizzato i nomi tabella/campi concordati, ma l'ho preparato al volo.
La tabella Clienti eredita la tabella Aziende e tramite la tabella sedi crea una relazione molti-a-molti con la tabella persone.
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 31 Gennaio 2016, 16:42:39
Buongiorno.
Caro Sotema,
ieri hai approfittato spudoratamente della mia stanchezza, della mia non più elastica mente e della molta ruggine su quel poco che sapevo di SQL. Mi spieghi come pretendi di interrogare una sola tabella se i dati completi ce l'hai su due?   :evil:

Lo schema da me allegato (RelazioniAziende(20-01)) funziona benissimo così come l'avevo postato e lo puoi interrogare come ti pare.  :P

A seguire alcuni esempi che non ho provato su PostgreSQL:
Codice: [Seleziona]
SELECT *
FROM anazie, anacli
WHERE anazie.idcli = anacli.idcli
AND anazie.proaz = 'RM'

Oppure:
Codice: [Seleziona]
SELECT *
FROM anazie
INNER JOIN anacli
ON anazie.idcli = anacli.idcli
WHERE anazie.proaz = 'RM'

Se ti basta quello che c'è in anazie:
Codice: [Seleziona]
SELECT *
FROM anazie
WHERE anazie.proaz = 'RM'
AND idcli IS NOT NULL

Se desideri solo alcune informazioni:
Codice: [Seleziona]
SELECT rasaz, indaz,telaz
FROM anazie
INNER JOIN anacli
ON anazie.idcli = anacli.idcli
WHERE anazie.proaz = 'RM'

Se desideri avere il telefono dei contatti dei clienti di Roma:
Codice: [Seleziona]
SELECT anazie.rasaz,anazie. indaz, anaper.cogpe, anaper.telpe
FROM (anazie
INNER JOIN anacli
ON anazie.idcli = anacli.idcli)
INNER JOIN anaper
ON anaper.idazi= anazie.idazi
WHERE anazie.proaz = 'RM'

Oppure:
Codice: [Seleziona]
SELECT anazie.rasaz,anazie. indaz, anaper.cogpe, anaper.telpe
FROM anazie, anaper, anacli
WHERE anazie.idcli = anacli.idcli
AND anazie.idazi = anaper.idazi
AND anazie.proaz = 'RM'

Non saranno il massimo della raffinatezza ma dimostrano la robustezza del progetto.  8)

Ho scaricato il tuo esempio, sono molto lento nell'uso di PostgreSQL ma giuro che con calma me lo studio, così a prima vista direi che è molto simile al mio con cambio di nomi.
Non conosco l'eredità ma vedo che tu fai ereditare campi di una tabella che vanno ad aggiungersi ad un'altra (figlia) come mi pareva logico che fosse e devo lamentare che tu non hai mai risposto alle mie domande in merito. Anzi all'inizio mi avevi addirittura fuorviato  >:(

Appena riesco ad interrogare il tuo database oppure appena non riesco a nulla ti faccio sapere.  :P

 :D  :ciao:

PS. Scusa mi era rimasto l'ultimo And fuori dal codice
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 01 Febbraio 2016, 11:26:07
Ciao Sotema,
sono bloccato, ho trovato un'incongruenza fra la tabella clienti e la tabella sedi.
La tabella sedi ha come chiave primaria idsede come può essere anche chiave esterna lato molti per la tabella clienti?  :rolleyes:

 :ciao:
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: sotema - 01 Febbraio 2016, 17:06:03
Ciao Sotema,
sono bloccato, ho trovato un'incongruenza fra la tabella clienti e la tabella sedi.
La tabella sedi ha come chiave primaria idsede come può essere anche chiave esterna lato molti per la tabella clienti?  :rolleyes:

 :ciao:
Dove sta il problema?
La chiave esterna per la tabella clienti è un vincolo referenziale; ti vieta di assegnare per un Cliente una Sede che non esiste nella tabella Sedi. Se poi volessi cancellare un Cliente (cosa per altro da evitare quasi sempre) ti permette di cancellarne in automatico (ON DELETE CASCADE) anche tutte le sedi corrispondenti.
 :ciao:
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 01 Febbraio 2016, 17:50:00
Ciao Sotema,
sono bloccato, ho trovato un'incongruenza fra la tabella clienti e la tabella sedi.
La tabella sedi ha come chiave primaria idsede come può essere anche chiave esterna lato molti per la tabella clienti?  :rolleyes:

 :ciao:
Dove sta il problema?
La chiave esterna per la tabella clienti è un vincolo referenziale; ti vieta di assegnare per un Cliente una Sede che non esiste nella tabella Sedi. Se poi volessi cancellare un Cliente (cosa per altro da evitare quasi sempre) ti permette di cancellarne in automatico (ON DELETE CASCADE) anche tutte le sedi corrispondenti.
 :ciao:

Forse non mi sono spiegato:
Come fa una la chiave primaria della tabella sedi (idsede) a essere unica e univoca in quanto appunto chiave primaria ed essere al contempo ripetuta come è una chiave esterna lato molti (idsede clienti ha il lato uno in clienti e il lato molti in sedi).
È un controsenso.

 :ciao:
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 02 Febbraio 2016, 21:19:37
Ciao ragazzi.
Visto che si stenta a comprenderci appieno, quasi sicuramente perché ognuno di noi è fedele alle proprie conoscenze (come potrebbe essere altrimenti?) e anche involontariamente tende a non immedesimarsi nei ragionamenti altrui, provo a inviarvi i comandi psql per creare un database PostgreSQL di prova (test_felix) sulla base del mio diagramma in modo che possiate provarlo e magari comprendere le mie elucubrazioni.
Potrebbe darsi che così siate più disposti a discutere nel merito di quale cosa e del perché secondo voi non andrebbe bene.
Infatti, malgrado ne stiamo parlando da diversi post, io francamente non ho ancora capito cosa nella sua struttura non funzioni, a parte il cambiamento di nome ad alcune voci di campo da me poco azzeccate e lo spostamento di alcune da anazie alle tabelle specifiche tipo la partita iva.

Siate gentili date un'occhiata provatelo e poi ditemi cosa non vi convince, ma per favore prima cercate di capire cosa era mia intenzione fare.

Per ora come prova ho messo tutti gli id (i codici) a serial poi nel database vero vedremo come fare ad esempio la tabella ansedi dovrebbe riportare un codice di tipo carattere che dia l'idea di cosa rappresenta es. seamm o sedam per sede amministrativa.
Vorrei far notare che con questo semplice schema ad esempio si possono registrare  per ogni cliente tutti i punti di consegna che vogliamo; da zero a infinito idem per gli addetti le banche...
A cosa servirebbe un campo multi-consegna, quando la maschera clienti caricherà il particolare record automaticamente leggerà se vi sono più punti consegna ecc., basta una semplice interrogazione e poi decidere come organizzare la maschera.
La tabella ansedi come detto contiene il tipo di sede, tanto per prova si può fare 1 = Sede, 2 = Magazzino ecc.
NOTA: Ho dato per scontato che abbiate creato l'utente test come da istruzioni di Sotema, altrimenti dovete cambiare il primo comando mettendo al posto di test il vostro utente creato.
                       Alcune tabelle tipo banca sono solo accennate, altre mancano tipvet, stati, mansio,valute e incomplete di utagg ulagg. Ma nessuno vi vieta di completarle  :P
 :ciao:
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Berserker79 - 03 Febbraio 2016, 20:31:56
Vorrei far notare che con questo semplice schema ad esempio si possono registrare  per ogni cliente tutti i punti di consegna che vogliamo;
I punti di consegna dove vanno inseriti? Su una delle tabelle di cui abbiamo discusso o su una ancora da progettare?

Propongo di abolire i valori null e di usare lo 0 per i numerici e il blank per le stringhe.
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 03 Febbraio 2016, 21:48:36
Ciao, Berserker79,
anazie è la tabella di supporto che raccoglie tutte le utenze aziendali che saranno qualificate attraverso il tipo memorizzato in ansedi.
Supponiamo tu abbia necessità di registrare il cliente Bianchi Srl via Del Mare 1 00118 Roma RM ITALY IT C.F. tal dei tali P.I. talaltra Telefono 06ecc. Fax idem mail quella@chevuoi sito web wwwtttppp con sede legale presso lo studio del Notaio Rossi via Fori Imperiali,12 ecc., con magazzino di ricevimento merce in via Dei Monti, 25 ecc. con punto vendita in Via Della Campagna 25R ecc.
Quando creeremo l'applicazione la maschera registrerà il cliente numero 1 nella tabella anacli, e scriverà nella tabella anazie con idazi 1 e idcli 1 e idsed a (quello che decideremo per indicare la sede amministrativa) Bianchi Srl ecc. con idazi 2 e idacli (sempre) 1 e idsed a (quello che decideremo per indicare la sede legale) Notaio Rossi ecc. con idazi 3 e idacli (sempre) 1 e idsed a (quello che decideremo per indicare il magazzino di consegna) Bianchi Srl via Dei Monti... Infine registrerà con idazi 4 e idacli (sempre) 1 e idsed a (quello che decideremo per indicare il punto vendita) Bianchi Srl via Della Campagna 25.....
Come ho detto, nell'allegato ho messo tutte le ID a integer automatico quindi per le prove ti devi accontentare di un numero progressivo.

Non sono d'accordo di abolire il NULL la cosa va ponderata e non può essere generica in quanto per certi dati è persino utile, l'interrogazione su anazie ne è la dimostrazione.
Spesso il fatto che ci siano dei null è sinonimo di errore nella progettazione, quindi come detto occorre che sia ponderato vale a dire solo dove ci sono dei numeri che vanno calcolati e solo se è normale che  manchino i dati in quel campo.
 :ciao:
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Berserker79 - 04 Febbraio 2016, 08:18:39
Ciao Gianluigi, mi trovo in disaccordo su tutto.
Quando hai aperto questa discussione, parlavi di voler realizzare un db solido, seguendo tutte le regole per creare un corretto db relazionale, invece progetti una tabella (anazie) dove ci butti dentro clienti, fornitori, vettori, ecc. Poi per ognuno di essi, sempre su anazie, ci butti dentro sede legale, sede amministrativa, sede del magazzino, sede del punto vendita e chi più ne ha più ne metta.
Insomma una tabella, che per me, è un pandemonio. Poi proprio non riesco a concepire una tabella che contiene records che hanno un significato a seconda di quale colonna è valorizzata (idcli, idfor, ecc..).
Stesso discorso per i valori null, da come ne parli tu, sembra che ti servano come strumento di debug o come valore per filtrare i record. Per me il db non deve accettare valori null, se c'è un errore di progettazione, il db non inserirà il record e restituirà l'errore.
Poi mi chiedo una cosa, ma registrare tutti questi dati di un cliente (sede legale, sede amministrativa, magazzino1, magazzino2, punto vendita1, punto vendita2, ecc..) è necessario? La rubinetto felice per poter fatturare la merce, credo abbia bisogno solo dei dati fiscali e degli indirizzi di spedizione della merce. Invece sembra che i clienti, vengano gestiti come se fossero la nostra azienda, per la quale dobbiamo tenere tutte le informazioni possibili.
Detto questo, essendo tu il capo del progetto, mi adeguero a quanto da te realizzato dandoti dove posso il mio contributo, ma ci tenevo a farti sapere la mia opinione.
Ciao.
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 04 Febbraio 2016, 14:00:52
Ciao Berserker79,
intanto vorrei precisare che questa è una proposta oltre a tutto è prematura perché, come già detto più volte, non siamo ancora in possesso dei dati basilari per poter creare le relazioni (tabelle).
Prima occorre che voi mandiate tutte le voci che vanno trattate dal nostro database.
Le proposte si fanno per essere discusse, per valutarne i pro e i contro vi chiedo solo di ponderarle in tutti gli aspetti e, come giustamente hai fatto, dare un parere.
Quelli che sanno quali dati occorre avere registrati circa i clienti, i fornitori, i vettori e l'organizzazione siete voi.
Io vi ho mandato a tal scopo dei modelli ott con possibilità di note proprio perché completaste commentandole le voci già da me estrapolate dai documenti inviati da Tornu.

So benissimo di aver proposto diciamo così un progetto azzardato, uno degli assiomi dei database relazionali è appunto quello di ben separare ogni cosa per poi ricollegarla con correlazioni.
Io comunque ho proposto questo schema abbozzato ed estremizzato (tutto nella anazie) per far capire il concetto.
Non è che così progettato anazie sia un guazzabuglio dove finisce tutto mischiato, noi abbiamo le tabelle dei soggetti ben separate fra loro, anazie è solo la tabella che le supporta, se decideremo di adottare questo schema dovremo anche decidere quali dati sono in essa superflui e vanno spostati nelle tabelle soggetto.
Se poi in punta di diritto filosofico vogliamo guardare ad anazie sul lato relazionale noi in effetti dovremmo convenire che essa contiene solo ed esclusivamente indirizzi.
Mi stupisce poi che proprio tu dica questo di una tabella che comunque è ben suddivisa in campi mono dato con record solidamente collegati alle tabelle “madri”, non sei tu colui che ha parlato di grandi tabelle suddivise in “mini tabelle” con campi pluridato che gestiscono tutta l'attività del database professionale su cui lavori?
Comunque sia, ripeto, occorre ben ponderare i pro e i contro, una struttura così concepita per me renderebbe più agevole trattare i dati delle aziende tutte e non dimentichiamoci del personale.
Tenete conto che se separiamo tutto tutto poi comunque dovremmo appoggiarci a delle viste che più o meno lavorerebbero sugli stessi concetti.

Citazione
...proprio non riesco a concepire una tabella che contiene records che hanno un significato a seconda di quale colonna è valorizzata (idcli, idfor, ecc..)...
Scusa ma che modo è di descrivere le foreign key? Quello li è il metodo più solido e sicuro di legare dati fra due tabelle, non esiste metodo più certo, puoi stare tranquillo al 100% che quanto è scritto il quella tupla è parte integrante dei record della tabella “madre”.

Su NULL mi devo essere spiegato male, sono d'accordo nel cambiarlo con dati più esplicativi che oltre a tutto evitino il grande problema che quando un amministratore di database vede il campo vuoto entra subito in paranoia. Ad esempio se abbiamo il classico campo che prevede il colore dei capelli e uno è calvo mi sta bene si cambi NULL con l'acronimo di “non applicabile”.
Quello che non vorrei è il cambio indiscriminato e mi sono permesso di fare un esempio solo per farmi capire. Il campo NULL è previsto dallo standard SQL e vi sono comandi ad hoc per trattarlo.
Quando il progetto sarà terminato forse non ne sopravviverà nessuno.
 :ciao:
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Berserker79 - 04 Febbraio 2016, 20:03:55
Mi stupisce poi che proprio tu dica questo di una tabella che comunque è ben suddivisa in campi mono dato con record solidamente collegati alle tabelle “madri”, non sei tu colui che ha parlato di grandi tabelle suddivise in “mini tabelle” con campi pluridato che gestiscono tutta l'attività del database professionale su cui lavori?
Ciao Gianluigi, la tabella contenente le mini tabelle, di cui ti avevo parlato, serve solo per gestire tutte quelle entità che si possono esprimere con pochissimi campi, ad esempio il campo codice e il campo descrizione. Tutte le altre entità, che possiedono molti campi, sono gestite tramite "classiche" tabelle dedicate.
L'anagrafica dei Destinatari è gestita da una sua tabella specifica, mentre lo stato del destinatario (1=ATTIVO, 2=SOSPESO, 3=ANNULLATO, ecc) viene gestito da quell'unica tabellona.


Citazione
...proprio non riesco a concepire una tabella che contiene records che hanno un significato a seconda di quale colonna è valorizzata (idcli, idfor, ecc..)...
Scusa ma che modo è di descrivere le foreign key? Quello li è il metodo più solido e sicuro di legare dati fra due tabelle, non esiste metodo più certo, puoi stare tranquillo al 100% che quanto è scritto il quella tupla è parte integrante dei record della tabella “madre”.


Vediamo se riesco a spiegarmi,
i record contenuti nella tabella anazie, hanno un significato non per il valore associato ad ogni campo che la compone, ma più che altro da quale campo è valorizzato piuttosto che un altro.
Questo perché i due campi idcli e idfor sono in conflitto fra loro, la presenza di uno esclude la presenza dell'altro.
Se domani nasce la necessità di gestire una nuova entità che non è un cliente o un fornitore, cosa facciamo, modifichiamo la tabella e aggiungiamo una nuova colonna?
Se vogliamo gestire su anazie tutte le sedi (legale, amministrativa, punto vendita, magazzino, ecc.), almeno separiamo quella dei fornitori dai clienti con due tabelle distinte, anaziecli e anaziefor.
Poi se fosse per me farei delle tabelle distinte dove mettere le sedi legali e amministrative e un'altra dove inserire le sedi per la consegna della merce.
Ciao.
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 04 Febbraio 2016, 21:48:24
Ciao Berserker79,
tu e gli altri dovete essere gentili e sforzarvi fra tutti di chiarire quali dati occorre gestire e per quale entità occorre gestirli.
Perché altrimenti non ci chiariremo mai.
Se volete domani ve lo scrivo in prosa, io non so quali dati occorra gestire, quando ti ho scritto di sedi, magazzini, negozi era per far capire che così disegnato, passatemi i termini, il database era in grado di incamerare più occorrenze per la stessa entità.
Io ho messo tutti i dati che per ora conosco in anazie perché non ho ancora capito dove va cosa.
Quindi è inutile perderci nei particolari. Proporrei di sospendere la prematurissima discussione sulle aziende e concentrarci sui dati.
Se volete essere cortesi compilate per benino gli ott con una descrizioni ove la riteniate utile.
Una volta che avremo chiaro questo sarà anche più semplice capirci e non perderò più tempo in inutili diagrammi.

Solo un chiarimento, come già ho avuto modo di dire riguardo alla matematica avanzata, anche per la teoria degli insiemi e la logica predicato di ordine primo se mi dicessero “le devi capire per poter progettare un database” scapperei ululando, ma poi occorre che ci ricordiamo che dietro le astrazioni in forma di tabelle c'è questa roba e nessuno di noi credo possa essere certo di sapere come è meglio muoversi. Lo possiamo supporre ma di certezze non ce ne sono, l'unica certezza è che se funziona allora dovrebbe andar bene.

@Sotema
ho difficoltà a capire il tuo schema occorre che tu mi dia qualche spiegazione in più.
Circa le tabelle ereditate io quello che ho capito è che la tabella figlia eredita ma non vede il padre mentre il padre vede la figlia. Ma in cosa questo possa tradursi nel concreto non mi appare chiaro, riguardo ad esempio alle aziende, potrebbe andare incontro a ciò che chiede Berserker79?

 :ciao:  :ciao:
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 06 Febbraio 2016, 18:36:12
Le relazioni nella teoria degli insiemi e nella logica predicato di ordine primo secondo l'idraulico che mi ha aggiustato la perdita del lavabo:

Secondo lui non sono concetti particolarmente difficili (sig), in effetti se fosse vera la sua semplificazione allora potrei aver ragione nell'avere proposto lo schema RelazioniAziende(20-01).

Secondo la teoria dell'idraulico occorre pensare alle chiavi sia primarie che esterne come a delle valvole idrauliche, esse si attivano  solo se vengono collegate fra loro da una speciale manichetta.
Gli agganci sono in base alla chiave o meglio alla valvola primaria, pertanto diviene impossibile collegare una manichetta alla chiave sbagliata.

Secondo lui si può verificare facilmente facendo una prova empirica.
Data una valvola primaria su un contenitore A e la valvola esterna sul contenitore B provare a riempire il contenitore B collegando una manichetta alla valvola esterna.
La manovra risulterà impossibile.
Solo collegando il contenitore A con la manichetta fornita degli agganci adatti alla valvola primaria si attiverà la possibilità di collegare la manichetta alla valvola esterna e riempire il contenitore B.

In effetti se volete provare ho allegato un disegno dimostrativo ma anche un file testo con i comandi SQL che dimostrerebbero la teoria dell'idraulico.

Ho anche messo i comandi per creare una tabella che secondo me si adatta di più alle descrizioni date da Berserker79 della tabella anazie.

Nello scrivere il file di testo mi sono accorto che l'altra volta ho dimenticato il passaggio:
Codice: [Seleziona]
\c test_felix
prima di creare le tabelle, spero vi siate ricordati seguendo la precisa guida di Sotema, nel caso abbiate creato per errore delle tabelle nel vostro template niente panico col comando DROP potete cancellarle.
Citazione
DROP TABLE [ IF EXISTS ] nome [, ...] [ CASCADE | RESTRICT ]
Dovete cancellare per prima anaper, poi banche quidi anazie  e anavet almeno credo da qui in poi finiscono i vincoli.
Per controllare se in template avete delle tabelle create per colpa mia basta da li dare il comando \d

Per cancellare i database di prova usate sempre il comando DROP.

Citazione
DROP DATABASE [ IF EXISTS ] nome


Ricapitolando, Berserker79 hai ragione quando sostieni che le relazioni (tabelle) si chiamano così appunto perché se guardo il record di una tabella es. fornitori so che sto guardando i dati di un fornitore e qui non ci piove.
Il fatto è che tu guardi ad anazie (per l'amor di Dio cambiamogli nome) come se fosse la tabella padre, ma la tabella padre è appunto anafor (fornitori) e anazie è solo la tabella di supporto e l'ho chiamata aziende genericamente perché tu guardi i dati parziali di un azienda e non dei fornitori.
La tabella di test_felix_drop2 quella si che è il caos a cui ti riferisci, ma non è la stessa cosa di anazie.

 :ciao:
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 08 Febbraio 2016, 18:09:57
Ciao Sotema,
puoi controllare se così può andare e darmi una dritta per il riempimento e le interrogazioni?

 :ciao:
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 10 Febbraio 2016, 16:00:38
Nuovo schema aziende che prevede la separazione netta fra tutte le parti in causa.
Tanto nel precedente schema era tutto compatto quanto qui è tutto separato.
Ho tenuto conto delle indicazioni di Sotema riguardo i dati da conservare dei clienti e della nostra organizzazione l'unica cosa di cui non sono sicuro è l'iscrizione alla camera di commercio che se ho capito bene non serve più, sostituito dal C.F.
Solo per l'organizzazione il REA l'ho spostato nella tabella unità, anche se forse avendo l'organizzazione una tabella tutta sua sarebbe più corretto scrivere in anaorg un nuovo record per tutti gli uffici che fatturano anche perché avranno intestazioni giocoforza differenti.
Naturalmente mancheranno, qui e la, dei dati di campo ma se voi non mi fate sapere...
Non avendo capito a fondo come funziona l'eredità per ora me ne tengo alla larga.
So che anche così non è quello che chiedeva Berserker79 ma non sono ancora riuscito a fare quanto vuole.
Questo schema permette di registrare aziende con varie unità, tutti i contatti che desideriamo, possiamo annotare dove abitano, la data di nascita per eventuale invio di auguri e regali.
Ho lasciato queste possibilità anche per il personale dei fornitori e dei vettori non si sa mai.
Per il personale dell'organizzazione in più c'è il codice fiscale, servono altri dati?
Mi sono accorto che il rapporto banche aziende non è uno a molti ma molti a molti, infatti una banca può avere molti clienti e un cliente può avere molte banche, negli schemi precedenti avevo sbagliato.
Per ragioni storiche allego anche lo schema bocciato aggiornato.
Le tabelle di supporto; ansedi per il tipo di sede, stati per lo stato dei record e mansioni del personale non le ho collegate e da quanto ho capito non vorreste collegarle col join, solo il controllo attraverso Gambas per questi tipi di dato? Come vedete non ho messo il booleano per la sede legale in quanto credo sia più utile sapere attraverso i tipi che unità è quella registrata, naturalmente si può decidere diversamente.
Non so voi ma io gradirei approfondire tutti gli aspetti di tutti i diagrammi cercandone i punti deboli ed eventuali punti di forza, ammesso che ce ne siano. Solo così escono eventuali idee nuove.
Naturalmente non l'ho ancora testato volevo prima dei pareri.

 :ciao: :ciao: :ciao:

PS. Mi ero dimenticato una vecchia dicitura (idoaz al posto di idorg) l'ho cambiata.
Approfitto di questo per chiedere a Sotema che in precedenza aveva parlato di relazione clienti personale molti a molti, non dovrebbe essere uno a molti? C'è una ragione che mi sfugge?
Altro refuso avevo dimenticato idazi orfano in banche, a proposito di banche potrebbe servire memorizzare un contatto?
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 11 Febbraio 2016, 16:11:57
Alcune precisazioni sull'ultimo schema postato e in generale:
Quando scrivo che non so dove va cosa non intendo lamentarmi delle vostre chiare spiegazioni, semmai è colpa mia che prima di realizzare..., mi riferisco alla mia ignoranza che mi impedisce di sapere ad esempio se occorra registrare anche le banche per fornitori e vettori. Se non serve è chiaro che lo schema postato non va bene almeno sotto quell'aspetto.
Lo schema è riferito alle sole aziende e ai dati a loro indispensabili, non tengo conto dei rapporti fra queste entità perché credo occorra farlo quando ingloberemo i listini, gli ordini, i ddt, le fatture e i magazzini.
Forse nasce da qui l'incomprensione sulla terza tabella da voi richiesta? È per legare le aziende fra di loro?
Un'altra fonte di incomprensione potrebbe venire dal mio schema che si sta sviluppando da destra verso sinistra se volete lo posso ribaltare.
Circa l'eredità, come detto ci capisco poco e avendo già tanti problemi con la normalizzazione... direi che la dove Sotema ritenga utile inserirla se avrà la gentilezza di farlo...
Queste cose dimostrano la precocità di fare uno schema ancora prima di sapere quali dati occorre memorizzare e perché.
Nasce da questo la necessità che vi diate da fare per inviare tutti i nomi dei soggetti (tabelle) e degli attributi (campi) che occorrerà manipolare per il nostro gestionale.
Nella speranza che non vi siate rotti...
 :ciao:
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Berserker79 - 13 Febbraio 2016, 10:20:15
Ciao Gianluigi, mi puoi dare qualche conferma sul nuovo schema?
Vediamo se ho capito la nuova relazione.
Sia i clienti, i fornitori e i vettori hanno partita iva e codice fiscale direttamente nelle tabelle principali (anacli, anafor e anavet), mentre tramite le tabelle unicli, unifor e univet registriamo tutte le varie sedi che vanno dalla sede legale, alla sede amministrativa, ai vari punti di consegna/ritiro, ecc...
Mentre le tabelle anaorg e uniorg, sono utilizzate per la gestione della nostra azienda/sedi.

Questo schema mi piace e mi sembra una buona base su cui lavorare.
Fammi sapere, ciao.
P.S.: potresti allegare il file modificabile al posto del pdf?!
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 13 Febbraio 2016, 14:18:46
Ciao Gianluigi, mi puoi dare qualche conferma sul nuovo schema?
Vediamo se ho capito la nuova relazione.
Sia i clienti, i fornitori e i vettori hanno partita iva e codice fiscale direttamente nelle tabelle principali (anacli, anafor e anavet), mentre tramite le tabelle unicli, unifor e univet registriamo tutte le varie sedi che vanno dalla sede legale, alla sede amministrativa, ai vari punti di consegna/ritiro, ecc...
Mentre le tabelle anaorg e uniorg, sono utilizzate per la gestione della nostra azienda/sedi.

Si è esattamente come dici tu. Tieni conto che non l'ho ancora provato ma più o meno il funzionamento è lo stesso dello schema precedente solo che qui entrano in gioco più relazioni.

Citazione
Questo schema mi piace e mi sembra una buona base su cui lavorare.
Fammi sapere, ciao.
P.S.: potresti allegare il file modificabile al posto del pdf?!
:ok: Allego il file SVG creato da Inkscape.

Ciao
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: tornu - 20 Febbraio 2016, 23:19:47
Salve gente,
mi dispiace per questa mia lunga assenza che non mi ha permesso di seguire assiduamente lo svolgersi di questo progetto.
Ho dato una lettura (veloce) a tutto il lavoro che avete svolto fin qui, non me ne voglia Gianluigi che apprezzo per l'impegno
e il molto tempo che ci stà dedicando, però non posso non notare i diversi punti di vista (giustamente) che ci sono in questa
fase di progettazione delle tabelle del DB, che secondo me stanno creando un pò di confusione, come ha fatto notare
Berserker79 qualche post addietro e con il quale mi trovo quasi completamente d'accordo. Scusate se rientro un pò a gamba
tesa, comunque nel rispetto del lavoro da voi fatto fino ad oggi.
Se mi permettete consiglierei di discutere una tabella alla volta e sviscerarla fino in fondo, ci sarà sempre tempo per correzioni
e miglioramenti, vi posso assicurare che in un progetto così ambizioso capiterà spesso di ritornare su argomenti che si pensava
di aver chiuso. In base alla mia esperienza una tabella deve contenere tutti i campi inerenti il soggetto (per esempio tabella Clienti)
e non spezzetata in varie tabelle, così mi hanno insegnato, ciò detto non vuol dire che sia il metodo migliore però la maggior parte
dei DB (gestionali) con cui ho lavorato e lavoro così sono strutturati, ma anche leggendo i vari trattati in materia le teorie sono
varie e disparate. Vi allego alcuni esempi di tabelle per come io le intendo. Fatemi sapere cosa ne pensate.
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 21 Febbraio 2016, 14:49:57
Ciao Tornu,
perché gamba tesa? Qui tutti hanno il diritto di dire la loro, oserei dire il dovere.  :D
Intanto sono d'accordo con te, del resto l'ho sostenuto più volte, che l'attuale discussione di come fare interagire le relazioni fra di loro, dato che come hai appena sostenuto manco le abbiamo definite, è del tutto prematura.
Rimane il fatto che è prematuro anche il definire le relazioni stesse se prima non definiamo quali attributi (futuri campi) dobbiamo conservare.
Ti ringrazio pertanto dei nuovi dati, l'unico appunto che ti faccio è che se davi migliori dettagli magari capivo anche io a cosa servono certi campi nelle tue tabelle.
Una curiosità però ce la devi togliere, se tutti i dati dei clienti li tieni in un'unica tabella come fai a conservare di quel cliente le eventuali sedi secondarie che non siano dei meri indirizzi di consegna?
Come fai a rammentare, per un cliente importante, i 25 addetti alle varie mansioni utili a tenere le giuste relazioni?
Comunque sia anche tu dividi in due tabelle, no? Se le chiami in modo diverso che differenza fa? Si sta solo cercando di capire come è meglio fare per avere una maggiore duttilità e poter fronteggiare ogni evenienza che ci venga in mente.
Le mie sono solo idee da valutare, magari sto scrivendo un mare di sciocchezze ma gli americani che sono maestri fanno proprio questo quando discutono su qualcosa, se gli viene un'idea la dicono magari non vale niente ma può far scattare in un altro l'idea giusta.

A proposito di sciocchezze, spero tanto di non averne detto di troppe tanto da provocare l'allontanamento di Sotema da questa discussione, se così è stato chiedo umilmente scusa:
Caro Sotema io senza il tuo fondamentale apporto non ho intenzione di proseguire la discussione, non intendo mancare di rispetto agli altrettanto indispensabili Berserker79 e Tornu ma senza l'unico che conosce a fondo PostgreSQL ditemi voi come potremmo fare ad andare avanti, e poi non è solo per questo.
Attendo tue nuove  :-*

 :ciao:  :ciao:  :ciao:
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: tornu - 22 Febbraio 2016, 14:00:44
Ciao Gianluigi,
Ti ringrazio pertanto dei nuovi dati, l'unico appunto che ti faccio è che se davi migliori dettagli magari capivo anche io a cosa servono certi campi nelle tue tabelle.
Scusa, hai ragione. Ti allego le stesse tabelle corrette e commentate.
Citazione
Una curiosità però ce la devi togliere, se tutti i dati dei clienti li tieni in un'unica tabella come fai a conservare di quel cliente le eventuali sedi secondarie che non siano dei meri indirizzi di consegna?
Dai uno sguardo alla tabella INDSPE, puoi inserire tutte le destinazioni che vuoi diverse dalla sede legale.
Citazione
Come fai a rammentare, per un cliente importante, i 25 addetti alle varie mansioni utili a tenere le giuste relazioni?
Scusa, mi spieghi praticamente a che servirebbe avere questi dati?
Citazione
Comunque sia anche tu dividi in due tabelle, no?
???
Citazione
Le mie sono solo idee da valutare, magari sto scrivendo un mare di sciocchezze ma gli americani che sono maestri fanno proprio questo quando discutono su qualcosa, se gli viene un'idea la dicono magari non vale niente ma può far scattare in un altro l'idea giusta.
:ok:
Citazione
Caro Sotema io senza il tuo fondamentale apporto non ho intenzione di proseguire la discussione, non intendo mancare di rispetto agli altrettanto indispensabili Berserker79 e Tornu ma senza l'unico che conosce a fondo PostgreSQL ditemi voi come potremmo fare ad andare avanti, e poi non è solo per questo.
Spero che Sotema non abbia mollato solo per divergenze di vedute (si può sempre trovare una soluzione), non ci credo, magari la sua assenza e dettata da impegni lavorativi, famiglia...come capita anche a me ed altri...
In caso contrario e ne sarei dispiaciuto, si può comunque andare avanti anche non utilizzando Postgresql, che anche io purtroppo conosco molto poco.
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 23 Febbraio 2016, 21:32:44
Ciao Tornu,
scusa il ritardo ma ho un impegno che mi occupa tutto il giorno e mi lascia parecchio svuotato, per ora inizio col chiedere questo:

Campo in più per ragione sociale, perché non allargare il primo a 70? che vantaggi si hanno ad avere due campi?

IDLOC: Non è troppo limitante? Capisco la necessità di evitare errori di immissione ma così impedisci di registrare clienti, vettori e fornitori stranieri, penso occorra trovare un'altra strada.
In una tabella parli di valuta ma così non può che essere solo quella nazionale.

Partita Iva del vettore, se è obbligatoria quella del fornitore, presumo lo sarà anche questa, sempre di un fornitore si tratta anche se di servizio.

Ripeto io di gestionale nulla saccio ma credo che se ad esempio hai come cliente un'Italsider, che deve voler dire avere per cliente una città intera, immagino tu abbia bisogno di parecchio spazio per prendere nota dei vari contatti a più livelli. Devi trovare un modo per poterlo fare, io ne ho proposto uno. Grazie alle correlazioni fra tabelle ci sono altri modi per farlo ma non ho capito tu come faresti.

Mancano le (o la) tabelle del personale sempre che tu le preveda, come interagisce?

Quando parlo che anche tu spalmi i dati su più tabelle intendo IDLOC ad esempio, ma principalmente Indirizzi di spedizione, ma è normale visto che è la peculiarità del database relazionale. Il database relazionale rifugge solo dati non omogenei che impedirebbero le interrogazioni.

Sotema più che altro potrebbe essersi rotto di spiegare concetti difficili a un vaso di coccio come me.  :'(
Il fatto è che mi aveva assicurato che abitando vicino alla suocera...
Io PostgreSQL non vorrei proprio abbandonarlo, me ne sono innamorato  :-[
 :ciao: :ciao: :ciao:
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: tornu - 23 Febbraio 2016, 23:37:09
Ciao Tornu,
scusa il ritardo ma ho un impegno che mi occupa tutto il giorno e mi lascia parecchio svuotato, per ora inizio col chiedere questo:
Ci mancherebbe, anche tu pur avendo tempo libero avrai comunque impegni e cose da fare...come tutti
Citazione
Campo in più per ragione sociale, perché non allargare il primo a 70? che vantaggi si hanno ad avere due campi?
Dipende da come disegnerai la Form che prevederà questo campo.Io di solito preferisco due righe (TextBox) ed utilizzare la seconda se la ragione sociale eccede la prima, che una molto lunga che contenga tutta la ragione sociale. Pensa a quando implementerai la stampa
dei documenti, ti eviterai di utilizzare funzioni che spezzino il dato in due.
Citazione
IDLOC: Non è troppo limitante? Capisco la necessità di evitare errori di immissione ma così impedisci di registrare clienti, vettori e fornitori stranieri, penso occorra trovare un'altra strada.
La tabella sarà editabile, e quindi potrai sempre inserire anche una località straniera.
Citazione
In una tabella parli di valuta ma così non può che essere solo quella nazionale.
Europea... a meno che non fai export extra europeo non so se è il caso di prevedere altre valute, anche se io ho indicato la tabella, confrontiamoci.
Citazione
Partita Iva del vettore, se è obbligatoria quella del fornitore, presumo lo sarà anche questa, sempre di un fornitore si tratta anche se di servizio.
Mi devo informare, ma nel mio lavoro spesso e volentieri le bolle che mi passano in mano raramente riportano la partita iva del vettore.
Non è un fornitore, a meno che non ti fatturi dei servizi, in questo caso lo inserisci come fornitore.
Citazione
Ripeto io di gestionale nulla saccio ma credo che se ad esempio hai come cliente un'Italsider, che deve voler dire avere per cliente una città intera, immagino tu abbia bisogno di parecchio spazio per prendere nota dei vari contatti a più livelli. Devi trovare un modo per poterlo fare, io ne ho proposto uno. Grazie alle correlazioni fra tabelle ci sono altri modi per farlo ma non ho capito tu come faresti.
Ti assicuro che nel lavoro quotidiano i contatti che ti servono con un cliente di solito sono uno a uno, con un fornitore di solito ai a che
fare al massimo con il responsabile commerciale, comunque nessun problema basta prevedere una tabella tipo Rubrica Clienti/Fornitori
dove andrai ad inserire tutti i contatti che ti servono. Appena ho un attimo la cerco (c'è l'ho gà pronta da qualche parte) e la posto così capirai meglio cosa intendo.
Citazione
Mancano le (o la) tabelle del personale sempre che tu le preveda, come interagisce?
Mi spieghi praticamente a cosa può servire.
Citazione
Quando parlo che anche tu spalmi i dati su più tabelle intendo IDLOC ad esempio, ma principalmente Indirizzi di spedizione, ma è normale visto che è la peculiarità del database relazionale. Il database relazionale rifugge solo dati non omogenei che impedirebbero le interrogazioni.
Beh, non è proprio spalmare, ma la normale relazione tra tabelle di un database utilizzando le chiavi primarie delle stesse.
Citazione
Sotema più che altro potrebbe essersi rotto di spiegare concetti difficili a un vaso di coccio come me.  :'(
Il fatto è che mi aveva assicurato che abitando vicino alla suocera...
Io PostgreSQL non vorrei proprio abbandonarlo, me ne sono innamorato  :-[
 :ciao: :ciao: :ciao:
Non credo che l'assenza (spero momentanea) di Sotema sia per il motivo indicato da te...la suocera ?  ;D
Per quanto riguarda il DB ti capisco, ma io ho sempre lavorato con Mysql, piacerebbe anche a me apprendere Postgresql,
si può sempre studiare, anche se l'apporto di una persona che lo conosce è un'altra cosa.
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 24 Febbraio 2016, 15:33:23
Citazione
Campo in più per ragione sociale, perché non allargare il primo a 70? che vantaggi si hanno ad avere due campi?
Dipende da come disegnerai la Form che prevederà questo campo.Io di solito preferisco due righe (TextBox) ed utilizzare la seconda se la ragione sociale eccede la prima, che una molto lunga che contenga tutta la ragione sociale. Pensa a quando implementerai la stampa dei documenti, ti eviterai di utilizzare funzioni che spezzino il dato in due.

Scusa sai ma questa la capisco poco. Io i form di solito li basavo su una vista che mi permetteva di incasellare bene il tutto.
Comunque non trovo nulla di difficoltoso a lavorare con Gambas su una stringa.
Trovo invece complicato gestire interrogazioni con più campi per lo stesso dato.

Citazione
Citazione
IDLOC: Non è troppo limitante? Capisco la necessità di evitare errori di immissione ma così impedisci di registrare clienti, vettori e fornitori stranieri, penso occorra trovare un'altra strada.
La tabella sarà editabile, e quindi potrai sempre inserire anche una località straniera.

Dovremo aggiungere nazione e sigla nazione. Mi puoi spiegare come funziona.
Citazione
Citazione
In una tabella parli di valuta ma così non può che essere solo quella nazionale.
Europea... a meno che non fai export extra europeo non so se è il caso di prevedere altre valute, anche se io ho indicato la tabella, confrontiamoci.

Anche Inghilterra e metà Russia sono in Europa e poi con internet...
Citazione
Citazione
Partita Iva del vettore, se è obbligatoria quella del fornitore, presumo lo sarà anche questa, sempre di un fornitore si tratta anche se di servizio.
Mi devo informare, ma nel mio lavoro spesso e volentieri le bolle che mi passano in mano raramente riportano la partita iva del vettore.
Non è un fornitore, a meno che non ti fatturi dei servizi, in questo caso lo inserisci come fornitore.

Ma i vettori che vi consegnano la merce in porto franco ve lo fanno gratis?
Citazione
Citazione
Ripeto io di gestionale nulla saccio ma credo che se ad esempio hai come cliente un'Italsider, che deve voler dire avere per cliente una città intera, immagino tu abbia bisogno di parecchio spazio per prendere nota dei vari contatti a più livelli. Devi trovare un modo per poterlo fare, io ne ho proposto uno. Grazie alle correlazioni fra tabelle ci sono altri modi per farlo ma non ho capito tu come faresti.
Ti assicuro che nel lavoro quotidiano i contatti che ti servono con un cliente di solito sono uno a uno, con un fornitore di solito ai a che
fare al massimo con il responsabile commerciale, comunque nessun problema basta prevedere una tabella tipo Rubrica Clienti/Fornitori
dove andrai ad inserire tutti i contatti che ti servono. Appena ho un attimo la cerco (c'è l'ho gà pronta da qualche parte) e la posto così capirai meglio cosa intendo.

Ahi iniziamo a dover aggiungere una nuova tabella  ;D
Citazione
Citazione
Mancano le (o la) tabelle del personale sempre che tu le preveda, come interagisce?
Mi spieghi praticamente a cosa può servire.

Veramente ne avevo già parlato per quanto riguarda i clienti. Avere la possibilità di conoscere la data di nascita di qualcuno ti permette di potergli fare gli auguri di Buon Compleanno magari recapitandoli a casa accompagnati da un vassoio di arantzade  ;D
Citazione
Citazione
Quando parlo che anche tu spalmi i dati su più tabelle intendo IDLOC ad esempio, ma principalmente Indirizzi di spedizione, ma è normale visto che è la peculiarità del database relazionale. Il database relazionale rifugge solo dati non omogenei che impedirebbero le interrogazioni.
Beh, non è proprio spalmare, ma la normale relazione tra tabelle di un database utilizzando le chiavi primarie delle stesse.

Che è esattamente quello che faccio io con anacli e unicli.
Per fare un esempio, col mio schema, la valuta la otterresti dalla banca di appoggio della fattura. Non servirebbe marcarla nella tabella del cliente.
Citazione
Non credo che l'assenza (spero momentanea) di Sotema sia per il motivo indicato da te...la suocera ?  ;D
Per quanto riguarda il DB ti capisco, ma io ho sempre lavorato con Mysql, piacerebbe anche a me apprendere Postgresql,
si può sempre studiare, anche se l'apporto di una persona che lo conosce è un'altra cosa.

Speriamo si faccia vivo e comunque... continuiamo a studiare...
 :ciao: :ciao: :ciao:

Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: tornu - 24 Febbraio 2016, 23:59:20
Scusa sai ma questa la capisco poco. Io i form di solito li basavo su una vista che mi permetteva di incasellare bene il tutto.
Mi spieghi praticamente cosa intendi.
Citazione
Comunque non trovo nulla di difficoltoso a lavorare con Gambas su una stringa.
Trovo invece complicato gestire interrogazioni con più campi per lo stesso dato.
Ti assicuro di no, comunque non credo sia un problema adottare l'una o l'altra.

Citazione
IDLOC: Non è troppo limitante? Capisco la necessità di evitare errori di immissione ma così impedisci di registrare clienti, vettori e fornitori stranieri, penso occorra trovare un'altra strada.
Dovremo aggiungere nazione e sigla nazione. Mi puoi spiegare come funziona.
Dai un'occhiata alla tabella località che ho allegato.
Citazione
Anche Inghilterra e metà Russia sono in Europa e poi con internet...
Dipende tutto dall'utenza a cui vogliamo rivolgere il gestionale, per quanto riguarda internet non credo tu voglia
arrivare a fare interagire il gestionale con un ecommerce, credo che sia un tantino oltre i nostri obiettivi.
Citazione
Ma i vettori che vi consegnano la merce in porto franco ve lo fanno gratis?
Se la consegna è in porto franco, vuol dire che il trasporto lo paga il fornitore. Se la consegna è in porto franco con addebito in fattura
io non pago il vettore ma il fornitore che mi addebiterà il costo del trasporto in fattura.
Citazione
Ahi iniziamo a dover aggiungere una nuova tabella  ;D
Sai quante ne dovremmo aggiungere ancora, non siamo neanche agli inizi.... ;D
Citazione
Veramente ne avevo già parlato per quanto riguarda i clienti. Avere la possibilità di conoscere la data di nascita di qualcuno ti permette di potergli fare gli auguri di Buon Compleanno magari recapitandoli a casa accompagnati da un vassoio di arantzade  ;D
??? ???
Citazione
Per fare un esempio, col mio schema, la valuta la otterresti dalla banca di appoggio della fattura. Non servirebbe marcarla nella tabella del cliente.
E se hai un cliente che paga solo contanti, o con rimessa diretta come gli agganci la valuta?
Con il tuo schema una banca una valuta ?
E se due clienti diversi hanno la stessa banca ma valuta diversa?
Per come l'ho pensata io le valute sono un dato indipendente dalle banche.
Citazione
Speriamo si faccia vivo e comunque... continuiamo a studiare...
 :ciao: :ciao: :ciao:
:coder:
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 25 Febbraio 2016, 15:20:55

Mi spieghi praticamente cosa intendi.
Intendo che con Access se ben ricordo c'erano delle semplificazioni a creare maschere o widget legati a campi di tabelle o viste (query) e siccome le maschere normalmente si riferiscono a più tabelle...
Non sono così pratico di Gambas e database da sapere se anche lui agevola in tal senso, ma forse si visto che Minisini si è ispirato a VB.

Citazione
Dai un'occhiata alla tabella località che ho allegato.
Mi farò uno schema e poi ti dico.
Citazione
Dipende tutto dall'utenza a cui vogliamo rivolgere il gestionale, per quanto riguarda internet non credo tu voglia
arrivare a fare interagire il gestionale con un ecommerce, credo che sia un tantino oltre i nostri obiettivi.
Sono d'accordo ma appare più corretto prevedere un'espansione dell'azienda e quindi prevenirla.

Citazione
Se la consegna è in porto franco, vuol dire che il trasporto lo paga il fornitore. Se la consegna è in porto franco con addebito in fattura
io non pago il vettore ma il fornitore che mi addebiterà il costo del trasporto in fattura.
Intendevo le consegne ai clienti che se fatte in porto franco poi il vettore ce le fattura a noi.

Citazione
Sai quante ne dovremmo aggiungere ancora, non siamo neanche agli inizi.... ;D
Si, so che dobbiamo aggiungere parecchie tabelle ma intendevo “aggiungere per completare le vecchie tabelle già esistenti e non sufficienti a contenere tutto”.  :P

Citazione
??? ???
Se non capisci cosa intendo vuol dire che non sai il significato di relazioni pubbliche.  :-X

Citazione
E se hai un cliente che paga solo contanti, o con rimessa diretta come gli agganci la valuta?
Con il tuo schema una banca una valuta ?
E se due clienti diversi hanno la stessa banca ma valuta diversa?
Per come l'ho pensata io le valute sono un dato indipendente dalle banche.
Ma io ripeto non so niente e tanto meno di amministrazione, ma dubito fortemente che tu possa vendere all'estero in contanti o per rimessa diretta. Io credo ci si appoggi alle banche, ma ripeto non ne so nulla, ed è per questo che senza persone che ne sanno a fondo andremo poco lontano.

Citazione
:coder:
:coder:
 :ciao: :ciao: :ciao:
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: Gianluigi - 15 Marzo 2016, 19:03:59
 :ciao: Premetto per ora non ci sono novità, scusate.  :-[
Volevo solo fare alcune considerazioni su questa discussione e dire che mi dispiacerebbe morisse qui.
Non nego di averci pensato ma credo che non sarebbe giusto, naturalmente se avrò ancora il vostro sostegno altrimenti mi sarebbe impossibile continuare.
Ho dovuto rivedere i miei piani, inizialmente avevo pensato di sospendere la scrittura del libro e dedicarmi a questo, ma mi rendo conto che la cosa non è fattibile essendo questa, comunque vada, una discussione di “lungo respiro”.
Attualmente sono impegnato in altre cose anche extra Gambas, appena avrò qualcosa mi rifarò vivo.
Nella speranza di non avervi perso, vi saluto caramente.

 :ciao: :ciao: :ciao:
Titolo: Re:Sviluppo Gestionale Rubinetto Felice
Inserito da: tornu - 15 Marzo 2016, 22:20:54
:ciao: Premetto per ora non ci sono novità, scusate.  :-[
Volevo solo fare alcune considerazioni su questa discussione e dire che mi dispiacerebbe morisse qui.
Non nego di averci pensato ma credo che non sarebbe giusto, naturalmente se avrò ancora il vostro sostegno altrimenti mi sarebbe impossibile continuare.
Ho dovuto rivedere i miei piani, inizialmente avevo pensato di sospendere la scrittura del libro e dedicarmi a questo, ma mi rendo conto che la cosa non è fattibile essendo questa, comunque vada, una discussione di “lungo respiro”.
Attualmente sono impegnato in altre cose anche extra Gambas, appena avrò qualcosa mi rifarò vivo.
Nella speranza di non avervi perso, vi saluto caramente.

 :ciao: :ciao: :ciao:

Ciao Gianluigi,
pensavo avessi gettato la spugna... ;D
Se ricordi (o ti rileggi i primi post) avevamo messo in cantiere che sarebbe stata un'impresa non da poco,
e proprio tu che eri quello più entusiasta alle prime difficoltà o perchè qualcuno momentaneamente si è
staccato ai dubbi se proseguire o no.
Per quanto mi riguarda io ci sono, quando vuoi riprendere batti un colpo.
Non voglio essere ripetitivo, ma le premesse (leggi difficoltà) iniziali rimangono tutte, tempi molto lunghi,
idee diverse, modalità di approccio alle procedure di un gestionale dettate dalle diverse esperienze maturate
da ognuno di noi, ecc... Mettici anche la difficoltà del mezzo utilizzato (il Forum) per confrontarci tra di
noi che non è sicuramente il più duttile per questo tipo di progetto, e anche il fatto che nessuno di noi (almeno
credo) lo faccia di professione, ma sono anche convinto che con pazienza e caparbietà si può portare a termine
anche un progetto così impegnativo. Spero di risentire te e almeno i primi compagni di viaggio presto  :ciao: