Autore Topic: [Completato] Programma gestionale vendite ordini consegne  (Letto 40915 volte)

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re: Programma gestionale vendite ordini consegne
« Risposta #195 il: 30 Settembre 2009, 18:45:48 »
Premetto che non ho ancora provato e ho solo dato un'occhiata al tutorial, usando "PdfWriter" non sono necessarie le QT o sbaglio?

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re: Programma gestionale vendite ordini consegne
« Risposta #196 il: 30 Settembre 2009, 20:07:45 »
@tornu
Grazie dell'esempio (non ti avevo letto prima :-)

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re: Programma gestionale vendite ordini consegne
« Risposta #197 il: 01 Ottobre 2009, 00:37:34 »
@md9327
Ho guardato bene il sito FPDF, mi sono concentrato nel tutorial "Esempio Minimo", ho provato applicarlo in gambas, anche cercando di capire guardando il tuo "PdfWriter". Ho provato a fare un esempio, mi sono caricato la classe Pdfwriter, ho attivato il componente gb.pdf, e ho cercato di tradurre "l'esempio minimo", senza risultati..
Per favore mi fai andare questo esempio?
Codice: [Seleziona]

PUBLIC SUB Button1_Click()

  DIM pdf AS PdfWriter
 
pdf = NEW PdfWriter("P", "mm", "A4")  
pdf.AddPage()
pdf.SetFont("Arial", "B", "16")
pdf.Cell(40, 10, "Hello World!")
pdf.Output(Application.Path &/ "prova.pdf", FALSE)

CATCH
  Message.Error(Error.Text & "\n" & Error.Where)
END


L'esempio tuo Pdfwriter, non mi va, non sò dove posso aver sbagliato qualcosa, mi esce questo:
Ciao grazie

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Programma gestionale vendite ordini consegne
« Risposta #198 il: 01 Ottobre 2009, 02:11:16 »
La libreria PdfWriter non ha bisogno di quella Gambas gb.pdf, perchè il file lo scrive e non lo legge.
Per prima cosa ti porti PdfWriter all'interno del tuo progetto.
Dato che la classe è dichiarata PRIVATE, devi necessariamente crearne una tua derivata da PdfWriter, scrivendo la seguente istruzione all'inizio del file della tua classe:
Codice: [Seleziona]

INHERITS PdfWriter


Al suo interno PdfWriter ha tutte le funzionalità per scrivere pagine pdf, ma chiama due metodi, che devono essere presenti nella tua classe derivata:
Codice: [Seleziona]

PUBLIC FUNCTION Footer()
 ...
END

PUBLIC SUB Header()
 ...
END

Questi due metodi ti permettono di scrivere sulla pagina corrente, ovvero:

Footer: ti permette di scrivere sul fondo pagina, come ad esempio il numero della pagina corrente;

Header: ti permette di scrivere sulla testata della pagina.

I metodi vengono chiamati ad ogni nuova pagina, ma puoi anche evitare di utilizzarle.

In linea di principio, l'uso di PdfWriter prevede:

1) creazione del documento, con le impostazioni di formato pagina (Landscape o Portrait), unità di misura (es mm=millimetri), dimensione della pagina (es. A4).
2) impostazione di alcune informazioni facoltative, ad es.: autore, creatore, soggetto, titolo, ecc.
3) apertura del documento (Open)
4) impostazione del numero di pagine totale (AliasNbPages)
5) scrittura della testata (Header)
6) gestione delle pagine (AddPage, Bookmark), del colore (SetTextColor) e del font (SetFont)
7) scrittura del contenuto, ad es.:
   - una serie di celle contenenti testo
   - testo libero in vari formati, font, colori, e posizione
   - immagini
   - varie combinazioni

Implementando opportunamente la tua classe, puoi aggiungere ulteriori funzionalità, come ad esempio la lettura di un file o una tabella da un database, riportando i dati in formato colonnare sul documento pdf.
Io personalmente lo uso per creare dei report da un database, e per formattare le pagine di fatture.

Quindi, ritornando al tuo codice, la prima cosa da fare è quella di creare una nuova classe derivata da PdfWriter, dopodiche il resto del tuo esempio credo possa andare, ma poi lo vedrai nel risultato finale.
Solo una nota: prima di scrivere nel documento, è necessario prima aprirlo con Open(); quindi, prima di AddPage, è necessario aggiungere un bel:
Codice: [Seleziona]

pdf.Open()

altrimenti PdfWriter resta bloccato in uno stato inattivo...
Diciamo che questa è una prassi generale nella programmazione...

La funzione di chiusura viene eseguita automaticamente dal metodo Output().

Più avanti ti indicherò qualche altra dritta per gestire, ad esempio la stampa del numero di pagina a fondo, o del totale pagine...

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re: Programma gestionale vendite ordini consegne
« Risposta #199 il: 01 Ottobre 2009, 17:49:23 »
@md9327
Ciao, grazie prima di tutto
Devo assolutamente impararmi questa classe!! :-D
Mi ero appena imparato l'oggetto printer, ma questa mi pare vada ben oltre.. inoltre mi arrichisco il mio piccolo bagaglio.:-D

Non ho ancora potuto provare, da come ho capito creando una classe con scritto all'inizio "INHERITS PdfWriter" diventerebbe una "sottoclasse" (si dice così?) di PdfWrtiter.
Questa "sottoclasse" va fatta per ogni tipo di stampa? Esempio se ho Una stampa "fatture" e una "bolle di accompagnamento" devo crearne 2?

Comunque intanto mi guardo bene il tuo esempio (che però non mi funziona) che ho visto ha una sottoclasse chiamata "provaPDF" mi sembra..

Stasera studio grazie

Hei non mi mollare!! ;-)

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re: Programma gestionale vendite ordini consegne
« Risposta #200 il: 01 Ottobre 2009, 22:43:16 »
:evviva:  non ci credo!! ce l'ho fatta!!
Md9327 devo pagarti da bere :2birre: mi sembra di aver vinto alla lotteria :-)

Stupendo!! ho già capito varie funzioni, un volta capito il meccanismo non è difficile

Naturalmente resta qualche domanda...

Ho capito come spostarmi in basso, cosi:
ME.Ln() ' riga successiva
ME.Ln(20) ' piu in giu di 20 (mm?)
ma come faccio a impostare la partenza a sx, X ?

intanto mi fermo quà, stasera sono troppo contento, mi riguardo le mie stampe, se le mostro a qualcuno mi dice che sono scemo, ma per me sono troppo belle :-D

Ti ringrazio tantissimo

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Programma gestionale vendite ordini consegne
« Risposta #201 il: 02 Ottobre 2009, 10:45:06 »
No, non ti mollo... :-)

Sì, hai capito bene.
In Gambas, come anche in altri linguaggi (consiglio: leggiti il wiki) puoi, anzi è buona cosa, crearti classi personalizzate, derivate da altre classi.

Ti faccio un esempio...

In Gambas esiste una classe Panel, e questa la puoi instanziare, aggiungendola ad una tua Form, e dandogli un nome preciso. Gambas, non fà altro che creare un nuovo oggetto di tipo Panel in memoria, che è una copia esatta di quello presente nella sua libreria.
Però questo oggetto è solo una copia, e contiene solo ed esclusivamente le proprietà dell'oggetto Panel.
Se tu desideri personalizzare questa copia di Panel, non fai altro che crearti una classe, derivata da Panel, e aggiungendo le carattersitiche che desideri, proprietà e metodi (semplicemente: variabili e funzioni).
Considera che le classi contenute nelle librerie di Gambas, non sono altro che dei template (delle basi), per costruire oggetti reali.
PdfWriter è un template, e questo lo definisce l'istruzione ad inizio classe:
Codice: [Seleziona]

CREATE PRIVATE

Questa istruzione permette di definire la classe, ma non ne permette l'utilizzo diretto. Per utilizzarla, è necessario creare una sottoclasse.
La creazione di questa sottoclasse ti permette, inoltre, di aggiungere ulteriori proprietà, cosa alquanto auspicabile, visto che la classe in sè stessa non fà assolutamente nulla, e per "nulla" intendo la necessità di passargli parametri e chiamare le sue proprietà e metodi, per raggiungere i tuoi scopi.

Riguardo alla classe Printer, e in genere la maggioranza degli oggetti contenuti nelle librerie di Gambas, definiscono oggetti generici, che necessitano di essere implementati in codice intelligente, ovvero, integrate in meccanismi più complessi.
Per esempio, la classe statica Draw, ti permette di disegnare piò o meno su qualsiasi cosa (printer, drawingarea, picture, ecc.), ma è necessario costruire codice idoneo ai tuoi scopi, chiamando opportunamente le proprietà di Draw.

Spero di aver chiarito i concetti di base...

Ad ogni modo, nel wiki, ho scritto qualcosina in merito, e ti consiglio di dargli una letta più approfondita...

Ciao

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Programma gestionale vendite ordini consegne
« Risposta #202 il: 02 Ottobre 2009, 10:47:46 »
Perdonami, ho letto la tua risposta in ritardo...

Se non ricordo male, esistono due metodi per impostare la posizione nel documento: PosX e PosY (posso sbagliare i nomi...).

Ricordati che puoi disegnare la pagina come desideri, ma quando salti alla successiva non puoi più modificarla.

P.S.: Io preferisco la birra scura!!! :-)

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re: Programma gestionale vendite ordini consegne
« Risposta #203 il: 02 Ottobre 2009, 11:33:02 »
Grazie, vedo di studiarmi bene il wiki adesso che comincio a capire.
Adesso mi dedico alle stampe, ritorniamo al discorso del csv un pò più avanti?
Grazie di tutto

P.s. Io preferisco la bionda, però mi piacciono molto le "more"  ;-) :2birre:

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Programma gestionale vendite ordini consegne
« Risposta #204 il: 03 Ottobre 2009, 01:34:52 »
...non faccio distinzioni di colore... semmai di misure... :-)

Per il csv, avevo inviato un file con due nuove classi, ma stò ancora aspettando che qualcuno (in paricolare leo) me lo convalidi e lo pubblichi dei download.

Diciamo che sono due oggetti che leggono e scrivono file csv, con qualche bel parametrino a corredo... e funzionano...

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re: Programma gestionale vendite ordini consegne
« Risposta #205 il: 03 Ottobre 2009, 10:58:12 »
Ciao, ho quasi il controllo di PdfWriter :-D ..quasi

Ho capito come impostare la pagina, inserire celle con bordo e non, pagina di pagine etcc.
Sto provando un esempio tipo fattura, nel corpo faccio questo

cell (.... Quantità...)
cell (.... codice...)
cell (.... Descrizione...)
cell (.... prezzo...)
ln()

risultato:
1  ba  banane  10
4  me  mele    30
6  pe  pere    15


e fin quì tutto ok mi viene una bella griglia con 4 colonne e ad ogni riga ho il mio record.
Però il testo descrizione potrebbe essere più lungo della cella.
Allora ho provato "multicell" e funziona, va a capo e scrive tante righe quante ne ha bisogno il testo.
Però ho visto che mi ritorna a capo creando un'altra riga e non capisco il perchè. es.

cell (.... Quantità...)
cell (.... codice...)
multicell (.... Descrizione...)
cell (.... prezzo...)
ln()

risultato:
1  ba  
banane  
10
4  me  
mele    
30
6  pe  
pere    
15

Ho saltato qualche impostazione oppure va usato un'altro sistema?
Ciao grazie

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: Programma gestionale vendite ordini consegne
« Risposta #206 il: 03 Ottobre 2009, 14:56:07 »
Potresti impostare una lunghezza massima per la descrizione in modo che non vada fuori range....la mia è solo un'idea...non mi intendo di fatture...

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re: Programma gestionale vendite ordini consegne
« Risposta #207 il: 03 Ottobre 2009, 16:51:00 »
@ Ceskho
Si è giusto, era quello che stavo facendo con l'oggetto printer prima che MD9327 mi insegnasse PdfWriter, questa classe ha molte funzioni, credo anche quella di andare a capo come volevo fare io.

Mi piacerebbe che sulla calcolatrice che mi hai fatto ci fosse un tuo riferimento sul form, oltre che quello che c'è già nella classe naturalmente.

Ciao grazie

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: Programma gestionale vendite ordini consegne
« Risposta #208 il: 03 Ottobre 2009, 18:31:58 »
In che senso? Che riferimento?

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re: Programma gestionale vendite ordini consegne
« Risposta #209 il: 03 Ottobre 2009, 18:37:51 »
Il tuo nome, email..  autore