Newsgroup: it.comp.appl.access
Titolo: Stampare un record alla volta

Ciao a tutti
Ho un'anagrafica clienti e vorrei creare tanti PDF delle fatture quanti 
sono i clienti e tali PDF devono avere come nome il codice cliente.
Questo mi permetterebbe di archiviare le singole fatture in formato PDF 
e poterle ritrovare rapidamente attraverso il nome del file.
Abbiamo Adobe Acrobat che con il suo "Distiller" mi permette di creare 
il PDF. Adesso vorrei tanto capire come accidenti dire ad Access con VBA 
  od in qualsiasi altro modo di stampare un record alla volta.
Credete sia possibile?
-- 
Max
www.suonaresuonare.it


Se la tua fattura ha un campo contatore
con docmd.openreport Tuoreport, , , "Id = " & 
me.id
cosě dalla tua maschera
-- 
-- 
Massimiliano Amendola
www.accessgroup.it
Cisa - Conferenza Italiana Sviluppatori Access

 così dalla tua maschera
Fin qui ci siamo e funziona... il problema è che poi devo stamparla su 
PDF, dare al file un certo nome...
-- 
Max
www.suonaresuonare.it

 PDF, dare al file un certo nome...
Penso dovresti rivolgerti all'Help del tuo generatore di PDF.
Mi pare (sto parlando di Adobe Acrobat che però uso raramente
e che quindi conosco poco) ci sia la possibilità di settare la
stampante virtuale per la richiesta di nome file ovvero per
l'assegnazione in automatico di un nome file derivato dalla
progressione di stampa.
Bruno 

 PDF, dare al file un certo nome...
savesettings


 savesettings
Potresti darmi qualche indizio in più?
-- 
Max
www.suonaresuonare.it

 progressione di stampa.
Ciao Bruno,
tutta la giornata di ieri l'ho spesa a documentarmi e ci sono parecchie 
differenze tra una versione e l'altra del "generatore" di PDF.
Prima era possibile usare un file INI per indicare il nome del file, poi 
una chiave di registro ma questa funzione non è più valida per 
l'ultimissima versione. Insomma ci sono tante situazioni particolari da 
verificare con Acrobat tanto che mi sto quasi convincendo a cambiare 
prodotto... :(
-- 
Max
www.suonaresuonare.it

 
www.suonaresuonare.it
Non so se ti puň essere di aiuto ma io ho fatto una cosa di questo tipo:
con PDFCreator che trovi free stampo in pdf, comprende una funzione di 
autosave dove indichi dove vuoi salvare e lui salva in automatico.
Poi i file che salva automaticamente me li sposto e rinomino come voglio 
dove
voglio.
Ciao Sabrina 

 autosave dove indichi dove vuoi salvare e lui salva in automatico.
Lo sto scaricando... vediamo come accidenti funziona e se riesco a 
risolvere...
certe volte mi prende una frustrazione bestiale quando mi scontro con 
dei problemi che inizialmente sembravano di rapida soluzione ma poi si 
sono rivelati dei drammi...
Hai qualche altra dritta da darmi su quanto da te detto???
-- 
Max
www.suonaresuonare.it

 ha scritto nel messaggio 
news:eltr3u$tkd$1...@tdi.cu.mi.it...

Io uso la funzione di autosave con una cartella predefinita del tipo PDFTEMP
e i file li salvo con <Title> quindi quando stampo un report da Access che 
si chiama 01 dentro la cartella PDFTEMP trovo 01.pdf poi con le funzioni per 
la gestione dei file che trovi sul sito comune sposto il mio file dove mi 
serve ed eventualmente lo rinomino.
Ciao Sabrina 

Ecco come ho risolto grazie al vostro aiuto:
1) Installato il PDFCreator con l'opzione /useini
2) per comodità create una tabella "t_Impostazioni" con i campi:
	ID (contatore)
	StampantePDF (testo)
	FormatoOutput (testo)
	PercorsoINI (testo)
assegnate i valori:
	ID = 1
	StampantePDF = PDFCreator,winspool,Ne02:
	FormatoOutput = 0
	PercorsoINI = C:\<percorso completo>\PDFCreator.ini
 
3) ecco la mia classe:
Option Compare Database
Option Explicit
Const TABELLA_IMPOSTAZIONI = "t_Impostazioni"
Private Declare Function GetPrivateProfileString Lib "kernel32" Alias 
"GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal 
lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As 
String, ByVal nSize As Long, ByVal lpFileName As String) As Long
Private Declare Function WritePrivateProfileString Lib "kernel32" Alias 
"WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal 
lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Declare Function GetProfileSection& Lib "kernel32" Alias 
"GetProfileSectionA" (ByVal lpAppName As String, ByVal lpReturnedString 
As String, ByVal nSize As Long)
Private Declare Function GetProfileString& Lib "kernel32" Alias 
"GetProfileStringA" (ByVal lpAppName As String, ByVal lpKeyName As 
String, ByVal lpDefault As String, ByVal lpReturnedString As String, 
ByVal nSize As Long)
Private Declare Function WriteProfileString& Lib "kernel32" Alias 
"WriteProfileStringA" (ByVal lpszSection As String, ByVal lpszKeyName As 
String, ByVal lpszString As String)
Private DefaultPrinter As String
Private StampantePredefinita As String
Private StampantePDF As String
Private PercorsoINI As String
Private tmpPercorsoPDF As String
Private tmpUseAutoSave As String
Private tmpNomeFile As String
Private tmpFormatoOutput As String
Private FormatoOutput As String
Private x
Public Sub Inizio()
     On Error GoTo Errore
     'salva la stampante predefinita
     StampantePredefinita = GetDefaultPrinter
     'imposto come stampante predefinita la stampante pdfcreator
     StampantePDF = DLookup("[StampantePDF]", TABELLA_IMPOSTAZIONI, 
"[ID] = 1")
     SetDefaultPrinter (StampantePDF)
     PercorsoINI = DLookup("[PercorsoINI]", TABELLA_IMPOSTAZIONI, "[ID] 
= 1")
     FormatoOutput = DLookup("[FormatoOutput]", TABELLA_IMPOSTAZIONI, 
"[ID] = 1")
     'recupero le impostazioni del file ini originarie
     tmpPercorsoPDF = ReadINIfile("Options", "AutosaveDirectory", 
PercorsoINI) 'legge dal file
     tmpUseAutoSave = ReadINIfile("Options", "useAutosave", PercorsoINI) 
'legge dal file
     tmpNomeFile = ReadINIfile("Options", "AutosaveFilename", 
PercorsoINI) 'legge dal file
     tmpFormatoOutput = ReadINIfile("Options", "AutosaveFormat", 
PercorsoINI) 'legge dal file
     Exit Sub
Errore:
     'ripristino la stampante predefinita
     SetDefaultPrinter (StampantePredefinita)
     MsgBox Err.Description
End Sub
Public Sub Fine()
On Error GoTo Errore
     'Ripristino i valori predefiniti
     x = WritePrivateProfileString("Options", "AutosaveDirectory", 
tmpPercorsoPDF, PercorsoINI) 'scrive nel file
     x = WritePrivateProfileString("Options", "AutosaveFilename", 
tmpNomeFile, PercorsoINI) 'scrive nel file
     x = WritePrivateProfileString("Options", "useautosave", 
tmpUseAutoSave, PercorsoINI) 'scrive nel file
     x = WritePrivateProfileString("Options", "useautosave", 
tmpFormatoOutput, PercorsoINI) 'scrive nel file
     'ripristino la stampante predefinita
     SetDefaultPrinter (StampantePredefinita)
     Exit Sub
Errore:
     'ripristino la stampante predefinita
     SetDefaultPrinter (StampantePredefinita)
     MsgBox Err.Description
End Sub
Public Sub CreaPDF(PercorsoPDF As String, NomeFile As String, NomeReport 
As String)
     On Error GoTo Errore
     'setto le impostazioni del file ini come servono per creare il 
documento
     x = WritePrivateProfileString("Options", "AutosaveDirectory", 
PercorsoPDF, PercorsoINI) 'scrive nel file
     x = WritePrivateProfileString("Options", "AutosaveFilename", 
NomeFile, PercorsoINI) 'scrive nel file
     x = WritePrivateProfileString("Options", "useautosave", "1", 
PercorsoINI) 'scrive nel file
     x = WritePrivateProfileString("Options", "AutosaveFormat", 
FormatoOutput, PercorsoINI) 'scrive nel file
     'stampo il report
     DoCmd.OpenReport NomeReport, acViewNormal
     Sleep (2000)
     Exit Sub
Errore:
     'ripristino la stampante predefinita
     SetDefaultPrinter (StampantePredefinita)
     MsgBox Err.Description
End Sub
Private Function ReadINIfile(sSection As String, sEntry As String, 
sFilename As String) As String
     Dim x As Long
     Dim sDefault As String
     Dim sRetBuf As String, iLenBuf As Integer
     Dim sValue As String
     sDefault$ = ""
     sRetBuf$ = String$(256, 0)   '256 null characters
     iLenBuf% = Len(sRetBuf$)
     x = GetPrivateProfileString(sSection, sEntry, _
                sDefault$, sRetBuf$, iLenBuf%, sFilename)
     ReadINIfile = Left$(sRetBuf$, x)
End Function
Private Function SostCar(s As String, c1 As String, c2 As String) As String
     'sostituisce un carattere con un altro in una stringa (solo prima 
occorrenza)
     Dim pos As Integer
     pos = InStr(1, s, c1)
     If pos > 0 Then Mid(s, pos) = c2
     SostCar = s
End Function
Private Sub SetDefaultPrinter(s As String)
     'imposta la stampante passata come argomento a predefinita
     On Error GoTo Esci
     Dim x As Long
     If IsNull(s) Or s = "" Then Exit Sub
     x = WriteProfileString("windows", "device", vbNullString)
     DoEvents
     x = WriteProfileString("windows", "device", s)
     DoEvents
Esci:
End Sub
Private Sub ResetDefaultPrinter()
     'reimposta a predefinita la stampante memorizzata nella var globale
     SetDefaultPrinter (DefaultPrinter)
End Sub
Private Function GetDefaultPrinter() As String
     'ritorna il nome della stampante predefinita
     Dim x As Integer
     Dim buffer As String
     buffer = Space$(255)
     x = GetProfileString("windows", "device", "?", buffer, 255)
     GetDefaultPrinter = Left$(buffer, x)
End Function
-- 
Max
www.suonaresuonare.it

Dimenticavo!
Inizializzate con:
ScriviPDF.Inizio
anche in un ciclo richiamate tutte le volte che volete:
ScriviPDF.CreaPDF "C:\", "<NomeFile>", "[<NomeReport>]"
concludete con:
ScriviPDF.Fine
-- 
Max
www.suonaresuonare.it