Rapport afdrukken per record

Status
Niet open voor verdere reacties.
Bedoel je met je verhaal dat deze code het nog steeds niet doet bij jou? Heb hem net weer getest, en hij doet het prima...
Weliswaar met een handmatig toegevoegd email adres, want ik wil natuurlijk wel zien of-tie ook verzonden wordt! Heb nu ook verstuurd via de tabel, en dat werkt ook...
 
Laatst bewerkt:
Inderdaad,

Ik krijg hem gekgenoeg niet werkend.
Ik heb de code precies overgenomen maar misschien zie ik iets over het hoofd.

Gisteren had ik je hem al een e-mailgestuurd met bijlage met de vraag of je een blik wil werpen.
 
Laatst bewerkt:
Db is aangepast en opgestuurd. Volgens mij kan het draadje wel dicht...
 
OPLOSSING!

OctaFish heeft de database even onder de loep genomen:

Hierbij een werkende versie (dan wel zonder data erin) maar het is een goed voorbeeld, wat hier besproken is staat er ook in!

Met de opties kopieren en plakken zijn er waarschijnlijk een aantal regels verkeerd overgenomen, waar dit precies is gebeurt weten we niet, hier gaan we ook niet over in discusie hier.

Daarnaast stond de rijbron nog verkeerd, deze staat nu weer goed.

Zie de bijlage voor het eindvoorbeeld!

Bedankt Octafish :thumb:
 

Bijlagen

Laatst bewerkt:
Hoi,

Ik wil hier toch nog even op terugkomen vindt het niet nodig een nieuw topic te openen.
Tijdens het gebruik (zie bijlage vorige post) kwamen wij ergens achter dat:

Nadat de knop werkbon e-mail is gebruikt wordt er in de query van het rapport een kolom met criteria toegevoegd ([OpdrachtID]). Dit tot gevolg dat elke keer dezelfde raport geopend wordt (soms ook weer niet...). Verwijder ik de criteria elke keer handmatig is er niks aan de hand. Ik heb de filter al laten wissen bij het sluiten alleen de filter verdwijnt wel maar de criteria niet.

De knop afdruken werkbon zet hier geen criteria neer, ik heb (zolang de criteria niet bestaat) geen last van.

Ik hoop dat het een beetje helder is...

Groetjes,

Tim
 
Maak je het filter leeg met:

Me.Filter=""
Me.FilterOn=False
 
Ja dit staat al in het bij gebeurtenis sluiten.
(getest met de bijlage van 2 berichten terug).

De filter verdwijnt enkel de criteria blijft nog staan.
 
Laatst bewerkt:
Gebeurtenissen vinden altijd in een bepaalde volgorde plaats. Ik ben daar geen specialist in, maar het kan zijn, dat het filter niet meer kan worden aangepast omdat het rapport in technische zin al is gesloten. Je kunt dan bijvoorbeeld nog wel de FilterStatus aanpassen, maar niet meer het Filter. Je kunt dus eens experimenteren met ander Rapporteigenschappen; kijken of het filter wel verdwijnt als je Filter="" op een andere gebeurtenis zet.
 
Bedankt,

Je kan ook niet alles weten....
Achter dit was niet de oplossing.

Ik snap je code niet want de filter slaat hij niet op. de Query daar zet hij iets in en die slaat hij op.

maar ik heb het opgelost hier een lang stukje uitleg....

de code was dit:
Code:
Dim stDocName As String, sFilter As String, sEmail As String
Dim iRecord As String
Dim sBon As String

Private Sub WerkbonEmail_Click()
    Call cmdEmail
Exit Sub
End Sub

Private Sub cmdEmail()
    iRecord = Me.OpdrachtID.Value
    stDocName = "Afdrukken werkbon"
    Call RapportCode(stDocName, iRecord)

    sEmail = Me.CboTL.Column(1)
    sEmail = Replace(sEmail, "#", "")
    x = InStr(1, sEmail, ":")
    sEmail = Mid(sEmail, x + 1, Len(sEmail) - x)
    
    sTekst = "Hierbij werkbon " & iRecord
    
    Call SendEmail(stDocName, sEmail, iRecord, sTekst)
End Sub

Sub RapportCode(sRapport As String, sBon As String)
Dim tmp
    DoCmd.OpenReport sRapport, acViewDesign, , , acHidden
    sTabel = Reports(sRapport).RecordSource
    If InStr(1, UCase(sTabel), "WHERE") > 0 Then
        strSQL = Left(sTabel, InStr(1, sTabel, "WHERE ") - 1)
    Else
        If InStr(1, UCase(sTabel), "SELECT") = 0 Then
            If InStr(1, sTabel, " ") > 0 And InStr(1, sTabel, "[") = 0 Then
                sTabel = "[" & sTabel & "]"
            End If
            strSQL = "SELECT * FROM " & sTabel & " "
        Else
            strSQL = sTabel
        End If
    End If

    Do Until Right(strSQL, 1) <> ";"
        strSQL = Left(strSQL, Len(strSQL) - 1)
    Loop
    
    sFilter = " WHERE (OpdrachtID=" & sBon & ");"
    strSQL = strSQL & sFilter
    Reports(sRapport).RecordSource = strSQL
    DoCmd.Close acReport, sRapport, acSaveYes
End Sub

Sub SendEmail(Optional bijlage, Optional Email, Optional Bon, Optional Tekst)
    DoCmd.SendObject acSendReport, bijlage, "pdf", Email, , , "Werkbon " & Bon, Tekst, False
End Sub

Ik dacht ik haal eerst hidden eruit..... maar het formulier sloot al voordat ik op de knop accepteren moest klikken om de e-mailen te verzenden, vondt ik al vreemd.

Toen DoCmd.Close acReport, sRapport, acSaveYes op NO gezet, toen ging hij alles sturen.
Toen dit stukje verwijerd en handmatig gesloten, dit werkte wel.....

Vervolgens heb ik DoCmd.Close acReport, "naam", acSaveNO onder Sub Sendmail gezet... dit was de oplossing nu houd hij de criteria niet meer vast
Als je het rustig bekijkt is dit ook logisch ook.

Dus ik denk dat het probleem verholpen is....

De code is nu:
Code:
Option Compare Database

Dim stDocName As String, sFilter As String, sEmail As String
Dim iRecord As String
Dim sBon As String

Private Sub WerkbonEmail_Click()
    Call cmdEmail
Exit Sub
End Sub

Private Sub cmdEmail()
    iRecord = Me.OpdrachtID.Value
    stDocName = "Afdrukken werkbon"
    Call RapportCode(stDocName, iRecord)

    sEmail = Me.CboTL.Column(1)
    sEmail = Replace(sEmail, "#", "")
    x = InStr(1, sEmail, ":")
    sEmail = Mid(sEmail, x + 1, Len(sEmail) - x)
    
    sTekst = "Hierbij werkbon " & iRecord
    
    Call SendEmail(stDocName, sEmail, iRecord, sTekst)
End Sub

Sub RapportCode(sRapport As String, sBon As String)
Dim tmp
    DoCmd.OpenReport sRapport, acViewDesign
    sTabel = Reports(sRapport).RecordSource
    If InStr(1, UCase(sTabel), "WHERE") > 0 Then
        strSQL = Left(sTabel, InStr(1, sTabel, "WHERE ") - 1)
    Else
        If InStr(1, UCase(sTabel), "SELECT") = 0 Then
            If InStr(1, sTabel, " ") > 0 And InStr(1, sTabel, "[") = 0 Then
                sTabel = "[" & sTabel & "]"
            End If
            strSQL = "SELECT * FROM " & sTabel & " "
        Else
            strSQL = sTabel
        End If
    End If

    Do Until Right(strSQL, 1) <> ";"
        strSQL = Left(strSQL, Len(strSQL) - 1)
    Loop
    
    sFilter = " WHERE (OpdrachtID=" & sBon & ");"
    strSQL = strSQL & sFilter
    Reports(sRapport).RecordSource = strSQL
    
End Sub

Sub SendEmail(Optional bijlage, Optional Email, Optional Bon, Optional Tekst)
    DoCmd.SendObject acSendReport, bijlage, "pdf", Email, , , "Werkbon " & Bon, Tekst, False
   DoCmd.Close acReport, "afdrukken werkbon", acSaveNo
End Sub

Bedankt weer!!
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan