Autor Tema: imprimir informe  (Leído 6521 veces)

0 Usuarios y 1 Visitante están viendo este tema.

gasafonso

  • Megabyte
  • ***
  • Mensajes: 175
  • Reputación: +4/-10
    • Ver Perfil
imprimir informe
« en: Octubre 20, 2014, 03:22:09 pm »
Hola amigos del Foro, tengo un problema con mis informes y es que al momento de imprimir imprimen desde el registro 1, entonces llega un momento que los clientes que tienen muchos movimientos cada vez que uno quiere tirar siu estado de cuenta tira desde el movimiento uno

Quiero saber si se puede hacer por ejemplo que le pongas algun parametro de fechas desde por ej 01/9/14

entonces el informe diga

saldo desde 01/9/14                                                                                $1254.00




y mi forma de caragarlo es asi

Código: (VB) [Seleccionar]
For I = f_detalleMensual.grilladetalle.Rows - f_detalleMensual.Text3.text To f_detalleMensual.grilladetalle.Rows - 1 '1 To f_detalleMensual.grillaDetalle.Rows - 1
   If f_detalleMensual.grilladetalle.TextMatrix(I, 1) <> "" Then
     Printer.CurrentX = 2
     Printer.Print f_detalleMensual.grilladetalle.TextMatrix(I, 0);
     Printer.CurrentX = 5
     Printer.Print f_detalleMensual.grilladetalle.TextMatrix(I, 1);
     Printer.CurrentX = 7
     Printer.Print f_detalleMensual.grilladetalle.TextMatrix(I, 2);
     Printer.CurrentX = 12
     '************************Alinear una columna dentro del PicturBox para imprimir**************************************
     Printer.CurrentX = 12 + ((1.5 - vp.TextWidth(Format(f_detalleMensual.grilladetalle.TextMatrix(I, 4), "#,##0.00"))))
     Printer.Print f_detalleMensual.grilladetalle.TextMatrix(I, 4);
     Printer.CurrentX = 15
     '************************Alinear una columna dentro del PicturBox para imprimir**************************************
     Printer.CurrentX = 15 + ((1.5 - vp.TextWidth(Format(f_detalleMensual.grilladetalle.TextMatrix(I, 5), "#,##0.00"))))
     Printer.Print f_detalleMensual.grilladetalle.TextMatrix(I, 5); ' ojo ; no baja el renglón
     Printer.CurrentX = 18
     '************************Alinear una columna dentro del PicturBox para imprimir**************************************
     Printer.CurrentX = 18 + ((1.5 - vp.TextWidth(Format(f_detalleMensual.grilladetalle.TextMatrix(I, 6), "#,##0.00"))))
     Printer.Print f_detalleMensual.grilladetalle.TextMatrix(I, 6)
   End If
 Next

Donde "grilladetalle" es mi msflexigrid


Gracias y saludos

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:imprimir informe
« Respuesta #1 en: Octubre 20, 2014, 04:07:39 pm »
Si se puede, es como dices, filtralo por fecha, pero tendrás que hacer dos consultas.

Consulta1: Saldo a la fecha X (X es el dia anterior)
Consulta2: Movimientos desde la fecha Y (Y es el dia siguiente de X)

Estamos hablando de aplicar esto en el momento que lanzas el query (sql), o sea el tema de las fechas va en tu consulta, ejemplo, para Consulta1: ... where fecha < "tufecha" y para consulta2: ...where fecha >= "tufecha"

Saludos
Me encuentras en YAcosta.com

gasafonso

  • Megabyte
  • ***
  • Mensajes: 175
  • Reputación: +4/-10
    • Ver Perfil
Re:imprimir informe
« Respuesta #2 en: Octubre 20, 2014, 04:14:52 pm »
Lo que quiero es que haga un "saldo" hasta la fecha X  y después de ahi que muestre cada registro. se entiende?

Saludos

Waldo

  • Gigabyte
  • ****
  • Mensajes: 264
  • Reputación: +22/-0
    • Ver Perfil
Re:imprimir informe
« Respuesta #3 en: Octubre 20, 2014, 04:15:14 pm »
atenti si es para ver solo un dia, fecha hasta tiene que ser "fecha 23:59:59" o fecha +1 (es decir dia prox) , si no queda por ej > 20-10-2014 and < 20-10-2014 y no devuelve ningun registro :)

gasafonso

  • Megabyte
  • ***
  • Mensajes: 175
  • Reputación: +4/-10
    • Ver Perfil
Re:imprimir informe
« Respuesta #4 en: Octubre 20, 2014, 04:28:14 pm »
no pero en tal caso es >=  20-10-2014


YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:imprimir informe
« Respuesta #5 en: Octubre 20, 2014, 04:30:38 pm »
Lo que quiero es que haga un "saldo" hasta la fecha X  y después de ahi que muestre cada registro. se entiende?

Saludos

Pense que quedaba obvio que un saldo lo sacas haciendo un SUM en tu sql. Ahora dependerá como apliques el SUM, si  tu campo usas negativos o no, o si tienes un campo flag, o si lo tienes en dos tablas, etc.
Me encuentras en YAcosta.com

gasafonso

  • Megabyte
  • ***
  • Mensajes: 175
  • Reputación: +4/-10
    • Ver Perfil
Re:imprimir informe
« Respuesta #6 en: Octubre 20, 2014, 06:44:19 pm »
en realidad tengo un campo que suma con las facturas y en la mismo campo los pagos que REstan

lo que no se como imprimirlo en su comienzo ni como hacer el filtro por fecha

Voy a ver si llego a casa y pongo la sentencia SQL y publico


GRacias

gasafonso

  • Megabyte
  • ***
  • Mensajes: 175
  • Reputación: +4/-10
    • Ver Perfil
Re:imprimir informe
« Respuesta #7 en: Octubre 21, 2014, 12:27:07 pm »
en realidad tengo un campo que suma con las facturas y en la mismo campo los pagos que REstan

lo que no se como imprimirlo en su comienzo ni como hacer el filtro por fecha

Voy a ver si llego a casa y pongo la sentencia SQL y publico


GRacias

Haber mi SQL es esta

Código: (VB) [Seleccionar]
If txtbuscarCodigo.text <> "" Then
     dsdetallecliente.RecordSource = "Select Fecha,Tipocomprobante as Tipo,NroComprobante as Comprob,Nombrecliente as Nombre,Importe,Pago as Credito,Saldo,SALDO AS SALDO1 from tbdetallecliente where codigopago like ('" & txtbuscarCodigo.text & "*') and (condicion= 9) and not estadoComprob= 'A' order by numinterno"
     grillaDetalle.Visible = True
     Text4.BackColor = 12632256
     Text4.text = "Detalle de Facturas de Ventas"

    If dscliente.Recordset.EOF Then
    MsgBox "Ingrese un Codigo Existente"
    Exit Sub
    Else
    txtNombreCliente.text = UCase(IIf(IsNull(dscliente.Recordset!Nombre), "", dscliente.Recordset!Nombre))
    txtcodcliente.text = IIf(IsNull(dscliente.Recordset!Codigo), "", dscliente.Recordset!Codigo)
    dsdetallecliente.Refresh
  End If
 
  End If

y en la base de DATOs tengo una consulta con esta SQL que saco el saldo

Código: (VB) [Seleccionar]
SELECT tbDetalleCliente.codigoPago AS Codigo, tbDetalleCliente.NombreCliente AS Cliente, Sum([importe]+[PAGO]) AS saldo
FROM tbDetalleCliente
WHERE (((tbDetalleCliente.condicion)=9) AND ((tbDetalleCliente.EstadoComprob)<>"A"))
GROUP BY tbDetalleCliente.codigoPago, tbDetalleCliente.NombreCliente
ORDER BY tbDetalleCliente.NombreCliente;

Ahora bien como armo el informe ?


ggracias


PD: Si alguno se le ocurre alguna forma mas sintetica , practica y mejor , escucho comentarios

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:imprimir informe
« Respuesta #8 en: Octubre 21, 2014, 12:47:33 pm »
Claro, en ningún caso filtras por fecha.
La consulta del saldo debe traerte un solo registro y seria mas o menos:

Supongamos que quieres los movimientos desde el 01/10/2014, haremos
FechaDada = "01/10/2014"

Código: (VB) [Seleccionar]
SELECT tbDetalleCliente.codigoPago AS Codigo, tbDetalleCliente.NombreCliente AS Cliente, Sum([importe]+[PAGO]) AS saldo
FROM tbDetalleCliente
WHERE (((tbDetalleCliente.condicion)=9) AND ((tbDetalleCliente.EstadoComprob)<>"A"))
AND TuCampoFecha < FechaDada
GROUP BY tbDetalleCliente.codigoPago, tbDetalleCliente.NombreCliente
ORDER BY tbDetalleCliente.NombreCliente

saldo entonces lo almacenas en alguna variable o label para mostrarlo: "El saldo hasta el 30/09/2014 es XXX.XX" (30/09/2014 lo sacas restando 1 a tu variable fecha)

Y luego para traer los registros:
Código: (VB) [Seleccionar]
Select Fecha,Tipocomprobante as Tipo,NroComprobante as Comprob,Nombrecliente as Nombre,Importe,Pago as Credito,Saldo,SALDO AS SALDO1
from tbdetallecliente
where codigopago like ('" & txtbuscarCodigo.text & "*') and (condicion= 9) and not estadoComprob= 'A'
AND TuCampoFecha >= FechaDada
order by numinterno

Aunque en esto ultimo yo preferiría usar Between puesto que este mismo código después me puede servir para ver los movimientos SOLO de un rango de fecha pasada.

OffTopic: Esta raro esta parte de tu sql: "...,Saldo,SALDO AS SALDO1 "

Saludos
Me encuentras en YAcosta.com

gasafonso

  • Megabyte
  • ***
  • Mensajes: 175
  • Reputación: +4/-10
    • Ver Perfil
Re:imprimir informe
« Respuesta #9 en: Octubre 21, 2014, 02:44:31 pm »
Pero como le paso el dato a la consulta de la BD de la  variable fechadada , por ejemplo desde un imputbox o algo por el estilo ?


Código: (VB) [Seleccionar]
SELECT tbDetalleCliente.codigoPago AS Codigo, tbDetalleCliente.NombreCliente AS Cliente, Sum([importe]+[PAGO]) AS saldo
FROM tbDetalleCliente
WHERE (((tbDetalleCliente.condicion)=9) AND ((tbDetalleCliente.EstadoComprob)<>"A"))
AND TuCampoFecha < FechaDada
GROUP BY tbDetalleCliente.codigoPago, tbDetalleCliente.NombreCliente
ORDER BY tbDetalleCliente.NombreCliente

y como almaceno el "saldo " ?

Ademas les cuento que yo primero lo cargo en un msflexigrid a la sentencia SQL

Código: (VB) [Seleccionar]
SELECT tbDetalleCliente.codigoPago AS Codigo, tbDetalleCliente.NombreCliente AS Cliente, Sum([importe]+[PAGO]) AS saldo
FROM tbDetalleCliente
WHERE (((tbDetalleCliente.condicion)=9) AND ((tbDetalleCliente.EstadoComprob)<>"A"))
AND TuCampoFecha < FechaDada
GROUP BY tbDetalleCliente.codigoPago, tbDetalleCliente.NombreCliente
ORDER BY tbDetalleCliente.NombreCliente

y luego cargo en un picturebox lo que seria como la vista previa y recien ahi lo mando a imprimir apretando un boton

gracias

PD: con respecto a esto

OffTopic: Esta raro esta parte de tu sql: "...,Saldo,SALDO AS SALDO1 "

El primer saldo es un campo que lleva el tipo de comprobante que es , A, B o 0 si es recibo me dio mucha paja cambiarlo jua jua
« última modificación: Octubre 21, 2014, 03:07:33 pm por gasafonso »

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:imprimir informe
« Respuesta #10 en: Octubre 21, 2014, 03:14:56 pm »
Supongamos que tienes en un Dtpicker la fecha, tu codigo seria +/-:

Código: (VB) [Seleccionar]
Dim rs              As New ADODB.Recordset
sql = "SELECT tbDetalleCliente.codigoPago AS Codigo, tbDetalleCliente.NombreCliente AS Cliente, " & _
"Sum([importe]+[PAGO]) AS saldo FROM tbDetalleCliente " & _
"WHERE (((tbDetalleCliente.condicion)=9) AND ((tbDetalleCliente.EstadoComprob)<>"A")) " & _
"AND TuCampoFecha < '" & Format(DtPicker1.Value, "YYYY/MM/DD") & " " & _
"GROUP BY tbDetalleCliente.codigoPago, tbDetalleCliente.NombreCliente " & _
"ORDER BY tbDetalleCliente.NombreCliente"

rs.Open sql, dB, 1, 1

Y luego ese rs lo pueblas en el grid. Checa bien el tema del formato de la fecha. No te paso el codigo con InputBox porque nunca me gusto usar eso y pues no tengo nada de memoria de como va el script de eso pero es similar.

Y con el del Sum es lo mismo, armas la cadena sql con el parametro de fecha y luego el resultado lo recibes en algun control: Ejem:
MiLabel = rs!Saldo

Saludos
« última modificación: Octubre 21, 2014, 03:21:08 pm por YAcosta »
Me encuentras en YAcosta.com

gasafonso

  • Megabyte
  • ***
  • Mensajes: 175
  • Reputación: +4/-10
    • Ver Perfil
Re:imprimir informe
« Respuesta #11 en: Octubre 22, 2014, 11:51:00 am »
gracias amigo YAcosta  !!!!!!

Veo como lo implemento

gasafonso

  • Megabyte
  • ***
  • Mensajes: 175
  • Reputación: +4/-10
    • Ver Perfil
Re:imprimir informe
« Respuesta #12 en: Octubre 22, 2014, 03:05:28 pm »
Pregunta ........alguien tiene hecho algo mas practico y  simple para generar este informe ?


gracias