Oprettet man. d. 08. juni 2009 kl. 13:39:05

bmads
bmads (18.015 point. Point ude: 360)

Masseproduktion af PDF-filer

Jeg har nogle rapporter i min O2007-database, der skal masseproduceres til PDF-filer med ganske små ændringer.

Hver rapport skal ende med at blive til omkring 1.000 PDF-filer, der hver især er ændret på et eller flere kriterier.

Mine kriterier er gemt i en separat tabel.

Jeg kan danne ét langt dokument, hvor der er sideskift for hver ny værdi i kriteriet, men mit ønsker er et nyt dokument, for hver ny værdi.

Mit bedste bud har hidtil været en fancy makro, men min fantasi rækker ikke mere, og jeg er "gået død" i min efterforskning efter nye muligheder.

Er der hjælp at hente derude?

Skrevet man. d. 08. juni 2009 kl. 14:14:00| #1

Først må jeg lige sige, at jeg ikke kender access 2007 og dermed dens eventuelle pdf færdigheder.

Men, jeg ville ikke løse den opgave i ms-access - altså raportgenereringen

Fint nok, med access database og datafangst, men der printerdims der har fået sit faneblad - thumbs down!

Jeg har selv tænkt på noget bedre, men har ikke haft tid til at chekke det ud: iText og java over odbc.

Skrevet man. d. 08. juni 2009 kl. 19:51:29| #2

bmads
bmads (18.015 point)
Tak for indlægget, men jeg er lidt bundet af Access, da det er der, dataene ligger.

Så indtil videre er det den vej, jeg vil forsøge at finde en løsning.

Hvis du har en ide til en kombination, hvor de "flade data" fra Access kan viderebehandles på anden måde, er jeg meget lydhør.

Skrevet man. d. 08. juni 2009 kl. 21:25:32| #3

Nej - den eneste hvorpå du ikke er bundet af access er mht. hvor data ligger.

Heldigvis er implementationen af en database i windows vha. ms-access ikke mere åndsvag, end der er adgang til databasen fra et hvert ordentligt programmeringssprog.

I MS regi: C,C++,C#, asp (vbscript) og sikkert flere, på samme måde som når man anvender recordset i vba.

I java kender jeg til det over ODBC.

Grunden til at det er spild af tid, er at en access raport aldrig bliver andet en noget der skal printes.

Når man bruger tid på at lave en præsentation, er det rimmeligt at have en ambition om det det skal være en generelt anvendelig stream: - kunne sendes, præsenteres i forskellige sammenhænge, kunne renderes som komponent i ander setup, og konvereret til forskellige formaterer.

En access raport (kender kun til access 2000) - kan konvertes til en .rtf fil - dvs. alt hvad der ikke er kontrolelementer eller billeder - så, hvis man er til ascii grafik kan man lave noget anno 1990, der kan sendes eller bruges andre steder. 

Ingen anvisninger herfra på at bruge tid på at sammensætte 'viderebehandlet data' i en ms-access raport.

Skrevet man. d. 08. juni 2009 kl. 21:46:41| #4

spg
spg (42.471 point)
www.parodux.com
det er lidt svært når man ikke kan se opbygningen af din/dine rapporter... men du er nød til at styre det fra vba'en lav din forespørgsel, som jo nok er dine ca. 1000 poster, som hver især skal være en rapport, så kører du en løkke, som åbner en rapport op med teksterne fra den pågældende post...

Rapporten er så sat op til at udskrive til en pdf-writer. Du skal nok ind og styre navngivning og hvor den skal gemme fra vba, men det kan helt sikkert lade sig gøre!~)

Jeg kan ikke hjælpe dig meget mere lige nu, da jeg sidder med et andet projekt, men jeg kigger lige på det imorgen.... eller ser interesseret til hvis en anden har smidt en løsning!~)

Skrevet man. d. 08. juni 2009 kl. 23:38:33| #5

bmads
bmads (18.015 point)
OK ellebe, men tak for din interesse

Skrevet man. d. 08. juni 2009 kl. 23:46:54| #6

bmads
bmads (18.015 point)
Hej spg
For lige at give dig et indtryk af problemet, så har jeg en tabel med omkring 30.000 records. Disse informationer er lagt ind af omkring 1.000 personer.
Tabellen har også en kolonne, hvor personernes ID er angivet, og der er dermed ca. 30 informationer pr. person.
Det er derfor disse rapporter skal genereres med et eksemplar (1 pdf-fil) til hver person, der således kan se egne opdateringer.
Alt er samlet i denne ene tabel af hensyn til min behandling af data.
Jeg håber det giver mening.

Endelig er det af hensyn til kompleksitet og andre personers mulighed for at gennemskue systemet, at jeg har valgt at beholde Access og gøre processerne så enkle som muligt.
Altså ikke noget C eller C++, men VBA er OK

Skrevet tir. d. 09. juni 2009 kl. 07:11:45| #7

Før du begynder med noget fancy til Adobe PDF så check lige M$' egen PDF 'plugin' til Office 2007.
Den er rent faktisk ikke så tosset og den er kontrollerbar direkte fra VBA
DoCmd.OutputTo acOutputReport, 'reportname', acFormatPDF, 'FileName'

Og det du skal ud i er at danne kriterier for rapporten i et recordsetloop og så udskrive for hver record. I recordsettet vil du nok også kunne finde værdier der kan bruge til navngivning.

Skrevet tir. d. 09. juni 2009 kl. 09:34:07| #8

spg
spg (42.471 point)
www.parodux.com
enig med hugopedersen og hvis M$ har lavet et plugin, så bliver det ikke meget nemmere.

I forespørgslen som er postkilde for rapporten, der laver du et kriterie for eks. id på personen: get_global('HentId')

Modul:

************

option compare database
option explicit
public Gbl_id as string

public function get_global(i as string)
select case i
case "HentId"
get_global=gbl_id
end select
end function

public function SendPdf
dim db as dao.database
dim rst as dao.recordset
set db=currentdb()
set rst=db.openrecordset("NavnPåPersonTabel")
with rst
.movefirst
do
Gbl_id = !idPåPerson
docmd.outputto acoutputreport, "NavnPåRapport", acformatpdf, "StiHvorDerSkalGemmes\RapportNavn" & !IdEllerNavnPerson & ".pdf"
.movenext
loop until .eof
.close
end with
end function

***************

Så laver du en knap med: call sendpdf
eller du går i immidiate vinduet og skriver sendpdf!~)

Skrevet tir. d. 09. juni 2009 kl. 09:47:47| #9

Nøjagtig som jeg har gjort det :-)

Og hvis jeg får en mail på  oz8hp snabelting hotmail punktum com
så har jeg et eksempel der kan illustrere funktionen i Access 2007

Skrevet tir. d. 09. juni 2009 kl. 09:50:51| #10

PS: der er dog en lille detalje ved metoden - Access kommer med et spørgsmål om man vil overskrive hvis filen eksisterer.
Det betyder at man skal lave en funktion der forsøger at slette filen før output hvis det skal være helt automatisk.


PPS: eksemplet kræver at du har et directory på c: der hedder Temp

Skrevet tir. d. 09. juni 2009 kl. 09:59:25| #11

spg
spg (42.471 point)
www.parodux.com
man kunne også sætte & Date() & ind i filnavnet!~)

Skrevet tir. d. 09. juni 2009 kl. 10:00:02| #12

spg
spg (42.471 point)
www.parodux.com
eller noget lignende...

Skrevet tir. d. 09. juni 2009 kl. 15:54:32| #13

bmads
bmads (18.015 point)
Nu rolig - og indtil videre tak.

Det er ret vildt - og sikkert rigtig godt - alt det I har givet indtil nu. Budskabet er opfattet (og vistnok også forstået)

Jeg trækker lige vejret, mens jeg afprøver i praksis. I hører begge fra mig inden længe.

