Newsgroup: it.comp.appl.access
Titolo: inviare report per e-mail

Ho il seguente problema: ho un database di dati clienti su Access
2000. Per ogni cliente, in certe condizioni (quando vengono superate
certe scadenze) viene fatta un'estrazione dei dati scaduti, viene
costruito un report, e poi - adesso - lo stampiamo su pdf e quindi
glielo inviamo per posta elettronica.
Ora mi è stato chiesto di automatizzare questa procedura, per cui mi
sto scervellando su come fare a creare una routine che, in automatico,
con la sola pressione di un tasto, esegua le seguenti operazioni:
a) estragga i clienti cui va l'informativa, UNO per uno! Quindi devo
creare una query con selezione sulla base di una variabile che imposto
di volta in volta.
b) costruisca il report dedicato a questo cliente. Questo è un
problema, perché se faccio un report raggruppato per ID cliente,
ottengo un UNICO documento con tutti i prospetti in sequenza, a me
servirebbero dei singoli file.
c) lo invii in un modo o nell'altro (ditemi come, se è possibile!) per
e-mail al cliente, all'indirizzo indicato nel campo apposito del
record del cliente. In teoria dovrebbe esistere il comando
InviaOggetto... ma non va :-(
d) ripeta il ciclo fino ad esaurimento dei clienti.
Io sono riuscito a fare *quasi* quello che mi serve, con una
concatenazione di macro, ma ho due problemi: 
1) non so come fare un ciclo "selettivo", i clienti sono identificati
da un ID, e più che incrementare l'ID uno a uno nella macro di
ripetizione della procedura non so come fare. Ma non va esattamente
bene, perché per alcuni clienti il report risulta vuoto e ovviamente
non ha senso. Meglio sarebbe riuscire a estrarre solo i clienti
"bisognosi".
2) il problema più grosso: quando arriva all'impostazione dell'invio
per e-mail, il comando "inviaOggetto" fallisce perché dice che il
database potrebbe essere di Access97 (non è vero), oppure perché
l'oggetto non è visualizzato (l'avevo correttamente aperto, nella
macro, e gli avevo pure puntato il focus, più di così che devo fare?).
Accetto qualunque consiglio, anche che mi diciate che è impossibile
quello che voglio fare, basta che sappia se c'è un modo oppure no e mi
possa regolare di conseguenza!
Grazie!
-- 
Massimo Bacilieri AKA Crononauta
ulib...@libero.it
 ; ICQ UIN: 4005815
"Se tutto è sotto controllo, stai andando troppo piano"
(Mario Andretti)

 ha scritto nel messaggio
news:3b0a23d9....@news.libero.it...

Le mie sono solo idee , ma forse ti possono essere d'aiuto... :))
Fai creare al sistema una tabella temporanea (che magari distruggi dopo la
fine del lavoro ... o la svuoti)dove si inseriscono solo le informazioni che
ti occorrono per il report (che so' cliente , mail , riepilogo movimenti
etc.) usando i comandi del Recordset o una query di raggruppamento per fare
i cicli per popolare la tabella . a questo punto ottieni una tabella con
solo i clienti che effettivamente devono riceve l'informativa e relativi
dati ...
In sincerita' non l'ho ancora provata (per mancanza di tempo anche se
servira' anche a me dopo) .. sul sito comune ho visto un db per l'invio mail
(mi pare via winsock) dove potevi inserire nel corpo del messaggio i valori
dei campi . Oppure potresti fargli mettere un flag (un asterisco una cosa
qualsiasi ) in una colonna apposita della tabella temporanea che identifichi
il primo record che ti interessa
es. record 01 -> |ClientePippo | 50.000.000 |*|
in modo che quello diventi univoco e tu lo possa estrarre in sicurezza.
Tipo con con  "select * from tblTemporanea"
rec.movelast
rec.movefirst
rec.edit
    rec![flag]="*"
rec.update
Quando ha finito il codice di estrapolazione ed invio cancelli il record
dalla tabella tempranea (cosi' non esiste piu' ) e flagghi il nuovo primo
della lista come sopra . Quando i nomi sono finiti nella tabella sonoanche
state inviate tutte le mail.
Un altra idea che mi e' venuta mentre scrivevo .. puo' essere quella di far
scrivere dei file di testo per ogni mail che devi inviare .
Bhe .. queste sono mie idee ,, spero che ti siano di aiuto ..
(ps.: le macro non le so' usare :)) )
Ciao ,
--
(^o^))~    Lorenzo   (^o^))~
"Preimaginare e' lo imaginare le cose che saranno..."
"Postimaginare e' imaginare le cose passate ..."
(Leonardo Da Vinci)

 concatenazione di macro, ma ho due problemi:
Con le macro non saprei.... sono limitateeeeeee :-)
Io userei VBA
Max

 ha scritto nel messaggio
news:3b0a23d9....@news.libero.it...

Ho trovato un paio di interessanti funzione per inviare allegati con outlook
che
integrata al tuo sistema ti risolve l'invio :)) .
Utilizzando la tabella temporaneea che ti avevo indicato prima puoi :
1) far ciclare il sistema per l'emissione su file dei dati da inviare al
cliente e quindi allegare per mail
2)far ciclare il sistema che ti crei una mail per ogni clienti e poi le
invii tutte assieme mettendo i dati nel body (corpo ) del messaggio.
Le provate e funzionano entrambi :)) (pero' ho provato con una mail sola
senza fare il ciclo che occorre a te :)
Ciao , Lorenzo
===================================================
'**************************************
' Name: OpenOutlook send mail window wit
'     h attachments
' Description:Open Outlook send mail win
'     dow with attachments from a vb applicati
    '     on. Also, change m.display to m.send if
    '     you want to just send the email and not
    '     preview it! Also works in vbscript! Copy
    '     code to a text file and save with a *.vb
    '     s extension and double click to activate
    '     . Super Cool.
' By: John O'Donald
'
'This code is copyrighted and has' limited warranties.Please see 
http://w
'     
ww.Planet-Source-Code.com/xq/ASP/txtCode
'     Id.11853/lngWId.1/qx/vb/scripts/ShowCode
'     .htm'for details.'**************************************
Dim o
Dim m
Set o = CreateObject("Outlook.Application")
Set m = o.CreateItem(0)
m.To = "
xx...@yyyy.com
"
m.Subject = "This is the Subject"
m.Body = "Hey, this is cool!"
m.Attachments.Add "C:\Temp\FileToAttach.txt"
'Repeat this line if there are more Atta
'     chments
m.Display
'm.Send 'If you want to just send it
=============================================
'**************************************
' Name: E-mail Access Reports
' Description:Allows you to use Outlook
'     to send bulk e-mails of Access Reports i
'     n Snapshot Format to users (ISO Printing
'     , Faxing etc...)
' By: Miyagi
'
' Inputs:Uses an Access Database with Us
'     er e-mail adresses
Used DAO, thus you need To Set a Reference In Outlook to the MS DAO 3.51
Library
'
' Assumes:This code should go in an Oulo
'     ok module. You can then run the code by
'     itself or by creating a menuitem on your
'     menus.
This would also require you To first save your files as Snapshot files In a
specified direcory. You can of course Do this in one step but we needed to
send 6 files. That would have meant six e-mails, we prefferred to send 1
only and hence the effort to first create the files
'
' Side Effects:No Error Trapping.
'
'This code is copyrighted and has' limited warranties.Please see 
http://w
'     
ww.Planet-Source-Code.com/xq/ASP/txtCode
'     Id.11566/lngWId.1/qx/vb/scripts/ShowCode
'     .htm'for details.'**************************************
'Option Explicit
Public Sub MailToUsers()
    Dim myOlApp As Application
    Dim myItem As MailItem
    Dim Path As String
    Dim myAttachments As Attachments
    Dim db As Database
    Dim rs As Recordset
    Dim BodyMsg As String
    On Error Goto myErr
    'Set Database and Path to use to use
    Set db = OpenDatabase("z:\DatabasePath\dbDatabaseName.mdb")
    'Set Path to where Files are located
    Path = "z:\SnapshotFilesPath\"
    'Set Value for Body Message
    BodyMsg = "Type whatever bodymessage you might need"
    'Set Recordset to Users Table
    Set rs = db.OpenRecordset("tblUsers")
    'Open or use Outlook
    Set myOlApp = CreateObject("Outlook.Application")
    rs.MoveLast
    rs.MoveFirst
    Do Until rs.EOF
        'Creates a new Outlook MailItem
        Set myItem = myOlApp.CreateItem(olMailItem)
        With myItem
            .To = rs.Fields("[Email]")
            .Subject = "Supply your subject line here"
            .Body = BodyMsg
        End With
        'This Creates an Outlook attachment
        Set myAttachments = myItem.Attachments
        With myAttachments
            'Do for all reports
            .Add Path & "\rptReport1.snp"
            .Add Path & "\rptReport2.snp"
            '************************************
            'Additional Documents can be added
            'Supply full Path and File Name
            '.Add "c:\moc\Questionnaire Script Chang
            '     es for Dealer Reports 2000_03.doc"
            '************************************
            'Use myItem.Save ISO myItem.Send to view
            '     before sending
            'myItem.Save
            myItem.Send
        End With
        'Go to the next user
        rs.MoveNext
    Loop
    Set myOlApp = Nothing
    Set rs = Nothing
    Set db = Nothing
    Exit Sub
    myErr:
    Resume Next
End Sub

che integrata al tuo sistema ti risolve l'invio :)) .
Ti ringrazio, ma l'altro giorno sono incappato quasi per caso nei
CDONTS di asp... la manna! Così ho potuto rimediare molto agilmente
con uno script asp, che estrae i dati dal database, li processa come
serve a me, poi crea l'e-mail e la invia :-)
Ovviamente lo script lo posso ciclizzare a livello server, in questo
modo non ho bisogno di scrivere complesse macro su ogni client!
Grazie di tutto lo stesso! :-)
