meerdere keren afdrukken van dezelfde records

Status
Niet open voor verdere reacties.

superhoi

Gebruiker
Lid geworden
5 dec 2003
Berichten
22
Ik heb hetvolgende probleem/gebrek aan kennis: Ik heb een tabel met bestellingen en daarin staat o.a. het klantnummer, het aantal producten en het aantal palletten waarop de bestelling staat.
Nu wil ik per pallet een etiket maken, dus als er in de tabel in kolom palletten 2 staat,dan moet er 2 keer een paletetiket uitrollen. Als de bestelling op 20 palletten staat moet er 20 x een etiket uitrollen met de informatie, enz..
Ik weet wel hoe ik zo'n etiket/rapport moet maken, maar hoe zorg ik ervoor dat gegevens van recordA 2x afgedrukt word en van recordB 20x. Ik zou ze wel allemaal in 1x (per dag bijvoorbeeld) willen laten afdrukken.

Ook zou ik willen laten afdrukken pallet 1 van 20, pallet 2 van 20 enz. enz..

Ik hoop dat mijn vraag zo duidelijk is en graag hoor ik van jullie hoe dit moet/kan.:thumb:
 
druk 20 keer op CTRL + P :)
grapje...

via een knop op je form waar de code die erachter zit:
Code:
Private Sub Knop34_Click()
On Error GoTo Err_Knop34_Click

    Dim Var As String

 Var= Forms!Formnaam!veldnaam#etiketten

DoCmd.SelectObject acReport, "Raportnaam", True

DoCmd.PrintOut , , , , Var
Exit_Knop34_Click:
    Exit Sub

Err_Knop34_Click:
    MsgBox Err.Description
    Resume Exit_Knop34_Click
    
End Sub

Dit zou het eerste gedeelte al oplossen: de Var zoekt het aantal etiketten op in je form/veld, envult dit in bij de Printout command.
DE 1/20,2/20 op je etiket moet ik je even schuldig blijven, alhoewel ik denk met een DMax +1 functie ergens op je rapport zou moeten werken.
 
Bedankt voor je antwoord!

De docmd.printout had ik hier op t forum al gevonden. Hiermee kun je 1 rapport 20 x afdrukken, echter de bedoeling is dat ik per leverdag de bestellingen afdruk. Dus (met 1 knop bijv) alle palletten die die dag klaargezet moeten worden achter elkaar, in 1 rapport en dat afdrukken. Ik denk zalf dat ik een query moet maken die uit de tabel bestellingen de records verschillende keren ophaalt oid.

Graag je reactie.
 
Ik denk niet dat je een extra query nodig hebt. Op je formulier heb je het aantal Pallets al staan, dus dat getal heb je. I.p.v. één printopdracht met 20 exemplaren, kun je beter een loop maken die net zo vaak loopt als het aantal in het veld pallet. Dus iets als:
Code:
iPal=Me.Pallets
For i = 1 to iPal
     DoCmd.PrintOut 
Next i
Wil je ook nog 1/20, 2/20 etc. dan vermoed ik dat je in de query die je voor het rapport gebruikt moet verwijzen naar je formulier. Op je formulier zou je dan een extra veld moeten maken waar je de waarde van i steeds in zet. Pallets heb je al. In je voettekst maak je dus een formule waarin je de twee tekstvelden uit je openstaande formulier combineert tot de string die je wilt hebben.
Draai je het rapport uit als het formulier niet is geopend, dan krijg je uiteraard foutmeldingen, dus die moet je dan wel afvangen.
Of, de voettekst 'hard' in het rapport zetten, door het rapport in hidden modus te openen, de voettekst er in te zetten en weer op te slaan. Dat is iets meer werk, en werkt wat langzamer omdat je voor elke afdrukopdracht het rapport opnieuw moet openen. Voordeel is wel weer dat je het rapport altijd kunt afdrukken zonder foutmeldingen er op.
 
Ah bedankt octafish:thumb:

Hier ga ik mee aan t worstelen, nog 1 vraagje, kun je hiermee dan ook verschillende records (=bestellingen) tegelijk afdrukken met een selectie? Dus: bestelling A voor maandag staat op 2 pallets, 2x afdrukken en bestelling B ook maandag op 20 palletten, 20x afdrukken, bestelling C enz, enz met 1 druk op de knop alle palet etiketten van bestellingen voor maandag afdrukken.

Of moet ik dan voor elke bestelling op de knop drukken weer opnieuw het rapport laden enz. enz. Dit is redelijk lastig bij een dag van 30 bestellingen.:eek:
 
Je krijgt dan een dubbele loop: de eerste loop loopt door alle bestellingen heen, de tweede door het aantal etiketten. Zo hou je dus één knop, waar je maar één keer op hoeft te klikken.
 
Ok het werkt voor 1e deel:D dit is de code:

Code:
Private Sub paletiketten_Click()

On Error GoTo Err_paletiketten_Click


begindatump = MakeUSDate([Forms]![bestellingen]![begindatum])
einddatump = MakeUSDate([Forms]![bestellingen]![einddatum])

strsql = "SELECT * FROM [bestellingen] WHERE ([leverdag] Between " & begindatump & " And " & einddatump & ")"
    
With CurrentDb.OpenRecordset(strsql)
     If .RecordCount > 0 Then
        .MoveFirst
        Do Until .EOF
        iPal = .Fields("pal").Value
        For i = 1 To iPal
            DoCmd.OpenReport "palletiketten", acViewNormal, "datum", "([palletiketten]![id] = " & .Fields("id").Value & ")", acNormal
        Next i
        .MoveNext
        Loop
    Else
    MsgBox "niets gevonden" & strsql
     End If
     .Close
End With

Exit_paletiketten_Click:
    Exit Sub

Err_paletiketten_Click:
    MsgBox Err.Description
    Resume Exit_paletiketten_Click
    
End Sub

Nu moet ik die i nog in mijn raport kunnen plaatsen als pallet 1 van 20 of 2 van 20, iemand een idee? de code loopt in het formulier, moet ik dan daar die i zetten en dan naar het rapport??
 
Die tip heb ik je al gegeven. Probeer dat dus eerst eens, zou ik zeggen!
 
Een aantal malen eenzelfde rapport afdrukken is een wat amateuristische werkwijze.
Beter kun je in dit soort gevallen werken met de mogelijkheden die een rapport biedt.
Kijk eens naar het bijgevoegde voorbeeld, wellicht kun je hierop verder 'borduren'.
 

Bijlagen

  • dbPal.zip
    12,9 KB · Weergaven: 90
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan