IALweb Homepage
Forum Home Forum Home > MS Office > Microsoft Office > Microsoft Access
  New Posts New Posts RSS Feed - Demo - Report Etichette (più copie per label e salta labels blank)
  FAQ FAQ  Forum Search   Events   Register Register  Login Login


REGISTRATEVI su IALWeb forum!

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

 Post Reply Post Reply Page  123>
Author
Message
65.franco View Drop Down
Utente Onorario
Utente Onorario
Avatar

Joined: 19/Apr/2009
Location: Italy
Status: Offline
Points: 4108
Direct Link To This Post Topic: Demo - Report Etichette (più copie per label e salta labels blank)
    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

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



Edited by 65.franco
Franco...
Back to Top
Sponsored Links


Back to Top
almorel View Drop Down
Veterano
Veterano
Avatar

Joined: 05/Set/2009
Location: Napoli
Status: Offline
Points: 1908
Direct Link To This Post Posted: 05/Mar/2010 at 15:36
Ottimo, promosso a
110.Franco !!!   (e lode)

Ciao
Alberto
Back to Top
65.franco View Drop Down
Utente Onorario
Utente Onorario
Avatar

Joined: 19/Apr/2009
Location: Italy
Status: Offline
Points: 4108
Direct Link To This Post 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...
Back to Top
almorel View Drop Down
Veterano
Veterano
Avatar

Joined: 05/Set/2009
Location: Napoli
Status: Offline
Points: 1908
Direct Link To This Post Posted: 05/Mar/2010 at 19:59
Ciao Franco,
al momento sono un pò incasinato, ma ... dammi un pò di tempo.
Ciao
Alberto
Back to Top
65.franco View Drop Down
Utente Onorario
Utente Onorario
Avatar

Joined: 19/Apr/2009
Location: Italy
Status: Offline
Points: 4108
Direct Link To This Post Posted: 05/Mar/2010 at 20:10
Ok Alberto, no problem...
Ciaooo
Franco...
Back to Top
Tommy_G View Drop Down
Veterano
Veterano
Avatar

Joined: 15/Mag/2007
Status: Offline
Points: 1470
Direct Link To This Post 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
Back to Top
65.franco View Drop Down
Utente Onorario
Utente Onorario
Avatar

Joined: 19/Apr/2009
Location: Italy
Status: Offline
Points: 4108
Direct Link To This Post 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...
Back to Top
gregorio View Drop Down
Utente Onorario
Utente Onorario
Avatar
Utente Onorario

Joined: 28/Apr/2008
Location: Italy
Status: Offline
Points: 2258
Direct Link To This Post 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
Back to Top
65.franco View Drop Down
Utente Onorario
Utente Onorario
Avatar

Joined: 19/Apr/2009
Location: Italy
Status: Offline
Points: 4108
Direct Link To This Post 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...
Back to Top
almorel View Drop Down
Veterano
Veterano
Avatar

Joined: 05/Set/2009
Location: Napoli
Status: Offline
Points: 1908
Direct Link To This Post 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
Back to Top
 Post Reply Post Reply Page  123>
  Share Topic   

Forum Jump Forum Permissions View Drop Down

Forum Software by Web Wiz Forums® version 10.17
Copyright ©2001-2013 Web Wiz Ltd.

This page was generated in 0,078 seconds.