Gemaakte formulier kan niet individueel verzonden worden.

Status
Niet open voor verdere reacties.

gangstalaz

Gebruiker
Lid geworden
13 sep 2010
Berichten
131
Hallo,

Ik heb een formulier waar ik een keuzelijst met invoervak heb. Hier kan ik een keuze maken uit artikelen van verschillende leveranciers. Nadat ik me keuze heb gemaakt (uit de keuzelijst met invoervak), wil ik alleen het formulier "leveranciers" naar dat bedrijf opsturen per mail. Zie bijlage.
Als ik op het knopje "verzenden" klik (rechtsonder), wordt het hele rapport verstuurt(van 291 pagina's) waar ALLE artikelen van verschillende leveranciers instaan. Ik weet dat hier een verwijzing naar het rapport is. Hoe kan ik het formulier individueel versturen dan?

Alvast bedankt!
 

Bijlagen

  • formulier.JPG
    formulier.JPG
    54,1 KB · Weergaven: 42
Laatst bewerkt:
Je zult, voordat je het rapport kunt mailen, een filter op het rapport moeten zetten met de ID van de huidige leverancier. Een (enigszins ingewikkelde, maar wel foolproof) methode is deze:

Code:
Private Sub cmdMailRapport_Click()
Dim strSQL As String, strSQL_Rapport As String
Dim sFilter as String,  sTabel as String, sKlantNr as String
Dim x As Integer
strSQL = "SELECT * FROM qRapport"
sRapport = "rptPeriodiek"
DoCmd.Echo False, "Bezig met openen van recordset."
With CurrentDb.OpenRecordset(strSQL)
 'Records doorlopen, en rapport voor elk record instellen en mailen
 iAantal = .RecordCount
 If iAantal > 0 Then
  x=x+1
  sKlantNr=rst.Fields("KlantID").Value
  DoCmd.Echo False, "Samenvoegen van Record " & x & " van " & iAantal & " records..."
  DoCmd.OpenReport sRapport, acViewDesign, , , acHidden
  sTabel = Reports(sRapport).RecordSource
  If InStr(1, UCase(sTabel), "WHERE") > 0 Then
   strSQL_Rapport = 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_Rapport = "SELECT * FROM " & sTabel & " "
   Else
    strSQL_Rapport = sTabel
   End If
  End If
  'Extra loopje, om de punt-komma's te verwijderen.
  Do Until Right(strSQL_Rapport, 1) <> ";"
   strSQL = Left(strSQL_Rapport, Len(strSQL_Rapport) - 1)
  Loop
  'Klantfilter op rapport zetten
  sFilter = " WHERE (KlantID=" & sKlantNr & ");"
  strSQL_Rapport = strSQL_Rapport & sFilter
 ''tmp = InputBox("", "", strSQL)
  Reports(sRapport).RecordSource = strSQL_Rapport
  DoCmd.Close acReport, sRapport, acSaveYes
  DoCmd.SendObject acSendReport, sRapport, acFormatPDF, "[EMAIL="mailadres@mail.com"]mailadres@mail.com[/EMAIL]", , , "Subject", "Message", False
  .MoveNext
 End If
 .Close
End With
DoCmd.Echo True
End Sub
Hierbij wordt het rapport eerst geopend in de Design view, en wordt de bron van het rapport ingesteld op (in het voorbeeld) een KlantID. Daarna wordt het rapport gesloten en bewaard. Als laatste wordt het rapport gemaild naar het mailadres, dat je eventueel ook uit het formulier kunt halen, of met een DLookup kunt opzoeken in de tabel met leveranciersgegevens.
 
Hoe kan ik een filter op het rapport zetten met de ID van de huidige leverancier?
 
De code uit het voorbeeld moet uiteraard nog wel een beetje aangepast worden. Het LeveranciersID zal als het goed is een (tekst)veld op je formulier zijn, en ook als veld in je rapport zitten. Hoe dat heet weet ik uiteraard niet. Net zoals je de bron van het rapport moet aanpassen. In mijn voorbeeld is het rapport gebaseerd op een query qRapport (logische naam, niet?) Heet-ie bij jou anders, moet je dat uiteraard ook aanpassen. Kortom: controleer in de code waar er naar velden wordt verwezen, en pas die namen aan.
Kom je er niet uit, kun je ook een dummyversie van de db posten, dan pas ik ze wel naar jouw situatie aan.
 
De code uit het voorbeeld moet uiteraard nog wel een beetje aangepast worden. Het LeveranciersID zal als het goed is een (tekst)veld op je formulier zijn, en ook als veld in je rapport zitten. Hoe dat heet weet ik uiteraard niet. Net zoals je de bron van het rapport moet aanpassen. In mijn voorbeeld is het rapport gebaseerd op een query qRapport (logische naam, niet?) Heet-ie bij jou anders, moet je dat uiteraard ook aanpassen. Kortom: controleer in de code waar er naar velden wordt verwezen, en pas die namen aan.
Kom je er niet uit, kun je ook een dummyversie van de db posten, dan pas ik ze wel naar jouw situatie aan.

pfff de mensen hier willen nu een ander rapport gebruiken. Het rapport is al opgesteld alleen er moet een verwijzing vanuit het formulier gedaan worden en deze rapport moet dan verzonden en geprint kunnen worden per mail. Wat jij daar verteld heb krijg ik niet voormekaar.
Hoe kan ik de db in dummyversie opslaan dan? Want ik maar er een gecomprimeerd map van. Dan is het nog steeds niet minder dan 7 mb. Herstellen staat er bij jullie voorbeelden. Hoe doe ik dat dan? Kan hem niet kleiner maken.
of ik moet er allemaal 100kb mappen van maken. Maar dan ben ik er ook super lang mee bezig.
 
Om te beginnen kun je de db Comprimeren en Herstellen, daar wordt-ie vaak al een heel stuk kleiner van. Dan zippen, en kijken of je in de buurt van de 3-4 bestanden max komt.
Als dat niet voldoende is, dan maak je, als je nog niet vanuit een kopie werkt, eerst een kopie van de db, en gooi je uit de grootste tabellen zoveel records, dat er een stuk of 20 overblijven. Meestal is dat wel genoeg om mee te werken, en de db fatsoenlijk in grootte te houden. Ook kun je nog kijken of er ingesloten afbeeldingen inzitten, die je er uit zou kunnen halen.
 
Om te beginnen kun je de db Comprimeren en Herstellen, daar wordt-ie vaak al een heel stuk kleiner van. Dan zippen, en kijken of je in de buurt van de 3-4 bestanden max komt.
Als dat niet voldoende is, dan maak je, als je nog niet vanuit een kopie werkt, eerst een kopie van de db, en gooi je uit de grootste tabellen zoveel records, dat er een stuk of 20 overblijven. Meestal is dat wel genoeg om mee te werken, en de db fatsoenlijk in grootte te houden. Ook kun je nog kijken of er ingesloten afbeeldingen inzitten, die je er uit zou kunnen halen.

Nou ik heb de db gecomprimeerd en hierdoor is tie van 75mb naar 7,5mb gegaan. Ik heb ook nog is alle tabellen en rapporten verwijdert die niet nodig zijn. Maar hierdoor verandert de grootte van de db helemaal niet.

Is het niet mogelijk om de db per mail te verzenden? Ik krijg het maar niet kleiner.
 
Mag je 'm sturen naar octafish @ live.nl... Kijk ik er vanavond wel even naar!
 
Heb 'm ontvangen; zal er vandaag en dit weekend eens rustig naar kijken.
 
Eerste blik is geworpen, en ik ben daar eerlijk gezegd wel een beetje van geschrokken.... Wat ik al vermoedde uit het eerst plaatje dat je hebt gepost: de database is helemaal niet genormaliseerd. Je gebruikt de tabellen verkeerd of toch in ieder geval voor de verkeerde doeleinden, want je slaat naar mijn idee verkeerde gegevens op in de verkeerde tabellen. Omdat je geen stamtabellen gebruikt, maar elk item steeds opnieuw invoert, heb je veel dubbele gegevens, die steeds met een andere naam worden opgeslagen, maar naar mijn gevoel wel steeds hetzelfde zijn. Zo maar wat voorbeelden uit de tabel Artikels:

IDWERKN WERKNEMER
1 001
1 BELLETER
24 HEBING
HEBING
INLENER LASSER MARTINA
INLENER MARTINA
MARTINA
MARTINA INLENER
49 P V D HEIJDEN
49 P V D HEYDEN
P.WEZENBEEK
45 PWEZENBEEK
32 UITEWILLEGEM
32 UITEWILLEGEN
32 UITEWILLIGEN
49 V D HEIJDEN
49 V D HEYDEN
23 V D MEIJDEN
23 V D MEYDEN
23 V D MRYDEN
49 V.D.HEIJDEN
49 V.D.HEYDEN
34 V.OSTAIJEN
34 V.OSTAYEN

Voor de tabel Leveranciers geldt hetzelfde:
Leverancier
XXX
XXX - Harderwijk
XXX Harderwijk
XXX-Harderwijk
XXX-Hardewijk

Eén voorbeeldje van een bedrijfsnaam die op 5 verschillende manieren is opgeslagen in een (verkeerde) tabel. Kortom: als je een rapport wilt versturen naar klant XXX, dan zal maar voor één klantnaam tegelijk het rapport kunnen worden aangemaakt, de andere records zul je opnieuw moeten maken en versturen. En dit voorbeeldje staat niet alleen: gemiddeld heb je per bedrijf ongeveer 3 verschillende manieren van noteren.

De eerste klus is dus: het normaliseren van de database. Dat houdt als eerste stap in: maak aparte tabellen voor je werknemers, en je Leveranciers. Sla elke leverancier, en elke werknemer maar één keer op in die tabel. Heb je voor een bedrijf meerdere contactpersonen, dan zou je voor die contactpersonen ook een aparte tabel moeten maken, waarin je het BedrijfsID opneemt van het bedrijf waarvoor ze werken, en de specifieke contactpersoongegevens. Nu heb je de contactpersonen ook in de tabel Leveranciers staan, waarbij je nu de situatie krijgt dat niet alleen de bedrijfsnamen op verschillende manieren worden gespeld, maar ook nog eens de namen van de contactpersonen. Dat ziet er dan zo uit:

Leverancier Contactpersoon
XXX
XXX R. Thielen
XXX Rene thiele
XXX Rene Thielen
XXX Rene Thielen(##########)
XXX Theo / Rene

Ik heb hier voor het gemak de records laten zien van een leverancier waarvan de naam op één manier wordt gespeld (wat op zich wel klopt) maar waarvoor de cp dus op 5 verschillende manieren is ingevuld. Je kunt je voorstellen dat de lijst nog veel groter wordt als je daar de incorrect gespelde leveranciersnamen aan toevoegt. In Dit voorbeeld zou je dan ook nog records zien voor de incorrect gespelde bedrijfsnaam + de correct gespelde CP naam, en de incorrect gespelde bedrijfsnaam + de incorrect gespelde CP naam...

In de ideale situatie heb je voor dit voorbeeld één record voor de bedrijfsgegevens, en twee records voor de contactpersonen (R Tielen en Theo).
Hopelijk snap je een beetje wat ik probeer uit te leggen?
 
Laatst bewerkt:
bedankt voor je tips! ik begrijp je volgens mij ook..
als stagiair ben ik hier komen werken en ik moet niet te lang stilstaan bij een onderdeel. Der zijn nog andere opdrachten die gedaan moeten worden. Dus ik ben wel bereid om de namen de corrigeren. Maar ikga daar niet veel aandacht aan besteden. Naar mijn vermoeden kan het ook zo werken.
Ik kijk alleen naar het onderdeel "leverancier". Dus nu moet ik nog alleen bestellingen kunnen opslaan (voor een wekelijkse rapportage aan bedrijfsleider), printen en het formulier (bestelling) per mail kunnen verzenden.
 
Laatst bewerkt:
Het aanpassen van de namen van de tabellen zal het probleem niet oplossen; hooguit erger maken. Er zijn een hoop formulieren en rapporten, die misschien wel gebaseerd zijn op de huidige namen, en als je die wijzigt, zou het zo maar kunnen dat ze het niet meer doen. Bovendien lost een andere naam voor een tabel uiteraard niks op. Wat je nog wel zou kunnen doen:
  • De leveranciers uit de tabel Leveranciers kopiëren naar een nieuwe tabel met een unieke LeverancierID
  • De artikelen uit de tabel Leveranciers kopiëren naar een nieuwe tabel met een unieke ArtikelID
  • De medewerkers uit de tabel Artikels kopiëren naar een nieuwe tabel met een unieke MedewerkerID
  • In de tabellen Leveranciers de velden ArtikelID en LeverancierID toevoegen, en vullen met de gegevens uit de nieuwe tabellen.
  • Op het formulier Leveranciers keuzevelden maken op basis van de tabellen tLeveranciers en tArtikelen, zodat je geen foutieve leveranciersgegevens meer kunt toevoegen
De rapporten kun je vervolgens baseren op de juiste gegevens (LeverancierID), zodat je nu wel goed kunt groeperen. Met de huidige opzet is het volkomen onmogelijk om betrouwbare rapporten te maken op basis van de gegevens Leverancier en Artikel.
Kortom: alvast veel succes ermee!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan