Desde access mandar facturas por correo electrónico

Tengo una base de datos en la que emito una serie de facturas todos los meses(5 o 6) facturas. Emito las facturas cuyos datos se guardan en una tabla.

Con esta tabla (Facturas) y otra con los datos del cliente(nombre, nif, dirección, correo electrónico….) Tengo una consulta (C_Facturas). Luego tengo un informe (I_Facturas) cuyo origen de registro es la consulta “C_Facturas” donde coloco los campos para que me salga la factura tal como la recibiría el cliente. Tengo dos formularios, uno que mediante un botón, me saca todas las facturas, y otro que saca las facturas del cliente que yo quiera . Mediante este botón ya salen en Pantalla para imprimir las facturas. Estas “facturas” no las guardo en ninguna tabla, solo se guardan los datos, como dije anteriormente.

Lo que me gustaría es que en esos formularios pudiera poner un botón o macro que me enviara la factura por correo electrónico en PDF al correo electrónico de cada cliente.

2 respuestas

Respuesta
1

Al no saber como son los formularios, me permito decirte que doblas trabajo. Por otro lado, supongo que te convendrá guardar en algún lugar las facturas para demostrar que se las has enviado. Y además, también supongo que te convendrías añadir en la tabla Facturas un campo Enviada(Sí/no) para que no te vuelva a mandar las que ya has enviado.

Mira, yo tengo un formulario Enviar donde me figuran todas las facturas que no hayan sido enviadas ya

El diseño del informe Facturas es

Cuando pulso el botón, me pasa dichos informes, con el numero de factura a PDF y me lo envía al email de cada uno

Y si abriera algún PDF adjunto, vería

Para guardar constancia tengo una carpeta Enviados donde se guardan las facturas enviadas. No vaya a ser que algún día un cliente, para no pagarme, alegue que no se la envié.

El código del botón es un poco largo

Private Sub Comando7_Click()
DoCmd.GoToRecord , , acFirst
Dim i As Integer
For i = 1 To Me.Recordset.RecordCount
DoCmd.OpenReport "facturas", acViewPreview, , "numfactura='" & Me.NumFactura & "'", acHidden
DoCmd.OutputTo acOutputReport, "facturas", "PDFFormat(*.pdf)", "c:\users\gonza\documents\borrar\Enviados\" & Me.NumFactura & ".pdf"
DoCmd.Close acReport, "facturas"
Dim objOutlook As Object
Dim objItem As Object
Dim objNamespace As Object
Dim ADJUNTO As Variant
Set objOutlook = CreateObject("Outlook.Application")
Set objNamespace = objOutlook.GetNamespace("MAPI")
Set objItem = objOutlook.CreateItem(olMailItem)
objNamespace.Logon "EXCELSPACE", , True, True
ADJUNTO = "c:\users\gonza\documents\borrar\Enviados\" & Me.NumFactura & ".pdf"
With objItem
  .Attachments.Add (ADJUNTO)
  .Display
  .To = "" & Me.Email & ""
  .CC = ""
  .BCC = ""
  .Subject = "Estimado amigo" & " " & "" & Me.Idcliente.Column(1) & ""
  .Body = "Te mando esta facturilla por si tuvieras a bien abonarmela"
  .Send
End With
objNamespace.Logoff
Set objOutlook = Nothing
Set objItem = Nothing
Set objNamespace = Nothing
'Kill "C:\users\gonza\documents\borrar\enviados\" & Me.NumFactura & ".pdf"
DoCmd.RunSQL "update ventas set facturada=true where numfactura='" & Me.NumFactura & "'"
DoCmd.GoToRecord , , acNext
Next
DoCmd.GoToRecord , , acFirst
End Sub

En esencia lo que hace es ir al primer registro.

Abre el informe Facturas correspondiente a ese número de factura( que es texto)

Exporta, en formato PDF, ese informe a la carpeta Enviados con el Num Factura como nombre del archivo.

Envía a la bandeja de salida de Outlook ese archivo como adjunto, a la direccion de correo que aparece en el campo Email.

Me marca en la tabla Ventas( es la que uso yo, la tuya será Facturas) en el campo Facturada( o Enviado, como quieras) que esa factura ya ha sido enviada, para que ya no la vuelva a mandar más.

Pasa al siguiente registro y hace lo mismo. Y así hasta que se acaban los registros del formulario.

Te he puesto en verde la instrucción por si quisieras que una vez enviado el archivo a Outlook te lo elimine de la carpeta Enviados.

En el caso del combinado, sólo me muestra aquellos clientes cuyas facturas están sin enviar(¿para qué va a mostrarme todos los clientes si quizás alguno ya tiene todas sus facturas enviadas?)

Al elegir uno, en el formulario sólo me muestra aquellas facturas correspondientes al cliente elegido y que no hayan sido enviadas, y se repite el proceso del punto anterior. O sea, tienes que copiar el código en el evento Después de actualizar del combinado, pero recordando que antes de la primera línea tienes que poner

me.recordsource="select * from Ventas where Idcliente=" & me.elegircliente & " and facturada=0"

Para que el origen de registros del formulario sean aquellos de la tabla Ventas en que el Idcliente sea igual al que elijo en la columna dependiente del combinado y que no hayan sido enviadas.

Parece un poco lioso, por eso, si quieres, repito, si quieres, mándame un mensaje(sólo el mensaje) a [email protected] y te mando el ejemplo.

Si lo haces, en el asunto del mensaje pon tu alias Carpa951, ya que si no sé quien me escribe ni los abro.

Respuesta

Si no quiere usar el maldito Outlook puede adaptar los ejemplos de este link:

Enviar Correo Usando CDO de Microsoft - Access JJJT (google.com)

Puede enviar los reportes a PDF como le explican. Tenga en cuenta que también tiene que configurar su cuenta de Google para enviar correos mediante CDO

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas