Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Modificar tabla para banda detalle (https://www.clubdelphi.com/foros/showthread.php?t=58594)

Vlady 24-07-2008 21:13:37

Modificar tabla para banda detalle
 
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

Código SQL [-]

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

Código:

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

Código:

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 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í:

Código SQL [-]
   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:

Código SQL [-]
/*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.

Código:

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
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
Código:

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


La franja horaria es GMT +2. Ahora son las 13:41:30.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi