Realizzare un CICLO CHE GENERA UN PDF E LO INVIA VI EMAIL

venerdì 10 luglio 2009 - 10.28

ivanuccio Profilo | Junior Member

Ciao scusami sono in combutta con un programma per creare fatture ed inviarle via email, tutto funziona, ma ora devo generare un ciclo che verifichi tutti i clienti ed in automatico a fine mese mi invii le fatture a tutti per email. puoi darmi una mano per piacere ???

Spett. Colleghi.

Ho un problema che non riesco a risolvere, vi chiedo l'enorme aiuto per finire il mio programmino.
Sono in combutta con un programma per creare fatture ed inviarle via email, tutto funziona, quando genero la fattura per singolo cliente recuperato sulla griglia ma ora devo generare un ciclo che generi tutte le fatture di fine mese insieme e con un ciclo forn le invio via email.
Il odice per inviare l'email sono riuscito a generarlo riesco anche a recuperare le singole email, ma non riesco a recuperare i valori dalla dataSet mi sono bloccato nel recuperare il dati che mi interessano da un DataSet, che riesco a visualizzare la tabella popolata in debug , ma non riesco a recuperarli per passarli al file PDF.

Di seguito vi allego il codice che genera il soingolo file PDF dal cristal report.
RAGAZZI MI AVVIDO ALLA VOSTRA PROFESSIONALITA' E ORMAI UN MESE CH CERCO DI RISOLVERE IL PROBLEMA...

1
++++++++++++++++++anteprima del file PDF +++++++++++++++++++
Private Sub TestaFatturaDataGridView_CellContentDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles TestaFatturaDataGridView.CellContentDoubleClick
Dim NrFattura As Integer
Dim DataFattura As Date
Dim Anno As String
Dim Logon As New CrystalDecisions.Shared.TableLogOnInfo

DataFattura = TestaFatturaDataGridView.SelectedRows.Item(0).Cells(1).Value
NrFattura = Int(TestaFatturaDataGridView.SelectedRows.Item(0).Cells(0).Value)
Anno = CStr(Year(DataFattura))
Logon.ConnectionInfo.DatabaseName = "xxxxxxx"
Logon.ConnectionInfo.ServerName = "xxxxxxx"
Logon.ConnectionInfo.UserID = "xxxxxxx"
Logon.ConnectionInfo.Password = "xxxxxxx"
Logon.ConnectionInfo.IntegratedSecurity = False
frmAnteprima.FatturaPDF1.Database.Tables("TestaFattura").ApplyLogOnInfo(Logon)
frmAnteprima.FatturaPDF1.Database.Tables("CorpoFattura").ApplyLogOnInfo(Logon)
frmAnteprima.FatturaPDF1.RecordSelectionFormula = "{TestaFattura.NrFattura} = " & NrFattura
frmAnteprima.ShowDialog()
frmAnteprima.Dispose()
End Sub
++++++++++++++++++fine generazione file in pdf+++++++++++++++++++

Private Sub btnInvioPDF_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnInvioPDF.Click
Dim NrFattura As Integer
Dim Path As String
Dim FileName As String
Dim DataFattura As Date
Dim Anno As String
Dim Mese As String
Dim ACapo As String
ACapo = Chr(13) + Chr(10)
Path = System.IO.Directory.GetCurrentDirectory + "\FATTUREPDF"
Path = "PERCORSO DOVE RECUPERA IL IL VOLANTINO"
If Not System.IO.Directory.Exists(Path) Then
System.IO.Directory.CreateDirectory(Path)
End If
NrFattura = Int(TestaFatturaDataGridView.SelectedRows.Item(0).Cells(0).Value)
DataFattura = TestaFatturaDataGridView.SelectedRows.Item(0).Cells(1).Value
Anno = CStr(Year(DataFattura))
Mese = CStr(Format(DataFattura, "MMMM"))
Path = Path + "\" + Anno + "\" + Mese
If Not System.IO.Directory.Exists(Path) Then
System.IO.Directory.CreateDirectory(Path)
End If
FileName = CStr(NrFattura) + "_" + CStr(Year(DataFattura)) + CStr(Format(Month(DataFattura), "00")) + CStr(Microsoft.VisualBasic.DateAndTime.Day(DataFattura)) + "_" + DenominazioneTextBox.Text + ".pdf"
Path = Path + "\" + FileName

Dim Logon As New CrystalDecisions.Shared.TableLogOnInfo

Logon.ConnectionInfo.DatabaseName = "XXXXXXXXXX"
Logon.ConnectionInfo.ServerName = "XXXXX"
Logon.ConnectionInfo.UserID = "XXXXX"
Logon.ConnectionInfo.Password = "XXXXX"
Logon.ConnectionInfo.IntegratedSecurity = False

frmAnteprima.FatturaPDF1.Database.Tables("TestaFattura").ApplyLogOnInfo(Logon)
frmAnteprima.FatturaPDF1.Database.Tables("CorpoFattura").ApplyLogOnInfo(Logon)

frmAnteprima.FatturaPDF1.RecordSelectionFormula = "{TestaFattura.NrFattura} = " & NrFattura
If Not System.IO.File.Exists(Path) Then
frmAnteprima.FatturaPDF1.ExportToDisk(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat, Path)
frmAnteprima.Dispose()
End If
frmMail.DestinationAddress.Text = Me.MailTextBox.Text
frmMail.DestinationName.Text = "XXXXX" + Me.DenominazioneTextBox.Text
frmMail.ListBox1.Items.Add(Path)
frmMail.Attachments1.Items.Add(Path)
frmMail.ListBox1.Items.Add("XXXXXXXXXXXXXXX")
frmMail.Body.Text = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX " + _
CStr(NrFattura) + " del " + CStr(DataFattura) + " :" + ACapo + ACapo + _
"- FATTURA - " + FileName + ACapo + ACapo + "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX." + _
ACapo + ACapo + _
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" + ACapo + ACapo
If DataFattura <= #12/31/2007# Then
frmMail.Body.Text = frmMail.Body.Text + _
"XXXXXXXXXXXXXXX"
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" + ACapo + _
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" + ACapo
Else
frmMail.Body.Text = frmMail.Body.Text + _
"XXXXXXXXXXXXXXX" + ACapo + _
"XXXXXXXXXXXXXXX"
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX." + ACapo + _
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" + ACapo
End If
frmMail.MdiParent = frmSapri
frmMail.Show()

End Sub

++++++++++++++++++fine generazione file in pdf+++++++++++++++++++

Grazie mille per il vostro tempo . PER QUANTO RIGUARDA LE XXXXX SONO SOLO TESTO DESCRITTIVO CHE CREDO NON vi interessi

Jeremy Profilo | Guru

Ciao.
>RAGAZZI MI AVVIDO ALLA VOSTRA PROFESSIONALITA' E ORMAI UN MESE
>CH CERCO DI RISOLVERE IL PROBLEMA...
Si lo so .... ho visto diversi thread aperti più volte ed in più Forum .... ma per esperienza ti dico che, postare tutto il codice senza delle richieste specifiche,spaventa solo i lettori del post, in quanto si rischia di finire in un vortice da cui non se ne esce più.
In più, se già riesci ad inviare una singola mail, non vedo la difficoltà nel fare un ciclo For .... Next per inviarle tutte finchè ce nè.
Hai già provato a produrre del codice per realizzare quello che chiedi (anche sbagliato)??
A noi non serve vedere il codice che usi per inviare una singola Mail ..... ci serve piuttosto vedere il codice che hai prodotto tu ..... ma che non funziona.
Tra l'altro, in .NET esiste una classe nativa che si chiama SmtpClient, la quale, è stata creata apposta per l'invio di dati attraverso il protocollo SMTP.

Facci sapere...
Ciao

ivanuccio Profilo | Junior Member

Cari colleghi, grazie per la vostra collaborazione, volevo comunicare che ho risolto creando una funzione e chiamandomela da un form qualunque nel progetto, vi allego il codice che genera il ciclo for each

Imports System.Data.SqlClient
Module FunzioneGenerazioneFattura
Public Sub GenerazioneFattureFineMese()
Dim GenfatConn As SqlConnection = New SqlConnection("Data Source= sqlexpress;Initial Catalog=xxxxxxx;Persist Security Info=True;User ID=xxxxxxx;Password=xxxxxxx")
Dim GenfatCommand As SqlCommand = New SqlCommand("SELECT ClientiFattura.*, TestaFattura.NrFattura, TestaFattura.Data, TestaFattura.Pagamento, TestaFattura.Banca, TestaFattura.Agenzia,TestaFattura.CodCliente, TestaFattura.Piva AS Expr1, TestaFattura.TotaleNolo, TestaFattura.TotaleDirittoFisso, TestaFattura.TotaleDirittoAssegno,TestaFattura.TotaleDirittoAssicurazione, TestaFattura.TotaleVarie, TestaFattura.TotaleImponibile, TestaFattura.Iva, TestaFattura.TotaleImposta,TestaFattura.TotaleNonImponibile, TestaFattura.TotaleParziale, TestaFattura.TotaleAnticipate, TestaFattura.TotaleBollo, TestaFattura.SpeseIncasso,TestaFattura.TotaleFattura, TestaFattura.TotaleLire, TestaFattura.Cliente AS Expr2, TestaFattura.Cliente2, TestaFattura.Indirizzo AS Expr3,TestaFattura.Cap AS Expr4, TestaFattura.Localita AS Expr5, TestaFattura.Provincia, TestaFattura.Indirizzo2, TestaFattura.Cap2, TestaFattura.Localita2, TestaFattura.Pv2, TestaFattura.[ca-codes], TestaFattura.[ca-deses__1], TestaFattura.[ff-altre__7], TestaFattura.[ff-altre__20],TestaFattura.[ff-altre__21]FROM TestaFattura INNER JOIN ClientiFattura ON TestaFattura.CodCliente = ClientiFattura.Cliente INNER JOIN Claus ON ClientiFattura.Cliente = Claus.[ca-cd] WHERE(Claus.[ca-listi] = N'1') AND (TestaFattura.Data = CONVERT(DATETIME, '2009-05-31 00:00:00', 102))AND (TestaFattura.TotaleFattura > 50.00000) ORDER BY TestaFattura.Data", GenfatConn)
Dim TabDataAda As SqlDataAdapter = New SqlDataAdapter
' Dim IndEmail As String
Dim NrFat As Integer
Dim DataFat As Date
Dim Den As String
Dim Anno As String
Dim Sotto As String
Dim Percorso As String
Dim TabDataset As DataSet = New DataSet
Dim Mese As String
Dim FilePDF As String

GenfatCommand.CommandTimeout = 30
TabDataAda.SelectCommand = GenfatCommand
GenfatConn.Open()
TabDataAda.Fill(TabDataset, "tabinfatfm")

For Each row As DataRow In TabDataset.Tables.Item("tabinfatfm").Rows
'IndEmail = row.Item("mail").ToString()
NrFat = row.Item("NrFattura")
DataFat = row.Item("Data")
Den = row.Item("Denominazione")
'MsgBox(IndEmail & NrFat & DataFat & den)

Sotto = Chr(13) + Chr(10)
Percorso = System.IO.Directory.GetCurrentDirectory + "\FATTUREPDF"

If Not System.IO.Directory.Exists(Percorso) Then
Percorso = "C:\FATTUREPDF"
System.IO.Directory.CreateDirectory(Percorso)
End If

If Not System.IO.Directory.Exists(Percorso) Then
System.IO.Directory.CreateDirectory(Percorso)
End If

Anno = CStr(Year(DataFat))
Mese = CStr(Format(DataFat, "MMMM"))
Percorso = Percorso + "\" + Anno + "\" + Mese

If Not System.IO.Directory.Exists(Percorso) Then
System.IO.Directory.CreateDirectory(Percorso)
End If
FilePDF = "Fatt. N° " + CStr(NrFat) + " Del " + CStr(Year(DataFat)) + CStr(Format(Month(DataFat), "00")) + CStr(Microsoft.VisualBasic.DateAndTime.Day(DataFat)) + " Spett. " + Den + ".pdf"
Percorso = Percorso + "\" + FilePDF

Dim Logon As New CrystalDecisions.Shared.TableLogOnInfo

Logon.ConnectionInfo.DatabaseName = "xxxxxxx"
Logon.ConnectionInfo.ServerName = ".\sqlexpress"
Logon.ConnectionInfo.UserID = "xxxxxxx"
Logon.ConnectionInfo.Password = "xxxxxxx"
Logon.ConnectionInfo.IntegratedSecurity = False
frmAnteprima.FatturaPDF1.Database.Tables("TestaFattura").ApplyLogOnInfo(Logon)
frmAnteprima.FatturaPDF1.Database.Tables("CorpoFattura").ApplyLogOnInfo(Logon)
frmAnteprima.FatturaPDF1.RecordSelectionFormula = "{TestaFattura.NrFattura} = " & NrFat

If Not System.IO.File.Exists(Percorso) Then
frmAnteprima.FatturaPDF1.ExportToDisk(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat, Percorso)
frmAnteprima.Dispose()
End If
Next
GenfatConn.Close()
End Sub
End Module

Con questo codice riesco a generare un loop che crea le fatture in automatico

Grazie mille...
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5