Enviar mensajes por correo con información en tiempo real de la consulta del informe

SOLVED

Buenos días,

Me gustaría saber si hay alguna posibilidad de añadir en el asunto y cuerpo del mensaje campos del informe o VarApli, al igual que se puede hacer en las e-facturas, o en el campo para {Clientes.Email1}, que son compilados en tiempo de ejecución.

Querría poder añadir en el asunto algo así:

Factura de venta Nº [ResumenCliente.EjercicioFactura]/[ResumenCliente.SerieFactura]/[ResumenCliente.NumeroFactura]

 

He probado con

{ApliEjercicio}

[ResumenCliente.EjercicioFactura]

[EjercicioFactura]

[!EjercicioFactura]

y no funciona de ninguna de las maneras, sólo en el campo Para, y cuando es de tipo texto.

  • 0

    Buenos días, 

    El parámetro Asunto y Cuerpo es sólo texto, no interpreta el nombre de un campo o una varapli.

    Salu2.

  • +1
    verified answer

    Hola.

    Es posible que esos campos solo puedan  funcionar en eventos programados (Scheduler).

    Y si no, por programacion puedes modificar el asunto o el cuerpo antes de ejecutarlos.Estan en la tabla 'lsysinformes':

           DatosPedido= VariableEjercicioPedido &"- "&  VariableSeriePedido &"- "&  VariableNumeroPedido

           CadWhere="sysid= 'GES_NombreInforme'"
           CadModifica="sysSubject;" & "Enviamos el pedido:  " &"/ "& DatosPedido
            Num=EjecutaModifica("lsysinformes",CadModifica,CadWhere)

     
                Sql="CabeceraPedidoCliente.EjercicioPedido=" & VariableEjercicioPedido
                Sql=Sql & " AND CabeceraPedidoCliente.SeriePedido='" & Variable.SeriePedido & "'"
                Sql=Sql & " AND CabeceraPedidoCliente.NumeroPedido=" & Variable.NumeroPedido

                Var2=ListadoEjecuta("GES_NombreInforme",Sql,"","PDF")

    Recuerda luego volverlos a dejar como estaban:

           DatosPedido= VariableContenidoInicial

           CadWhere="sysid= 'GES_NombreInforme'"
           CadModifica="sysSubject;" & "Enviamos el pedido:  " &"/ "& DatosPedido
            Num=EjecutaModifica("lsysinformes",CadModifica,CadWhere)

    Saludos

  • 0 in reply to JLAver

    Hola,

    Muchas gracias por la sugerencia, no es perfecta, ya que si varios usuarios envían a la vez diferentes facturas se podría entrar en conflicto y sacar los datos repetidos, pero es una ayuda.

    ¿Hay alguna forma de especificar en el MODO de ListadoEjecuta() que se envíe como "Mensaje con PDF adjunto" directamente? Ya se que se puede utilizar el * para que coja la opción por defecto del informe, pero normalmente es Pantalla o Impresora, y aunque sé que se podría duplicar el informe con otro nombre e indicarlo, no se si hay más opciones que las indicadas desde Logic Class :

    Modo de ejecución del informe:

    • "*". Ejecutar el informe según esté definido en el repositorio.
    • "A", "B" y "C". Mostrar el diálogo de impresión.
    • "S". Ejecutar el informe por pantalla.
    • "P". Ejecutar el informe por impresora.

    Un saludo y gracias por todo de antemano.

    Sergio Coscolín

  • 0 in reply to JLAver
    SUGGESTED

    Hola,

    Para aquellos menos duchos en los cálculos, pongo aquí el ejemplo que he preparado, y que funciona:

    EnviarPDF:

    BR = Chr (13) & Chr (10)

    Fra = RC_EjercicioFactura & "/" & RC_SerieFactura & "/" & RC_NumeroFactura

    Sql= "ResumenCliente.EjercicioFactura = '" & RC_EjercicioFactura & "' AND ResumenCliente.SerieFactura = '" & RC_SerieFactura & "' AND ResumenCliente.NumeroFactura = '" & RC_NumeroFactura & "'"

    Asunto = Apli.ApliNombreEmpresa & " - Factura de venta Nº " & Fra

    Mensaje = "Estimado cliente:" & BR & BR
    Mensaje = Mensaje & "Por la presente le comunicamos que hemos emitido la factura nº " & Fra & BR & BR
    Mensaje = Mensaje & "Fecha factura: " & Format(RC_FechaFactura ,"dd/mm/yyyy") & BR
    Mensaje = Mensaje & "Base imponible: " & RC_BaseImponible & " €" & BR
    Mensaje = Mensaje & "Total IVA: " & RC_TotalCuotaIva & " €" & BR
    Mensaje = Mensaje & "Total factura: " & RC_ImporteLiquido & " €" & BR & BR


    CadWhere = "sysid= 'GES_LisFacturaCliente"

    CadModifica = "sysSubject;" & Asunto & ";sysTexto;" & Mensaje

    Num = EjecutaModifica("lsysinformes", CadModifica, CadWhere)

    res = ListadoEjecuta("GES_LisFacturaCliente", Sql, "", "*")

    CadModifica = "sysSubject;Factura de venta Nº ;sysTexto;Estimado cliente:" & BR & BR & "Por la presente le comunicamos que hemos emitido la factura nº "

    Num = EjecutaModifica("lsysinformes", CadModifica, CadWhere)

    End

    Hay que dimensionar las variables necesarias en el apartado Campos: del cálculo

    Dim Apli.ApliNombreEmpresa As Campo (Apli,ApliNombreEmpresa) Cadena

    Dim res As Numero
    Dim Num As Numero
    Dim Sql As Cadena
    Dim Asunto As Cadena
    Dim Mensaje As Cadena
    Dim CadWhere As Cadena
    Dim CadModifica As Cadena
    Dim BR As Cadena
    Dim Fra As Cadena

    Y por supuesto, añadir una opción en el menú y/o barra de herramientas de la pantalla facturas, para ejecutar el código "EnviarPDF".

    Un saludo y gracias por todo de antemano.

    Sergio Coscolín

    P.D. He tendido que añadir un espacio entre "Chr" y el paréntesis que le sigue, porque me daba error al insertarlo aquí. En el código final habría que quitarlo.

  • 0 in reply to Coscolin

    Cuando ejecutas un informe con las opciones por defecto con el asterisco no hace caso del where que se le pasa en ListadoEjecuta, de hecho en algún informe que tengo que lanzo de modo individual las facturas o albaranes lo que hago es pasar los valores por varaplis.

    Me he acordado después de probar tu código y comprobar que he enviado más de 150 facturas antiguas a clientes que no debían de haber salido :-D




  • 0 in reply to Coscolin

    Y las varaplis de factura no están cargadas, deberías cargarlas previamente (baseiva, %iva, cuotaiva,... y los vencimientos).


  • 0 in reply to jjperis

    Yo las variables de factura, las tenía definidas con anterioridad de otros procesos, pero tienes razón.

    Tengo definida la consulta de ResumenCliente, y los campos de importes y demás.

    Dim ResumenCliente As Registro
    Dim RC_EjercicioFactura As Campo (ResumenCliente, EjercicioFactura) Numero
    Dim RC_SerieFactura As Campo (ResumenCliente, SerieFactura) Numero
    Dim RC_NumeroFactura As Campo (ResumenCliente, NumeroFactura) Numero
    Dim RC_ImporteLiquido As Campo (ResumenCliente, ImporteLiquido) Numero
    Dim RC_TotalCuotaIva As Campo (ResumenCliente, TotalCuotaIva) Numero
    Dim RC_BaseImponible As Campo (ResumenCliente, BaseImponible) Numero
    Dim RC_FechaFactura As Campo (ResumenCliente, FechaFactura) Cadena
  • 0 in reply to Coscolin

    Me refiero a que cuando imprimes la factura si la configuración de los datos del IVA es la que viene por defecto usa las varaplis BaseIva1, %Iva1, Cuotaiva1... al igual que los vencimientos: Estas varaplis no tienen valor cuando imprimes el informe suelto y salen vacíos los apartados del IVA y de los vencimientos de la factura.

  • 0 in reply to jjperis

    Hola,
    A mí sí que me funciona el WHERE de ListadoEjecuta, con la opción por defecto del *, pero hay que asegurarse de indicar en la consulta la tabla y el campo que aparezcan en la consulta del informe:

    Sql= "ResumenCliente.EjercicioFactura = '" & RC_EjercicioFactura & "' AND ResumenCliente.SerieFactura = '" & RC_SerieFactura & "' AND ResumenCliente.NumeroFactura = '" & RC_NumeroFactura & "'"

    Ya que si no, hace lo que dice, devuelve todos los resultados sin filtrar.

    En un principio hacía ésta selección, y se quedaba sin memoria porque no filtraba:

    Sql= "EjercicioFactura = '" & RC_EjercicioFactura & "' AND SerieFactura = '" & RC_SerieFactura & "' AND NumeroFactura = '" & RC_NumeroFactura & "'"

    Fue añadir la tabla y funcionar como debe.

  • 0 in reply to Coscolin

    Pues lamentablemente a mí no, aún estoy recibiendo e-mails preguntándome que por qué les he enviado facturas de enero y febrero  :-D

  • 0 in reply to jjperis

    Tienes razón, al mostrar un informe de factura con ListadoEjecuta no carga las varaplis y el informe queda sin IVAs y sin vencimientos factura.
    Me sugirieron otro método, en lugar de cargar las varAplis antes de ejecutar el informe, crear un informe con la consulta SQL con esa información.

    ¿Alguien que haya usado ese método me puede pasar la consulta SQL?

    Muchas gracias por todo de antemano.

  • 0 in reply to Coscolin

    Lo siento, lo tengo pendiente, aún no he tenido necesidad de generarlo.
    Habría que investigar como se leen los vencimientos y los IVA's y otra solución es cargar las varaplis a mano antes de lanzar el ListadoEjecuta

  • 0 in reply to jjperis

    Tengo el mismo problema cuando lanzo albaranes de forma automatica, no me carga las varaplis, ¿ Como puede cargar las varaplis antes de lanzar el listadoejecuta ?

  • 0 in reply to Jose eduardo ivison

    Cargándolas a mano justo antes de llamarlo, los totales de la cabecera,. el IVA de IvaResumenCliente (o el documento que sea), los vencimientos de la cartera de efectos,...

    Defines las varaplis y les das valor antes del ListadoEjecuta. Si solo hay un único tipo de IVA puedes leer el total de IVA y la base imponible de la cabecera y no usas varapli para el IVA.

    Dim Apli.BaseIva1 As Campo(Apli, BaseIva1) Numero

    Y luego por cálculo le das valor a las varaplis leyendo cada registro de IvaResumenCliente (comportamiento de la aplicación) o agrupándolas por tipo de IVA

  • 0 in reply to jjperis

    Gracias, funciona perfectamente.

    Solo hay una varaplli que no parece pillarme correctamente que es la que establece el número de copias del albarán, yo aplico la Apli.CampoNumeroCopias pero no parece hacer caso, siempre imprime solo una.

  • 0 in reply to Jose eduardo ivison

    Ese campo por lo que veo es de texto y ocupa 250. La Varapli NumeroCopiaenCurso en cambio es entera y como máximo admite 999. Quizás debas llama a ListadoEjecuta tantas veces como marque el documento y darle valor a NumeroCopiaEnCurso para que marque cuales son copia (si tienes el cartel).