Foros Club Delphi

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

NickName 26-04-2004 07:10:20

Consulta Complicada
 
Hola...
Necesito hacer una consulta donde tengo que involucrar como 5 tablas, que son:

EncNotas
EncFacturas

donde registro las ventas diarias, que pueden ser ventas con Notas o Facturas, y otras tablas que son:

AbonosNotas
AbonosFacturas

donde registro los abonos de las ventas a credito, y por ultimo una tabla de:

Gastos

donde registro los gastos del dia.

Lo que necesito es hacer un reporte de las ventas diarias en ese reporte tengo que poner las ventas que se hicieron con notas y facturas y todos los abonos que se hicieron en esa fecha para sumar los abonos con las notas y facturas hechas, y por ultimo restarle los gastos del dia.

la verdad solo he hecho consultas simples con sql y no soy un experto, si algien me pudiera dar una idea de como hacer lo que quiero se los agradeceria mucho...

Saludos...

gendelphi 26-04-2004 09:23:07

Como no proporcionas la estructura de tus tablas, en lo unico que puedo ayudarte, es diciendote que vas a tener que hechar mano de: joiner's, vistas e incluso de procedimientos almacenados, dependiendo del motor de bases de datos que estes usando.

NickName 27-04-2004 06:29:39

Gracias por contestar.

Uso InterBase 6 Open Source y Delphi 6.

los componentes IBx.

CREATE TABLE "ENCABEZADONOTA"
(
"IDENCABEZADONOTA" "ID",
"TIPOVENTA" "CADENA",
"VENDEDOR" "CADENA",
"CLIENTE" "CADENA",
"PLAZO" "CADENA",
"FECHALIMITEPAGO" DATE,
"ENGANCHE" DECIMAL(15, 2) Default 0.00,
"RESTO" DECIMAL(15, 2) Default 0.00,
"LUGAREXPEDICION" "CADENA",
"VIAEMBARQUE" "CADENA",
"NUMPEDIDO" "CADENA",
"FECHAVENTA" DATE Default 'Now',
"TOTAL" DECIMAL(15, 2) Default 0.00,
"SUBTOTAL" DECIMAL(15, 2) DEFAULT 0.00,
"IVA" DECIMAL(15, 2) DEFAULT 0.00,
"OBSNOTA" BLOB SUB_TYPE TEXT SEGMENT SIZE 80 CHARACTER SET ISO8859_1,
PRIMARY KEY ("IDENCABEZADONOTA")
);

CREATE TABLE "ENCABEZADOFAC"
(
"IDENCABEZADOFAC" "ID",
"TIPOVENTA" "CADENA",
"VENDEDOR" "CADENA",
"CLIENTE" "CADENA",
"PLAZO" "CADENA",
"FECHALIMITEPAGO" DATE,
"ENGANCHE" DECIMAL(15, 2) Default 0.00,
"RESTO" DECIMAL(15, 2) Default 0.00,
"LUGAREXPEDICION" "CADENA",
"VIAEMBARQUE" "CADENA",
"NUMPEDIDO" "CADENA",
"FECHAVENTA" DATE Default 'Now',
"TOTAL" DECIMAL(15, 2) Default 0.00,
"SUBTOTAL" DECIMAL(15, 2) DEFAULT 0.00,
"IVA" DECIMAL(15, 2) DEFAULT 0.00,
"OBSFACTURA" BLOB SUB_TYPE TEXT SEGMENT SIZE 80 CHARACTER SET ISO8859_1,
PRIMARY KEY ("IDENCABEZADOFAC")
);

CREATE TABLE "ABONOSNOTA"
(
"IDABONONOTA" "ID",
"IDENCABEZADONOTA" "ID",
"VENDEDOR" VARCHAR(50),
"CANTIDAD" DECIMAL(15, 2) Default 0.00,
"FECHAPAGO" DATE,
"FECHAVENCIMIENTO" DATE,
"INTERES" DECIMAL(15, 2) DEFAULT 0.00,
"TOTAL_A_PAGAR" DECIMAL(15, 2) DEFAULT 0.00,
"SUPAGO" DECIMAL(15, 2) DEFAULT 0.00,
"PAGADO" "SI_NO",
PRIMARY KEY ("IDABONONOTA")
);

