Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Consulta procedimientos almacenados (https://www.clubdelphi.com/foros/showthread.php?t=45194)

rruffino 26-06-2007 01:27:20

Consulta procedimientos almacenados
 
Hola gente, estoy desarrollando mi primer cliente/servidor en interbase. Tengo unos 2000 usuarios a los cuales necesito generar la facturacion a todos en un determinado momento. Como la mayoria de los datos de los comprobantes son iguales (fecha de emision, periodo, vencimientos, etc) estoy pensando en hacer un procedimiento al que le pase esos valores y me genere los comprobantes para cada uno de los usuarios.
Mi idea es primero obtener todos los usuarios que estan en condiciones de ser facturados. Luego, por cada usuario, obtener los conceptos a facturar y generar la correspondiente factura. El tema es que no me doy cuenta como realizar esos anidamientos ya que de las formas en que probe y las bibliografias que consulte no encuentro nada parecido a lo que quiero hacer.
Hasta ahora esto es lo que tengo:

CREATE PROCEDURE GENERAR_COMPROBANTES (
FECHA_EMISION DATE,
FECHA_DESDE DATE,
FECHA_HASTA DATE,
PERIODO VARCHAR (15),
APLICA_MAYOR_COSTO SMALLINT)
RETURNS (
ID_USR INTEGER)
AS
declare variable NUM_USUARIO INTEGER;
BEGIN
/*Selecciono usuarios activos*/
for select id_usuario from usuario
where usuario.estado=0
into :ID_USR do

y aca deberia empezar a seleccionar de otras tablas, pero no me funciona.
Desde ya les agradezco y espero una respuesta.
Graciasssss.

kuan-yiu 26-06-2007 09:17:43

En Delphi es muy sencillo.
Creas una consulta que te devuelva los usuarios "facturables" y usas un bucle para lanzar una nueva consulta que te devuelva los datos de la factura.

Lepe 26-06-2007 11:30:45

Sin saber detalles de tablas y el procedimiento que debes seguir es difícil, pero bueno:
Código SQL [-]

CREATE PROCEDURE GENERAR_COMPROBANTES (
FECHA_EMISION DATE,
FECHA_DESDE DATE,
FECHA_HASTA DATE,
PERIODO VARCHAR (15),
APLICA_MAYOR_COSTO SMALLINT)
RETURNS (
ID_USR INTEGER)
AS
declare variable NUM_USUARIO INTEGER;
BEGIN
/*Selecciono usuarios activos*/
for select id_usuario from usuario
where usuario.estado=0
into :ID_USR do
begin /* por cada usuario que cumpla el criterio anterior, seleccionamos los conceptos */

   for select id_concepto, conceptos from tablaConceptos
   where tablaConceptos.id_usuario = :ID_USR into :Concepto do
   begin
      insert into factura(id_factura, concepto, id_usuario) 
      values (null, :Concepto, :ID_USR)
/* suponemos que la tabla factura tiene un trigger before insert
   que le dará un valor a su clave primaria id_factura */
   end;
end;

Más o menos, esa puede ser la idea, aunque el procedimiento sea totalmente distinto.

Saludos

rruffino 26-06-2007 13:08:14

Probare
 
Gracias Lepe, probare tu idea. Hacerlo desde delphi me parece que va a carecer de sentido mi cliente/servidor. La idea es hacerlo con procedures en la base. Es mas lo habia hecho en un comienzo desde delphi, pero demora bastante (cerca de 5 minutos para generar los 2000 comprobantes)
Saludos y gracias!!:rolleyes:


La franja horaria es GMT +2. Ahora son las 12:42:40.

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