PDA

Ver la Versión Completa : Modificar tabla para banda detalle


Vlady
24-07-2008, 21:13:37
Hola amigos del club delphi

Tengo el siguiente inconveniente creo una consulta mediante un procedimiento y esta información la quiero mostrar en un reporte en una banda de detalle pero el problema radica en quiero q no existe ninguna casilla en null en el reporte ya q esto me desperdicia espacio, quiero que la tabla siguiente

este es el procedimiento que me genera la tabla



begin
/*FACTURAS QUE ME EXPORTAN SOLO EL IVA*/
SELECT DESCUENTO FROM FACTURA WHERE N_FACTURA = :FACTURA INTO DESCUENTO;
FOR SELECT S.IVA, SUM(I.IVA), SUM(I.VALOR) FROM SERVICIO S, ITEMSERVICIO I, ORDEN_SERVICIO O, FACTURA F
WHERE I.SERVICIO = S.CODIGO AND I.ORDEN = O.N_ORDEN AND F.N_FACTURA = :FACTURA AND F.NORDEN = O.n_orden GROUP BY
S.IVA INTO :PORCENTAJE, :TIVA, :TTOTAL DO
BEGIN
NFAC = :FACTURA;
BASE = :TTOTAL/(1+:PORCENTAJE/100);
BASE1 = :BASE;
BASE = :BASE - (BASE*DESCUENTO/100);
TIVA = BASE1 * (PORCENTAJE/100);
TTOTAL = BASE + TIVA;
suspend;
END

PORCENTAJE = NULL;
TIVA = NULL;
ttotal = NULL;
BASE = NULL;

/*FORMAS DE PAGO*/
SELECT N_ORDEN FROM ORDEN_SERVICIO WHERE N_FACTURA = :factura
INTO :ORDEN;
FOR SELECT FORMA_PAGO, sum(VALOR) from ANTICIPO WHERE N_ORDEN = :ORDEN group by forma_pago
INTO :FPAGO, :VFPAGO DO
BEGIN
NFAC = :FACTURA;
suspend;
end


end




Tabla arrojada


Porcentaje IVA TOTAL BASE FPAGO VALOR
10 19.127 210.400 121.272 <null> <null>
16 1.972 14.300 12.327 <null> <null>
<null> <null> <null> <null> CXC 119.500
<null> <null> <null> <null> EFECTIVO 65.000
<null> <null> <null> <null> T.C. 15.000
<null> <null> <null> <null> T.D. 25.200




Si existe alguna forma de tranformala en esta que me optimiza los espacios en la banda detalle


Porcentaje IVA TOTAL BASE FPAGO VALOR
10 19.127 210.400 121.272 CXC 119.500
16 1.972 14.300 12.327 EFECTIVO 65.000
<null> <null> <null> <null> T.C. 15.000
<null> <null> <null> <null> T.D. 25.200




Utilizo Delphi 7, firebird 2.0 y QuickReport 4.05 espero que haya quedado clara la duda.

Gracias

TOPX
24-07-2008, 21:51:05
Hola Vlady,

Se me ocurre que para un único FOR SELECT podría hacer INNER JOIN entre todas las tablas, menos con ANTICIPO (en último lugar), en cuyo caso haría un RIGHT OUTER JOIN.

De esta manera, mostraría los "valores con IVA" y los "anticipos" juntos; aún si estos "anticipos" no tienen correspondiente registro entre los "valores con IVA", sólo dejaría los primeros campos como NULL.

Vlady
24-07-2008, 21:56:21
Gracias TOPX (http://www.clubdelphi.com/foros/member.php?u=31292) por tus sugerencias pero no te entiendo muy bien lo que quieres decirme, gracias

TOPX
24-07-2008, 22:06:56
Lo que quise decir es algo así:


FOR SELECT
S.IVA, SUM(I.IVA), SUM(I.VALOR),
A.FORMA_PAGO, sum(A.VALOR)
FROM SERVICIO S
INNER JOIN ITEMSERVICIO I ON S.CODIGO = I.SERVICIO
INNER JOIN ORDEN_SERVICIO O ON O.N_ORDEN = I.ORDEN
INNER JOIN FACTURA F ON O.N_ORDEN = F.NORDEN
RIGHT OUTER JOIN ANTICIPO A ON O.N_ORDEN = A.N_ORDEN
WHERE F.N_FACTURA = :FACTURA
GROUP BY S.IVA, A.FORMA_PAGO
INTO
:PORCENTAJE, :TIVA, :TTOTAL,
:FPAGO, :VFPAGO DO
BEGIN
NFAC = :FACTURA;
BASE = :TTOTAL/(1+:PORCENTAJE/100);
BASE1 = :BASE;
BASE = :BASE - (BASE*DESCUENTO/100);
TIVA = BASE1 * (PORCENTAJE/100);
TTOTAL = BASE + TIVA;

SUSPEND;
END


Lo hice con la mano izquierda y sin mirar, sólo espero que se entienda la idea.

Vlady
24-07-2008, 22:36:22
Gracias topx por tus sugerencias organice la consulta y quedo asi:


/*FACTURAS QUE ME EXPORTAN SOLO EL IVA*/
SELECT DESCUENTO, NORDEN FROM FACTURA WHERE N_FACTURA = :FACTURA INTO :DESCUENTO, :ORDEN;

FOR SELECT S.IVA, SUM(I.IVA), SUM(I.VALOR), A.FORMA_PAGO, sum(A.VALOR)
FROM SERVICIO S
INNER JOIN ITEMSERVICIO I ON S.CODIGO = I.SERVICIO
INNER JOIN ORDEN_SERVICIO O ON O.N_ORDEN = I.ORDEN
RIGHT OUTER JOIN ANTICIPO A ON O.N_ORDEN = A.N_ORDEN
WHERE O.N_ORDEN = :ORDEN
GROUP BY S.IVA, A.FORMA_PAGO
INTO :PORCENTAJE, :TIVA, :TTOTAL, :FPAGO, :VFPAGO DO
BEGIN
NFAC = :FACTURA;
BASE = :TTOTAL/(1+:PORCENTAJE/100);
BASE1 = :BASE;
BASE = :BASE - (BASE*DESCUENTO/100);
TIVA = BASE1 * (PORCENTAJE/100);
TTOTAL = BASE + TIVA;
suspend;
END




Pero ahora me arroja por cada forma de pago los IVAS y por cada IVA LAS FORMA DE PAGO es decir que me aparecen 4 IVAS del 10 y 2 Formas de pago para CXC por ejemplo.


Porcentaje IVA TOTAL BASE FPAGO VALOR
10 19.127 210.400 121.272 CXC 119.500
16 1.972 14.300 12.327 CXC 119.500
10 19.127 210.400 121.272 EFECTIVO 65.000
16 1.972 14.300 12.327 EFECTIVO 65.000
10 19.127 210.400 121.272 T.C. 15.000
16 1.972 14.300 12.327 T.C. 15.000
10 19.127 210.400 121.272 T.D. 25.200
16 1.972 14.300 12.327 T.D. 25.200


Depronto puede ser una sentencia que falta? o Realizar otra consulta sobre la tabla resultante en otro procedimiento?

TOPX
24-07-2008, 22:58:18
Ay, debí prever que obtendría un producto cartesiano :( ...

Creo que será por la falta de endorfinas últimamente, pero sólo se me ocurre preguntar:

¿Y si le deja los JOIN completos? (con FACTURA)

Vlady
24-07-2008, 23:05:01
Gracias TOPX (http://www.clubdelphi.com/foros/member.php?u=31292)
la tabla factura no es necesaria ya que con el numero de orden se puede hacer todo la relacion Factura - Orden de servicio es uno a uno, ademas las sumas de las formas de pago me las duplica por el numero der registros, esta tabla la voy a utilizar en el Quick report en una banda detalle, no se si existe una forma para que me muestre en el mismo renglon la información de la siguiente tabla

Porcentaje IVA TOTAL BASE FPAGO VALOR
10 19.127 210.400 121.272 <null> <null>
16 1.972 14.300 12.327 <null> <null>
<null> <null> <null> <null> CXC 119.500
<null> <null> <null> <null> EFECTIVO 65.000
<null> <null> <null> <null> T.C. 15.000
<null> <null> <null> <null> T.D. 25.200


Alguien me puede ayudar