Stampa doppia di etichette numerate

di il
11 risposte

Stampa doppia di etichette numerate

Buongiorno a tutti, 

ho un db impiegato per la registrazione dei materiali in arrivo: ogni lotto viene registrato in una form tabellare assieme ad altre informazioni, tra cui il nr di colli ricevuti (normalmente bancali), che può andare da 1 a n, n che corrisponde al nr di etichette stampate

Per soddisfare un requisito del ns. controllo qualità, dobbiamo effettuare un campionamento ogni tot colli in base alle specifiche del materiale ( variabile intLblNr)

Ho risolto aggiungendo una routine nel corpo del report che in base alla frequenza di prelievo calcola su quali quanto evidenziare o meno la label lblPickSample (“prelevare da questo collo”)

Nel codice che ho postato potete vedere le varie  casistiche: da un prelievo solo a prelievo su tutti i colli (case Else)

Ora, vorrei se possibile, fare in modo che le etichette “di prelievo” vengano stampate due volte. Ho provato a fare qualche prova aggiungendo un altro ciclo contatore  ma non ne vengo fuori.. 

Oppure posso dividere la stampa in due job? il primo stampa tutte le etichette come ora, il secondo solo quelle doppie “di prelievo”

qualche idea di approccio possibile?

Grazie 

Private Sub Corpo_Print(Cancel As Integer)

Dim intRMPrnFreq, intLblNr as integer 

intRMPrnFreq = CInt(intLblNr / 2) - 1
Select Case intRMSamplFreq

Case 1                                      '1 prelievo
    Me.txNrCollo = intCount
  
  If intCount = intRMPrnFreq Then
    Me.lblPickSample.visible = True
        Else
    Me.lblPickSample.visible = False
     End If
    
Case 2                                      '2 prelievi inizio e fine
    Me.txNrCollo = intCount
    If intCount = 1 _
    Or intCount = intLblNr Then
    
    Me.lblPickSample.visible = True
        Else
    Me.lblPickSample.visible = False
     End If
     

Case 3                                      '3 prelievi inizio, metà e fine
    Me.txNrCollo = intCount
    If intCount = 1 _
    Or intCount = intLblNr _
    Or intCount = intRMPrnFreq Then
    
    Me.lblPickSample.visible = True
        Else
    Me.lblPickSample.visible = False
     End If


Case 4                                      '5 prelievi inizio, 1/4-1/2-3/4 e fine
    Me.txNrCollo = intCount
    If intCount = 1 _
    Or intCount = intLblNr _
    Or intCount = CInt((intLblNr / 5) * 1) _
    Or intCount = CInt((intLblNr / 5) * 2) _
    Or intCount = CInt((intLblNr / 5) * 3) _
    Or intCount = CInt((intLblNr / 5) * 4) Then
    
    Me.lblPickSample.visible = True
        Else
    Me.lblPickSample.visible = False
     End If
     
    
Case Else
    Me.txNrCollo = intCount
    Me.lblPickSample.visible = True

End Select

If intCount < intLblNr Then Me.NextRecord = False
   intCount = intCount + 1

End Sub

11 Risposte

  • Re: Stampa doppia di etichette numerate

    Visto che gestisci il nr di colli ricevuti (normalmente bancali), con un numero che può andare da 1 a n, ove n che corrisponde al nr di etichette da stampare, per fare in modo che le etichette “di prelievo” vengano stampate due volte (o più volte in base a n come loro numero) puoi semplicemente effettuare un ciclo FOR da 1 a n (impiegando, ad esempio una variabile i) al fine di stampare le etichette in base alla condizione
    nr di colli ricevuti >= i (valore del ciclo)
    Per cui ad esempio se devi stampare le etichette da 1 a 3 la prima volta verranno stampate le etichetta (con valore 1, 2 e 3) Incrementato il ciclo FOR verranno stampare le etichette da 2 a 3 ed infine nell'ulteriore ciclo quelle con 3.
    In tal modo avrai il primo gruppo di etichette (estratti con valore 1,2,3) poi con 2 e 3 ed infine 3 che corrispondono al numero di copie volute, (quindi copia singola, doppia e tripla).

  • Re: Stampa doppia di etichette numerate

    Grazie Willy55 per il tuo suggerimento, ma non ho ben chiaro dove applicarlo: ovvero il mio codice lavora sul corpo del report, il ciclo for 1 a n che suggerisci devo integrarlo invece nella routine che lancia l'apertura del report?

    In pratica devo ciclare  n volte il comando docmd.openreport?

    grazie per un chiarimento.

    Public Function fPrintLbl()
    On Error GoTo Err_fPrintLbl
     
     Dim stDocName1 As String, stWhere1 As String
     
    
    
    stDocName1 = "RptLabelDeliv"
    stWhere1 = "[IDRMDElivery]=" & frm![IDRMDelivery]
     
    
    DoCmd.OpenReport stDocName1, acViewNormal, , stWhere1 'stampa direttamente
     
    Exit_fPrintLbl:
        Exit Function
    
    Err_fPrintLbl:
        MsgBox Err.description
        Resume Exit_fPrintLbl
    
    End Function 
  • Re: Stampa doppia di etichette numerate

    Devi ciclare  su DoCmd.OpenReport  fornendo la WhereCondition da 1 a n in base al valore del numero colli delle etichette da stampare. 

  • Re: Stampa doppia di etichette numerate

    29/04/2023 - willy55 ha scritto:


    Devi ciclare  su DoCmd.OpenReport  fornendo la WhereCondition da 1 a n in base al valore del numero colli delle etichette da stampare. 

    Ciao Willy55, ci ho provato in diversi modi ma ottengo sempre la stampa di tutti i nr di collo , non solo quelli di prelievo..

    ecco il codice che ho usato, puoi cortesemente aiutarmi a capire dove sbaglio?

    Grazie

     Public Function fPrintLbl()
     On Error GoTo Err_fPrintLbl
     
     Dim stDocName1 As String, stWhere1 As String
     
    
    stDocName1 = "RptLabelDeliv"
        
    stWhere1 = "[IDRMDelivery]=" & frm![IDRMDelivery]
     
    intRMPrnFreq = CInt(intLblNr / 2) - 1
     
     
     For I = 1 To intLblNr Step (intRMPrnFreq)
       
     DoCmd.OpenReport stDocName1, acViewNormal, , stWhere1 'stampa direttamente
      
     Next
     
    
    Exit_fPrintLbl:
        Exit Function
    
    Err_fPrintLbl:
        MsgBox Err.description
        Resume Exit_fPrintLbl
    
  • Re: Stampa doppia di etichette numerate

    Assegni la condizione Where-Condition prima del ciclo FOR;  mentre la devi impostare nel ciclo e deve soddisfare anche la condizione (in AND) ove il valore del numero colli delle etichette da stampare sia maggiore o uguale alla variabile I del ciclo FOR.

  • Re: Stampa doppia di etichette numerate

    02/05/2023 - willy55 ha scritto:


    Assegni la condizione Where-Condition prima del ciclo FOR;  mentre la devi impostare nel ciclo e deve soddisfare anche la condizione (in AND) ove il valore del numero colli delle etichette da stampare sia maggiore o uguale alla variabile I del ciclo FOR.

    Ciao Willy55, grazie per la risposta. 

    Ho fatto delle prove e onestamente non ne vengo fuori: non riesco a capire la sintassi da utilizzare..

    Cortesemente sapresti farmi un esempio? grazie

  • Re: Stampa doppia di etichette numerate

    Caio,

    una domanda se posso… ma il report consiste in una unica etichetta da stampare di volta in volta ?

    Nel senso, il report che mandi in esecuzione contiene sempre solo una etichetta da stampare ?

  • Re: Stampa doppia di etichette numerate

    05/05/2023 - By65Franco ha scritto:


    Caio,

    una domanda se posso… ma il report consiste in una unica etichetta da stampare di volta in volta ?

    Nel senso, il report che mandi in esecuzione contiene sempre solo una etichetta da stampare ?

    Ciao, 

    si il report contiene una sola etichetta che viene stampata n volte.

    grazie

  • Re: Stampa doppia di etichette numerate

    Capito….

    io per le etichette usavo un sistema diverso…  creavo una tabella temporanea dove il recordset conteneva tutte le etichette da stampare in una certa circostanza e aggiungevo un campo al recordset per indicare il numero di copie per ogni etichetta…. di default impostavo 1 e poi, aprendo in anteprima il recordset in una form, andavo a modificare il numero di etichette da stampare per ogni record se mi interessava averne più copie per talune.

    Per esempio: quando venivano modificati i prezzi dei prodotti e/o venivano contrassegnati dei prodotti da ristampare l'etichetta, in un qualsiasi momento della giornata (o all'occorrenza) si avviava la stampa etichette per variazioni di prezzi.  La funzione reperiva i record contrassegnati per la stampa e con questi alimentavo una tabella temporanea dove aggiungevo un campo numerico per indicare il numero di copie di etichette da stampare …. 1 copia per etichetta per default e su necessità per talune si poteva inserire una quantità diversa o eliminarne una da non stampare.
    Confermata l'anteprima passavo alla stampa alimentando il report … etc.. etc.. Alla fine della stampa se tutto era andato a buon fine, si chiudeva la form di anteprima records da stampare e rileggendo la tabella temporanea andavo a sflaggare nella tabella prezzi prodotti il contrassegno di richiesta stampa etichetta. Come ultima cosa, se tutto andato a buon fine, la funzione eliminava la tabella temporanea utilizzata per tale scopo.

    Non so se nel tuo caso una progettazione del genere può darti benefici o meno, era solo per darti uno spunto.

  • Re: Stampa doppia di etichette numerate

    05/05/2023 - By65Franco ha scritto:


    Capito….

    io per le etichette usavo un sistema diverso…  creavo una tabella temporanea dove il recordset conteneva tutte le etichette da stampare in una certa circostanza e aggiungevo un campo al recordset per indicare il numero di copie per ogni etichetta…. di default impostavo 1 e poi, aprendo in anteprima il recordset in una form, andavo a modificare il numero di etichette da stampare per ogni record se mi interessava averne più copie per talune.

    Per esempio: quando venivano modificati i prezzi dei prodotti e/o venivano contrassegnati dei prodotti da ristampare l'etichetta, in un qualsiasi momento della giornata (o all'occorrenza) si avviava la stampa etichette per variazioni di prezzi.  La funzione reperiva i record contrassegnati per la stampa e con questi alimentavo una tabella temporanea dove aggiungevo un campo numerico per indicare il numero di copie di etichette da stampare …. 1 copia per etichetta per default e su necessità per talune si poteva inserire una quantità diversa o eliminarne una da non stampare.
    Confermata l'anteprima passavo alla stampa alimentando il report … etc.. etc.. Alla fine della stampa se tutto era andato a buon fine, si chiudeva la form di anteprima records da stampare e rileggendo la tabella temporanea andavo a sflaggare nella tabella prezzi prodotti il contrassegno di richiesta stampa etichetta. Come ultima cosa, se tutto andato a buon fine, la funzione eliminava la tabella temporanea utilizzata per tale scopo.

    Non so se nel tuo caso una progettazione del genere può darti benefici o meno, era solo per darti uno spunto.

    Grazie By65Franco per il tuo suggerimento, probabilmente non ho compreso bene, ma non  credo non soddisfi la mia richiesta.

    Mi spiego meglio, nel mio caso l'articolo da stampare è uno ([IDRMDelivery]) ma devo poter ottenere:

    1. Stampa di tutte le etichette con il nr. progressivo: es. 30 colli =  30 etichette numerate  da 1 a 30 (e su questo punto nessun problema)
    2. Stampa di etichette “speciali” in base al numero progressivo, es. 30 colli  = 3 etichette numerate con 1, 15 e 30

    Mi andrebbe anche bene se venissero stampate le etichette “speciali” come doppione dell'etichetta normale es. 30 colli  = 1 +1s; 2;3… 15+15s; 16… 30;30s   

     ( l'etichetta speciale ha solo una label nascosta in più, ma l'oggetto report è lo stesso della normale) 

    Grazie, 

    Marco

  • Re: Stampa doppia di etichette numerate

    Hangart,
    come ti ho indicato la tabella da cui stampi le etichette deve avere un campo che contenga il numero delle copie che devi produrre (ad esempio denominato "Nr_Copie")
    Riprendendo l'ultimo tuo post, gli articoli 1,15, 30 avranno il campo "Nr_Copie" con valore 2 tutti gli altri con valore 1.
    Quando vai a stampare le etichette in un ciclo FOR I da 1 a 2 devi costruire tale condizione ("Nr_Copie >=" & I nella WhereCondition) in modo che stampi prima le 30 etichette (in quanto il primo ciclo avremo Nr_Copie >=1 quindi stamperà i 27 record con Nr_Copie =1 ed i 3 ove Nr_Copie =2 al secondo ciclo Nr_Copie >=2 stamperà solo i 3 record ove Nr_Copie  =2

    Ti indico una funzione che svolge tale compito, che dovrai adattare alle tue esigenze.

    Public Function StampaEtichette()
    stDocName1 = "RptLabelDeliv"
    For I = 1 To 2
       stWhere1 = "Nr_Copie >=" & I
       DoCmd.OpenReport stDocName1, acViewNormal, , stWhere1 ' stampa direttamente
    Next I
    End Function
Devi accedere o registrarti per scrivere nel forum
11 risposte