Skrevet tir. d. 09. juni 2009 kl. 17:29:55| #14

bmads
bmads (18.015 point)
Så har jeg afprøvet modulet, og det virker - dog ikke optimalt endnu.

Jeg har midlertidigt ændret output til xlsx filer, og det giver ingen problemer.

MEN - i linien Gbl_id = !idPåPerson kan jeg ikke gennemskue, hvad der skal stå efter lighedstegnet.

Hvis jeg selv angiver en værdi fra personlisten, virker programmet som det skal (for den person, der er angivet), men hvad skal der skrives, for at programmet selv henter alle de aktuelle værdier?

(det ser ellers rigtig godt ud)

Skrevet tir. d. 09. juni 2009 kl. 21:47:27| #15

spg
spg (42.471 point)
www.parodux.com
du skal skrive ! og så navnet på det felt i din forespørgsel, som har den værdi du skal bruge i dit kriterie!~)

Skrevet tir. d. 09. juni 2009 kl. 22:35:46| #16

bmads
bmads (18.015 point)
Det er kanon-godt.
Tak til begge for jeres deltagelse. Jeg håber, det er ok at dele point'ene

Skrevet tir. d. 09. juni 2009 kl. 23:05:44| #17


Skrevet tir. d. 09. juni 2009 kl. 23:06:37| #18

spg
spg (42.471 point)
www.parodux.com
...bare af interesse... hvad sker der når du fyrer dine 1000 rapporter af?~)

Skrevet ons. d. 10. juni 2009 kl. 07:06:14| #19

Mit bud:  en hel masse aktivitet på disken :-)

Eksemplet er sendt til bmads.

(tak for point)

Skrevet fre. d. 05. marts 2010 kl. 17:51:26| #20

fogh
fogh (18.890 point)
Hej spg og hugopedersen.

Jeg har forsøgt mig med koden fra kommentar #8, rettet til, men ved "sendpdf" fra Immidiate-vinduet får jeg en Run-time Error 3061, "Der er for få parametre. Der var ventet 1."

Mit recordset er en query er det et problem?

Kan jeg evt. få eksemplet tilsendt på mail også?
(thomas.fogh.dk snabelting gmail punktum com)

på forhånd tak

mvh Thomas

Skrevet fre. d. 05. marts 2010 kl. 18:03:15| #21

fogh
fogh (18.890 point)
"Mit recordset er en query er det et problem?"

Ja, det var problemet - forsøgte med en tabel, nu spiller det ;O)

Skriv et indlæg




Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] [img]link til billede[/img]
Web- og emailadresser omdannes automatisk til links

Log ind

   

   

Seneste spørgsmål

bnb

Oprettet den 26. maj 2012 kl. 14.33
mikkelfraringsted giver 200 point for svar | Giv et svar »

Opdatering af data fra 1 tabel til 1 anden

Oprettet den 25. maj 2012 kl. 21.05
mllarsen giver 30 point for svar | Giv et svar »

relink tables

Oprettet den 25. maj 2012 kl. 11.14
larsgrau giver 150 point for svar | Giv et svar »



   




Tips & Tricks fra PC World

Teaser billede

Læserne: Her er vores værste it-indkøb

Det er ikke al it-udstyr, som er det rene guld. Her er nogle af læsernes skrækhistorier.


Anmeldelser fra PC World

Teaser billede

Test: Mobil med Ferrari-design - og en Trabant-motor

Motorola har begået endnu en smartphone med lækkert design og potentiale til at være blandt de bedste. Men den når ikke i mål. Se her hvorfor.


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Sådan siger du farvel til Facebook

Læs her, hvordan du dropper Facebook og i stedet anvender nogle brugervenlige alternativer, så du stadig kan være social på nettet.


Nyheder fra Computerworld

Teaser billede

Galleri: De fedeste håndholdte gennem 40 år

Her har du de mest banebrydende håndholdte computere gennem alle tider.


Kurser
Samarbejdspartnere

Udgiver · © 2012 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger