Print Page | Close Window

Demo - Report Etichette (più copie per label e salta labels blank)

Printed From: IALweb
Category: MS Office
Forum Name: Microsoft Access
Forum Discription: Temi legati ad Access e altri software per la gestione di database
URL: https://forum.ialweb.it/forum_posts.asp?TID=9176734
Printed Date: 22/Apr/2019 at 11:58
Software Version: Web Wiz Forums 10.17 - http://www.webwizforums.com


Topic: Demo - Report Etichette (più copie per label e salta labels blank)
Posted By: 65.franco
Subject: Demo - Report Etichette (più copie per label e salta labels blank)
Date Posted: 04/Mar/2010 at 20:45

(By65Franco) DEMO STAMPA ETICHETTE
' public variable
Public tblEtich As String
Public tblOrigine As String
Public strReport As String
' retrieve form and subform name
Public Const strSFrm = "SFrm_Etichette"
Public Const strFrm = "Frm_Etichette"

' CREATE TMP USER TABLE FOR LABELS
Public Function myCreateTmpTbl()
' create user tmptbl
tblEtich = "TmpEtich" & Environ("UserName")
End Function

' DELETE TMP USER TABLE FOR LABELS
Public Function myDeletTmpTbl()
' delete user tmp tbl
On Error Resume Next
DoCmd.DeleteObject acTable, tblEtich
On Error GoTo 0
' open subform in acdesign
DoCmd.OpenForm strSFrm, acDesign, , , , acHidden
' delete set record source for tbl select
Forms(strSFrm).RecordSource = ""
' close/save subform
DoCmd.Close acForm, strSFrm, acSaveYes
End Function

' CREATE TABLE FOR SELECT LABELS AND COPIES
Public Sub myLabelLoadSubForm(ByVal strTblSelect As String, ByVal strReportLabels As String)
Dim dbDbs As DAO.Database
Dim rstInp As DAO.Recordset
Dim ctl As Control
Dim fld As Field
Dim dbType As Variant
Dim i As Long

' impost mouse
DoCmd.Hourglass True

' assume public string tbl/qry select and report labels
tblOrigine = strTblSelect
strReport = strReportLabels

' create new join input tbl
myDeletTmpTbl
CurrentDb.Execute "Select True AS blnEtich, 1 AS nCopieEtich, " & strTblSelect & ".* InTo " & tblEtich & " From " & strTblSelect & ";"

' open subform in acdesign
DoCmd.OpenForm strSFrm, acDesign, , , , acHidden
' delete control in subform
For i = 1 To Forms(strSFrm).Count
    For Each ctl In Forms(strSFrm).Controls
        On Error Resume Next
        DeleteControl Forms(strSFrm).Name, ctl.Name
        On Error GoTo 0
    Next ctl
Next i

' open and read input records
Set dbDbs = CurrentDb
Set rstInp = dbDbs.OpenRecordset(tblEtich)
For Each fld In rstInp.Fields
    Select Case fld.Type
    Case 3
        dbType = 106
    Case Else
        dbType = 109
    End Select
    ' create control from tbl select
    Set ctl = CreateControl(Forms(strSFrm).Name, dbType)
    ctl.Properties("Name") = IIf(fld.Name = "blnEtich", "Stampa", IIf(fld.Name = "nCopieEtich", "Nr Copie", fld.Name))
    ctl.Properties("ControlSource") = fld.Name
    If fld.Name <> "blnEtich" And fld.Name <> "nCopieEtich" Then ctl.Properties("Locked") = True
Next fld

' set record source for tbl select
Forms(strSFrm).RecordSource = tblEtich
' close/save/open form and subform
DoCmd.Close acForm, strSFrm, acSaveYes
' close obj
Set ctl = Nothing
Set fld = Nothing
rstInp.Close
Set rstInp = Nothing
Set dbDbs = Nothing

' impost mouse
DoCmd.Hourglass False

' open form select labels and copies
DoCmd.OpenForm strFrm, acNormal

End Sub

' REPORT LABELS
Public Sub myLabelTmpTbl()
Dim dbDbs As DAO.Database
Dim rstInp As DAO.Recordset
Dim rstOut As DAO.Recordset
Dim tblRptEtich As String
Dim nJump As Long
Dim nRec As Long
Dim i As Long
Dim y As Long
Dim x As Long

' impost mouse
DoCmd.Hourglass True

' set db dbs
Set dbDbs = CurrentDb

' check record number input tbl report
Set rstInp = dbDbs.OpenRecordset("Select * From " & tblEtich & " Where blnEtich=True;")
nRec = rstInp.RecordCount
' close obj
Set dbDbs = Nothing
rstInp.Close
Set rstInp = Nothing
If nRec = 0 Then
    MsgBox "Attenzione !!!" & vbCrLf & "Non trovate Etichette da Stampare", vbCritical, "Error"
    ' impost mouse
    DoCmd.Hourglass False
    ' exit
    Exit Sub
End If

' retrieve number labels jump
nJump = Forms(strFrm).Controls("nLabelsJump")

' retrieve user tmpRptTbl
tblRptEtich = "TmpRptEtich" & Environ("UserName")

' delete user tmpRptTbl
On Error Resume Next
DoCmd.DeleteObject acTable, tblRptEtich
On Error GoTo 0
' create user output tmpRptTbl
CurrentDb.Execute "Select 0 AS nNrEtich, " & tblOrigine & ".* InTo " & tblRptEtich & " From " & tblOrigine & ";"
CurrentDb.Execute "Delete * From " & tblRptEtich & ";"

' set db dbs
Set dbDbs = CurrentDb

' open and write output tbl report
Set rstOut = dbDbs.OpenRecordset(tblRptEtich)
' write blank labels jump
For i = 1 To nJump
    y = y + 1
    rstOut.AddNew
    rstOut.Fields(0).Value = y
    rstOut.Update
Next i

' open and read input records
Set rstInp = dbDbs.OpenRecordset("Select * From " & tblEtich & " Where blnEtich=True;")
Do While Not rstInp.EOF
    ' check number of copies of labels
    For i = 1 To rstInp.Fields(1).Value
        rstOut.AddNew
        y = y + 1
        rstOut.Fields(0).Value = y
        ' retrieve tbl fileds add new record
        For x = 3 To rstInp.Fields.Count - 1
             rstOut.Fields(x - 1).Value = rstInp.Fields(x).Value
        Next x
        rstOut.Update
    Next i
    ' move next
    rstInp.MoveNext
Loop

' close obj
Set dbDbs = Nothing
rstInp.Close
Set rstInp = Nothing
rstOut.Close
Set rstOut = Nothing

' open and change report recordsource
DoCmd.OpenReport strReport, acViewDesign, , , acHidden
' set record source for report select
Reports(strReport).RecordSource = tblRptEtich

' impost mouse
DoCmd.Hourglass False

' close/save/open report
DoCmd.Close acReport, strReport, acSaveYes
DoCmd.OpenReport strReport, acViewPreview

End Sub

Sulla base di quanto richiesto dai partecipanti del forum, propongo una demo che con quattro semplici funzioni, una Form ed una SubForm, gestisce con molta semplicità e velocità la stampa delle etichette in un report.
Con la presente si ha la possibilità di impostare :
- Un numero di copie per ogni singola etichetta
- Saltare un numero di etichette vuote prima di stampare la prima etichetta valida
- Selezionare dal recordset i records per i quali si vogliono riprodurre le etichette
- Passare alla function sia tabelle che query di selezione (i campi selezionati verranno riportati nella subform di selezione etichette da stampare)


Tutto questo senza utilizzare le funzioni di report che spesso creano problemi di formattazione in anteprima del report o di stampa immediata (invio diretto del report alla stampante).

Il metodo proposto è quello di avvalersi di tabelle user temporanee come descritto nella demo qui allegata.
http://myfreefilehosting.com/f/a274938eab_0.33MB/URL - http://myfreefilehosting.com/f/a274938eab_0.33MB - http://myfreefilehosting.com/f/a274938eab_0.33MB

Nell'allegato troverete anche la documentazione in pdf con le dovute spiegazioni tecniche per adattare e/o incorporare le function nei vostri progetti. 


All'utilizzatore finale non rimane altro che passare alla function una tabella o una query di selezione con i campi che dovranno formare l'etichetta e naturalmente costruirsi il proprio report di etichette con la sorgente dati come di solito siete abituati a fare.
Quando viene richiamata la function si passerà come parametri la tabella o la query di selezione e il report da riprodurre... tutto il resto viene eseguito dalle form e dalle function messe a disposizione.


[x Gregorio]
Come ormai mio solito chiedo cortesemente di validare e testare la demo al grandioso Greg...
Spero sia di gradimento quanto proposto e che possa trovare "posto" nella sezione demo.
Sempre a disposizioni per ulteriori chiarimenti in merito e/o implementazioni di quanto esposto in demo.

Ciaooo



-------------
Franco...



Replies:
Posted By: almorel
Date Posted: 05/Mar/2010 at 15:36
Ottimo, promosso a
110.Franco !!!   (e lode)

Ciao
Alberto


Posted By: 65.franco
Date Posted: 05/Mar/2010 at 19:53

troppo generoso Alberto....  grazie 1000 .... diciamo che mi ci sono divertito un po', ma niente di speciale.

Invece una cosa che non ho provato è vedere se con un numero considerevole di records si hanno buone prestazioni. (non ho avuto tempo di verificarlo)

Tu puoi provare ad inserire nella demo una tabella con qualche centinaia di records e vedere il tempo che impiega nel costruire la SubForm? ... Oppure basterebbe duplicare per enne volte i records della tabella nazioni per esempio ... mi fai questo test di valutazione ? che ne dici ?

Invece come metodo che ti sembra ? cioè quello di crearsi la sub form da codice e mettere poi tutti i records da stampare in una tabella che poi viene passata al report per la stampa dell'etichette.... Questo è l'unico modo che mi è venuto in mente per evitare di inserire del codice sul report in formattazione per indicare allo stesso quante copie per ogni singola etichetta realizzare e quante etichette vuote deve saltare prima di stampare. Mi è capitato spesso che su formattazione del report, per ottenere quanto detto, access in anteprima si comporta in un modo e se vai in stampa si comporta in un altro modo. Specialmente quando il numero di copie si accavalla con il salto pagina fa un bel po' di casotto.
Che ne dici ?

Infine l'idea è quella di avere a disposizione un blocco di codice con due semplici form da poter inserire in un qualsiasi progetto senza doverle modificare e o adattarle più di tanto fatta eccezione all'aspetto grafico. Infatti , dopo aver copiato il codice, la form e la subform , è sufficiente richiamare una function con i due parametri da passare.... Tabella o Query e il Report da eseguire, e il gioco è fatto. Ho anche utilizzato il Dao al posto dell'Adodb (che abitualmente uso e al quale sono affezionato) per restare nello standard di access e non obblicare il programmatore a dover inserire nei riferimenti la libreria Adodb.

Grazie ancora,
Ciaooo



-------------
Franco...


Posted By: almorel
Date Posted: 05/Mar/2010 at 19:59
Ciao Franco,
al momento sono un pò incasinato, ma ... dammi un pò di tempo.
Ciao
Alberto


Posted By: 65.franco
Date Posted: 05/Mar/2010 at 20:10
Ok Alberto, no problem...
Ciaooo

-------------
Franco...


Posted By: Tommy_G
Date Posted: 05/Mar/2010 at 20:22
gran bel lavoro!!!! (come sempre del resto) 

P.S.
ho testato la demo con 80.000 record e i tempi di reazione sono sotto i 5 secondi


-------------
http://thetruster.altervista.org/index.php/documentazione/32-domande-intelligenti" rel="nofollow - http://thetruster.altervista.org/index.php/documentazione/32 -domande-intelligenti


Posted By: 65.franco
Date Posted: 05/Mar/2010 at 20:39

Grazie infinete Tommy... (sempre un grande sei)
ma tu pensi che sia di utilità tale demo ? nel senso puo' essere utile in vari contesti ?

Mi viene sempre il dubbio se sto proponendo delle banalità con le mie demo ...

Un salutone....



-------------
Franco...


Posted By: gregorio
Date Posted: 05/Mar/2010 at 22:18
Ciao Franco,
ti posso dire che Finson vende qualcosa che rassomiglia alla tua procedura ma non così completa e perfetta.
Pensa che se la vende vuol dire che non è puoi così banale.
Ma poi, è pur sempre una procedura da cui attingere tanta esperienza di codice.
Continua così che vai bene. Anzi no, benissimo.
Ciao.

Un saluto a Tommy che ogni tanto si fa vedere e ad Alberto che s'inc... sempre con un server che non lo fa scaricare.
Gregorio
Gregorio


-------------
Infogreg


Posted By: 65.franco
Date Posted: 05/Mar/2010 at 23:20

Ciao Greg...
se lo dici tu mi fido ...
Per Tommy e Alberto ... ho testato il caricamento della form/SubForm e l'anteprima del report etichette con 5.000 records e praticamente la risposta è pressochè immediata... direi che sia veramente ottimale.

Ma adesso dobbiamo festeggiare il traguardo delle 100
è un DemoAnniversario importante per gli irriducibile e professionisti del forum

Dobbiamo organizzare un DemoParty....  

Che ne dici ?

Grazie Greg...  ciaooo



-------------
Franco...


Posted By: almorel
Date Posted: 05/Mar/2010 at 23:25
Ciao Gregorio,
ma tu hai idea del perchè da quel maledetto sito non riesco a scaricare ?
Entro e dopo due secondi mi dice che il sito non c'è .....
... e poi devo sentire anche te...

Ciao a tutti e buona notte.
Alberto


Posted By: 65.franco
Date Posted: 05/Mar/2010 at 23:31

Ma che sito è  Alberto ?



-------------
Franco...


Posted By: almorel
Date Posted: 05/Mar/2010 at 23:35
OK, mi associo al demo party.
Antipasto di recordini alla pescatora, per primo forms.lette ai 4 forms!maggi, e reportini alla cacciatora per secondo, per dolce un Excel(ent) upload (detto anche tiramisù)
Chi pensa al vino ?
CIAO !


Posted By: almorel
Date Posted: 05/Mar/2010 at 23:38
Franco, è il www.filedropper.com che in realtà non ne vuole proprio sapere di droppare...



Posted By: 65.franco
Date Posted: 05/Mar/2010 at 23:51

Originally posted by almorel almorel wrote:

Franco, è il www.filedropper.com che in realtà non ne vuole proprio sapere di droppare...

Ma è a pagamento... tu sei sicuro di essere in pari con i versamenti ???  

.... da quello che ho visto puoi anche mettere una bella fornitura di funghi ...  o no ...
Ciaooo



-------------
Franco...


Posted By: almorel
Date Posted: 06/Mar/2010 at 00:01
Wy not ?
Il mondo è bello perchè è vario, ed in particolare il nostro.
Mai due casi uguali e se ne vedono
di tutti i colori


Good night


Posted By: 65.franco
Date Posted: 06/Mar/2010 at 00:03
é proprio vero Alberto...
Comunque ci contiamo sui preziosi porcini ... verrà fuori un bel DayDemoAnniversario...
Good night

-------------
Franco...


Posted By: Libeccio865
Date Posted: 06/Mar/2010 at 11:10
Come sempre...
Hai fatto un Ottimo lavoro..
saluti

Libeccio865...over

-------------


Se le cose sembrano andar meglio, c'è qualcosa di cui non stiamo tenendo conto.


Posted By: 65.franco
Date Posted: 06/Mar/2010 at 15:33
Sempre gentile Libeccio ...  grazie , ciaooo

-------------
Franco...


Posted By: gigia2
Date Posted: 14/Apr/2010 at 23:25
salve ho scaricato l'esempio postato
http://www.ialweb.it/forum/forum_posts.asp?TID=9176734&PN=1
(dire fenomenale è poco COMPLIMENTI!!) ,
ma non riesco ad adattarlo alle mie esigenze.
Ho fatto varie prove, tra cui quella di importare nel mio database tutti gli
elementi dell'esempio, tra cui oltre le tabelle anche moduli e maschefre,
ma non funge.
Come farlo funzionare e cosa modificare nel codice afficnhe funzioni con
il mio progetto?
Ho anche consultato l'esempio che gentilmente lautore dell'esempio ha
reso disponibile, molto dettagliato, ma per me che non sono esperta è
molto tecnico.
Grazie 1000 a chi mi da una mano e complimenti ancora


Posted By: 65.franco
Date Posted: 15/Apr/2010 at 00:38

Non mi chiamare "l'autore", chiamami Franco ....



-------------
Franco...


Posted By: 65.franco
Date Posted: 15/Apr/2010 at 01:10

Ciao, io sono l'autore....
(scherzo gigia..)

Che difficoltà hai avuto ?  il progetto è molto semplice e le operazioni che devi eseguire sono pochissime nel tuo mdb.

1) copia e incolla gli oggetti evidenziati nella documentazione, nel tuo progetto
2) la form di demo la puoi personalizzare togliendo i commenti da me inseriti e sistemarla a tuo piacimento
3) prepara la fonte di dati che devi riportare nell'etichette, una tabella, una query etc..
4) sulla base della fonte dati che hai preparato adesso costruisci il report etichette che desideri
5) passa adesso come paramentri alla function che ho illustrato la fonte dei dati che hai preparato di cui sopra e il nome del report da eseguire

A questo punto hai fatto tutto quello che occorre e non ti rimane altro che eseguire la stampa delle etichette.

Fammi sapere se hai bisogno di ulteriori spiegazioni....  Ciaooo

(ma non mi chiamare più "l'autore", chiamami Franco .... )



-------------
Franco...


Posted By: gigia2
Date Posted: 15/Apr/2010 at 15:11
ciao Franco grazie per la tua cortese disponibilità.
Allora, nel mio progetto ho importato le tabelle Tbl_contatti, Tbl_Nazione e , Qry_ContattiTo (ho importato anche le tabelle per provare un po nel mio progetto, poi le cambio e metto le mie tabelle), Frm_DemoStar, Frm_Etichette, SFm_Etichette, Rpt_MyContatti, Rpt_MyContattidaQry_ContattiTo,Rpt_MyNazioni, MyEtichetteReport.
Avvviando la maschera principale Frm_DemoStar e selezionando una della 3 opzioni mi si apre l'editor di VBA con errotre di compiazione Tipo definito dall'utente non definito.
Nello specifico mi viene segnalato
' CREATE TABLE FOR SELECT LABELS AND COPIES
Public Sub myLabelLoadSubForm(ByVal strTblSelect As String, ByVal strReportLabels As String) (EVIDENZIATO IN GIALLO)
Dim dbDbs As DAO.Database (SELEZIONATO)
Dim rstInp As DAO.Recordset
Dim ctl As Control
Dim fld As Field
Dim dbType As Variant
Dim i As Long

Non so piu che fare, eppure gli elementi sono pari pari ai tuoi. Se invece importo su un database vuoto funziona.
Inoltre io ho 3 tabelle ed 1 query da dove devo prendere dati ( tbl_utente1,tbl_utente2.tbl_utente3 ed infine qry_utente4).
Come collegare al tuo progetto?
Devo modificare il codice se si dove andare ad effettuare le modifiche?
Grazie e complementi ancora per il tuo operato SEI GRANDE!!!


Posted By: 65.franco
Date Posted: 15/Apr/2010 at 16:27
Controlla di aver copiato anche il modulo dove si trova il codice...
anche in questo caso fai il copia e incolla.

Altra cosa da controllare è quello di verificare nei riferimenti , nel vba, se ci sono librerie mancanti. In tal caso devono essere aggiunte... mi sembra strano che possa essere un problema di questo tipo in quanto ho cercato di utilizzare solo librerie standard in modo che l'utilizzatore non debba fare nulla di particolare per far funzionare il codice.

Per quanto riguarda la fonte dei dati da prelevare per costruire il recordset da inviare all'etichette, devi semplicemente fare come fai di solito , non ti cambia nulla....  nel caso specifico realizzerai una unica query che legge i dati dalle varie tabelle e query e questa rappresenterà il recordset del tuo report etichette.

Le funzioni che ho creato non richiedono interventi e quindi non è necessario modificare il codice vba da me costruito , ma solo utilizzarlo passando i parametri richiesti. Questo è il punto di forza del progetto. (si utilizzano gli oggetti messi a disposizione e non richiedono personalizzazionni e/o adattamenti)

Fammi sapere ...  ciaooo gigia

-------------
Franco...



Print Page | Close Window

Forum Software by Web Wiz Forums® version 10.17 - http://www.webwizforums.com
Copyright ©2001-2013 Web Wiz Ltd. - http://www.webwiz.co.uk