PDA

Ver la Versión Completa : Corte de Caja


Ferrari
01-08-2008, 02:53:31
Hola a tod@s, ahora me toco ponerles 'gorro' estoy tratando de generar un reporte para el corte de caja y estoy trabajando con QReport y D7 en SQL...Los datos los muestro a traves de un cxGrid mas no se como separar en columnas de los datos de la sig. forma, ej:

*Entradas:
No. Factura | Nombre del Cliente | Tipo Mov. | Efectivo | CHeque | Tarjeta
========================================================
|101 .........JUAN PEREZ .............MOSTRADOR ..$ 100.00
|102 .........FER LOPEZ ...............VENTA ..........$ 200.00
|103 .........MARIA RIVAS ............VENTA ....................$ 800.00
|104 .........JUAN ORTEGA ...........MOSTRADOR .........................$ 500.00
========================================================
|................................................TOTALES: $ 300.00 $ 800.00 $ 500.00

Pd. los puntitos los utilice solo pra tratar de alinear las columnas:p

ContraVeneno
01-08-2008, 14:40:55
a caray... no veo cuál es el problema.

En quickreport utilizarías una banda "ColumHeader" que es donde van los encabezados; una banda detalle ("Detail") que es donde van los datos ya separados, según los acomodes, será el espacio que tenga cada uno; y una banda tipo "Summary" que es donde van las sumas totales.

No veo cuál es el problema. :confused:

Ferrari
01-08-2008, 14:59:47
El detalle es mas que nada en acomodar los datos x columna en el 'Detail', es decir...la fila que sea de efectivo en la 'Columna' de Efectivo, si la fila viene con cheque...que aparezca en la columna de cheque..etc. Lo del encabezado y lo de las sumas si le entiendo. Grx.
Se me esta ocurriendo crear una tabla temporal y hacerle un 'barrido a la consulta 'global' para ir re-acomodando la info x columnas:p

ContraVeneno
01-08-2008, 15:22:33
Si tienes los datos separados, no le veo problema :confused::confused:

Solo colocas un TQRDBText enlazado al campo respectivo y colocado en la posición necesaria. :confused:

Solamente que tengas el dato del efectivo / Cheque / Tarjeta en un solo campo, algo como:

Cantidad FormaPago
100 Cheque
200 Tarjeta
300 Efectivo
100 Tarjeta

Por cierto, no recomendaría diferenciar los tipos de pago con letras, es mucho más rápido y fácil tener un catálogo de tipos y un identificador numérico para cada uno.

Entonces lo que tendrías que utilizar es un TQRExpr en lugar de TDBText.
En la propiedad expression, pondrías algo como: If(FormaPago='Cheque',Cantidad,'')

Pero sigo sin entender cuál es la situación exacta en la que estas.

coso
01-08-2008, 15:49:25
Deberias usar un qrdbtext para cada campo, y estos los alineas segun te convengan, en la banda detail. Respecto a lo que dices de ponerlo en una columna u otra segun cobro, puedes usar la QRBandBeforePrint, algo asi


if tabla.FieldByName('PAGO') = 'CHEQUE' then QRDBText_cantidad.Left := QRText_Titulo_Cheque.Left;
else
if tabla.FieldByName('PAGO') = 'TARJETA' then QRDBText_cantidad.Left := QRText_Titulo_Tarjeta.Left;
else
if tabla.FieldByName('PAGO') = 'EFECTIVO' then QRDBText_cantidad.Left := QRText_titulo_Efectivo.Left;


mas o menos.

coso
01-08-2008, 15:57:05
para las sumas finales, deberias hacer consultas, antes o despues, como


q.Active := false;
q.SQL.Text := 'select pago, sum(total) as TOTAL_CHEQ from tabla where PAGO = ''CHEQUES''';
q.Active := true;

total_cheq := q.FieldByName('TOTAL_CHEQ').Asfloat

etc...


y poner unos QRLabel en un summary band con esos valores.

saludos.

Caro
01-08-2008, 16:52:02
Por lo que entiendo, tiene los datos en un solo campo.


Solamente que tengas el dato del efectivo / Cheque / Tarjeta en un solo campo, algo como:

Cantidad FormaPago
100 Cheque
200 Tarjeta
300 Efectivo
100 Tarjeta


Entonces lo que tendrías que utilizar es un TQRExpr en lugar de TDBText.
En la propiedad expression, pondrías algo como: If(FormaPago='Cheque',Cantidad,'')


Yo también lo haría con un QRExpr, solo que necesitarías 3 QRExpr, uno para cada columna y utilizarlo de la forma que te explica ContraVeneno:

QrExpr1 -> Expresion -> If(FormaPago='Cheque',Cantidad,'')
QrExpr2 -> Expresion -> If(FormaPago='Tarjeta',Cantidad,'')
QrExpr3 -> Expresion -> If(FormaPago='Efectivo',Cantidad,'')

Saluditos

enecumene
01-08-2008, 18:20:49
También se puede usar con una sentencia SQL utilizando CASE WHEN.

Saludos.

Ferrari
01-08-2008, 21:14:58
Gracias a Tod@s por su aportacion...ya quedo solucionado el problema con el QRExpr y he podido nuevamente respirar :D.
Saludos a Contraveneno pork vi que eres tambien de Torreon, Coah. Hay si sabes de alguien para desarrollo en Delphi te lo encargo paisano.