CREATE TABLE "ABONOSFAC"
(
"IDABONOFAC" "ID",
"IDENCABEZADOFAC" "ID",
"VENDEDOR" VARCHAR(50),
"CANTIDAD" DECIMAL(15, 2) Default 0.00,
"FECHAPAGO" DATE,
"FECHAVENCIMIENTO" DATE,
"INTERES" DECIMAL(15, 1) DEFAULT 0.00,
"TOTAL_A_PAGAR" DECIMAL(15, 2) DEFAULT 0.00,
"SUPAGO" DECIMAL(15, 2) DEFAULT 0.00,
"PAGADO" "SI_NO",
PRIMARY KEY ("IDABONOFAC")
);

CREATE TABLE "GASTOS"
(
"IDGASTOS" "ID" NOT NULL,
"FECHA" DATE DEFAULT 'Now',
"AUTORIZO" "CADENA",
"SOLICITO" "CADENA",
"CONCEPTO" BLOB SUB_TYPE TEXT SEGMENT SIZE 80 CHARACTER SET ISO8859_1,
"CANTIDAD" DECIMAL(15, 2),
CONSTRAINT "PK_GASTOS" PRIMARY KEY ("IDGASTOS")
);

Ojala y me puedan ayudar....

Saludos.

jachguate 28-04-2004 07:20:58

Hola nickname.

Cuando se te pida poner las estructuras de tus tablas, te recomiendo no pegar simplemente las sentencias create table, pues, salvo que tengas un pharser de SQL integrado, es bastante dificil de leer. Es mejor poner algun esquema de la forma:

Código:

EncabezadoNota
==============
id        Entero
TipoVenta VarChar
Vendedor  VarChar
Etc. etc.

También es deseable que indiques explicitamente las relaciones entre tablas, y cualquier otro dato importante.

aparentemente tus tablas no tienen ninguna relación... por ello podes crear un stored procedure que te devuelva los datos que requeris... algo como:

Código SQL [-]
Create Procedure 
resumen_diario (fecha Date)
returns (
  TotalFacturas  Decimal(15,2),
  TotalNotas      Decimal(15,2),
   etc
)
AS
Begin
  Select sum(total)
    from EncabezadoFac
   where fechaventa = :fecha
    into :TotalFacturas;
  /*
    Añadir los otros selects que resuman las notas, abonos y gastos 
    para por último añadir:
  */
  Suspend;
end
^

Su uso luego sería

Código SQL [-]
Select *
  from resumen_diario('2004-01-01');

Hasta luego.

;)

añadido: La sintaxis la he puesto de memoria... asi que puedo fallar fácilmente, pero la idea si está bien plasmada....

NickName 29-04-2004 03:46:07

Tienes razon pero no tenia mucho tiempo...

Cita:

aparentemente tus tablas no tienen ninguna relación...
Entre EncabezadoNota y Encabezado Factura no hay ni entre los Gastos, si hay entre EncabezadoNota y AbonosNota tambien en EncabezadoFactura y AbonosFac...

Gracias por la respuesta se me hace interezante lo intentare de esa forma, ya que siempre escuchaba lo de los Procedimientos Almacenados pero nunca abia entendido ninguno hasta hoy que me pucistes el ejemplo, al que si le entiendo, y por lo tanto un buen libro que me puedas recomendar para aprender sobre los Procedimientos almacenados...

Gracias..
Saludos

jachguate 29-04-2004 04:31:54

Por lo pronto, este artículo de Alfonso Ricaño Bringas te sirve para iniciar.

Hasta luego.

;)

NickName 29-04-2004 07:33:31

Muchas gracias..

Saludos.

Héctor.


La franja horaria es GMT +2. Ahora son las 05:57:42.

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