Ver Mensaje Individual
  #7  
Antiguo 06-12-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Reputación: 29
Lepe Va por buen camino
Supongo que das la posibilidad al usuario de crear almacenes, pero aún así, en el ancho de un folio, ¿cuantas columnas esperas poner como máximo?

Para hacerlo vía SP, debes saber de antemano un máximo de columnas.

Cuando ese código lo metes en un SP, tienes que crear parámetros de salida al propio SP, y después ya en delphi pones en el SQL de un tquery:
Código SQL [-]
select  * from nombreStoreProcedure
ahora doble clic al Tquery y añades los campos persistentes..... aquí te aparecen los parámetros de salida del SP y ahora ya sí puedes hacer:

DatasetCAmpo1.Value

para enlazarlo al informe o a donde quieras.

Aquí te pongo un ejemplo real, que saca los totales por semanas de todos los trabajadores entre dos fechas determinadas, lo que devuelve es:
Código:
alias   semana1 semana2 totaljornales pagasextras    pagar   atrasados
manolo   300€     200€    500 €          0 €           500€        0€
jose     300€     200€    500 €         150 €          650€        0€
Código SQL [-]

CREATE PROCEDURE SPJORNALESAPAGAR (
    DESDE DATE,
    HASTA DATE)
RETURNS (
    ALIAS VARCHAR(25),
    CATEGORIA VARCHAR(25),
    SEMANA1 NUMERIC(10,2),
    SEMANA2 NUMERIC(10,2),
    TOTALJORNALES NUMERIC(10,2),
    ANTICIPOS NUMERIC(10,2),
    PAGASEXTRAS NUMERIC(10,2),
    PAGAR NUMERIC(10,2),
    ATRASADOS SMALLINT)
AS
DECLARE VARIABLE JORNALESATRASADOS NUMERIC(10,2);
DECLARE VARIABLE ANTICIPOSATRASADOS NUMERIC(10,2);
DECLARE VARIABLE PAGASEXTRASATRASADAS NUMERIC(10,2);
begin

  ATRASADOS = 0;
for select alias,  categoria,  sum(salario) from vwjornalobra
  where idtrabajador = :idtrabajador
        and fecha between :desde and :HASTA
        and pagado = 'No'
  group by alias, categoria
  into :alias, :categoria, :TOTALjornales do
begin
  totaljornales = coalesce(totaljornales, 0.0);

  select COALESCE(sum(salario),0.0) from vwjornalobra
  where idtrabajador = :idtrabajador
        and (fecha between encodeDate(1,1, extractyear(:desde)) and :Hasta)
        and pagado = 'No'
  into :jornalesatrasados;

  jornalesatrasados = coalesce(jornalesatrasados,0.0);

  if (totaljornales <> jornalesatrasados) then
    ATRASADOS = 1;

  select coalesce(sum(salario),0.0) from vwjornalobra
  where idtrabajador = :idtrabajador
        and fecha between :desde and :DESDE + 6
        and pagado = 'No'
  into :SEMANA1;

  select coalesce(sum(salario),0.0) from vwjornalobra
  where idtrabajador = :idtrabajador
        and fecha between :desde+7 and :HASTA
        AND pagado = 'No'
  into :SEMANA2;

  select coalesce(sum(Importe),0.0)  from Anticipo
    where ANTICIPO.Idtrabajador = :IDTRABAJADOR
     and anticipo.fecha between :desde and :HASTA
     and liquidado = 'No'
  into :ANTICIPOS;

  anticipos = coalesce(anticipos, 0.0);

    select coalesce(sum(Importe),0.0)  from Anticipo
    where ANTICIPO.Idtrabajador = :IDTRABAJADOR
     and (fecha between encodeDate(1,1, extractyear(:desde)) and :Hasta)
     and liquidado = 'No'
  into :anticiposatrasados;

  anticiposatrasados = coalesce(anticiposatrasados,0.0);

  if (ANTICIPOS <> anticiposatrasados) then
    ATRASADOS = ATRASADOS + 2;

  select coalesce(sum(Importe),0.0)  from PAGAEXTRA
    where Idtrabajador = :idtrabajador
     and fecha between :desde and :HASTA
     and liquidado = 'No'
  into :PAGASEXTRAS;

  select coalesce(sum(Importe),0.0)  from PAGAEXTRA
    where Idtrabajador = :idtrabajador
     and (fecha between encodeDate(1,1, extractyear(:desde)) and :Hasta)
     and liquidado = 'No'
  into :pagasextrasatrasadas;

  if (pagasextras <> pagasextrasatrasadas) then
    ATRASADOS = ATRASADOS + 4;

  PAGAR = :jornalesatrasados + :pagasextrasatrasadas - :anticiposatrasados;

  suspend; /*devolver un registro a delphi ya que he asignado todos los 
                parámetros de salida */
end; /* end del primer for select*/


end

Como ves, lo que hago es buscar en cada tabla y asignar el valor al parámetro de salida del SP
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita