Visual Basic Foro
Programación => Visual Basic 6 => Mensaje iniciado por: gasafonso 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
(http://s28.postimg.org/s6qq5yo3t/Reporte.jpg) (http://postimg.org/image/s6qq5yo3t/)
y mi forma de caragarlo es asi
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
-
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
-
Lo que quiero es que haga un "saldo" hasta la fecha X y después de ahi que muestre cada registro. se entiende?
Saludos
-
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 :)
-
no pero en tal caso es >= 20-10-2014
-
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.
-
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
-
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
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
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
-
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"
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:
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
-
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 ?
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
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
-
Supongamos que tienes en un Dtpicker la fecha, tu codigo seria +/-:
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
-
gracias amigo YAcosta !!!!!!
Veo como lo implemento
-
Pregunta ........alguien tiene hecho algo mas practico y simple para generar este informe ?
gracias