Muchas gracias por tu ayuda, pero continuo con problemas.
En realidad la tabla NotasCredito no es para Notas de credito, no la renombre, pero su uso son las entradas de mercancia y no tiene nada que ver con las Notas de credito.
La tabla Salidas es para registrar la salida de mercancia.
Lo que necesito si es como me lo comentas, pero no logro darme cuenta de que estoy haciendo mal, sigo obteniendo el mismo error.
Lo que necesito es los mismos datos que arroja esta consulta, pero con la fecha de un mes anterior, y lo que no puedo hacer es la subconsulta de el mes anterior, me sigue mostrando el error "Multiple rows in singleton select."
Muchas gracias.
Este es el enlace del codigo fuente de el programa y el ejecutable, esto para que puedas ver el funcionamiento y te des una mejor idea de como estan funcionando las cosas, hojala pudieras revisarlo y ayudarme.
http://www.mediafire.com/?0my7wy153xf2ham
[-]
Código SQL
[-]
SET SQL DIALECT 3;
SET NAMES ISO8859_1;
SET CLIENTLIB 'C:\Windows\SysWOW64\FBCLIENT.DLL';
CREATE DATABASE 'E:\2011 Febrero\Favi\Base\BASE.FDB'
USER 'SYSDBA' PASSWORD 'masterkey'
PAGE_SIZE 16384
DEFAULT CHARACTER SET ISO8859_1;
CREATE GENERATOR ARTICULOS;
SET GENERATOR ARTICULOS TO 10;
CREATE GENERATOR CATEGORIAS;
SET GENERATOR CATEGORIAS TO 11;
CREATE GENERATOR COSTOS;
SET GENERATOR COSTOS TO 0;
CREATE GENERATOR GEN_NOTASCREDITO_ID;
SET GENERATOR GEN_NOTASCREDITO_ID TO 1827;
CREATE GENERATOR UNIDADES;
SET GENERATOR UNIDADES TO 6;
SET TERM ^ ;
CREATE OR ALTER PROCEDURE MONTHLENGTH (
D DATE)
RETURNS (
ML INTEGER)
AS
BEGIN
SUSPEND;
END^
SET TERM ; ^
CREATE TABLE ARTICULOS (
CLAVE INTEGER NOT NULL,
CATEGORIA SMALLINT NOT NULL,
UNIDAD SMALLINT NOT NULL,
NOMBRE CHAR(50) NOT NULL,
COSTO FLOAT NOT NULL
);
CREATE TABLE CATEGORIAS (
CLAVE INTEGER NOT NULL,
NOMBRE CHAR(50) NOT NULL
);
CREATE TABLE CODIGOS (
ARTICULO INTEGER,
CODIGO CHAR(18) NOT NULL,
TIPO CHAR(1) NOT NULL
);
CREATE TABLE ENTRADAS (
CLAVE INTEGER NOT NULL,
ARTICULO INTEGER NOT NULL,
FECHA DATE NOT NULL,
CANTIDAD INTEGER NOT NULL,
MONTO FLOAT NOT NULL,
COSTO FLOAT NOT NULL
);
CREATE TABLE NOTASCREDITO (
CLAVE INTEGER NOT NULL,
ARTICULO INTEGER NOT NULL,
ESTATUS CHAR(1) NOT NULL,
TIPO CHAR(1) NOT NULL,
FECHA DATE NOT NULL,
CANTIDAD FLOAT NOT NULL,
SALIDA FLOAT,
PRECIO FLOAT NOT NULL,
IVA FLOAT,
IMPORTE FLOAT NOT NULL
);
CREATE TABLE SALIDAS (
CLAVE INTEGER NOT NULL,
ARTICULO INTEGER NOT NULL,
ESTATUS CHAR(1) NOT NULL,
FECHA DATE NOT NULL,
CANTIDAD FLOAT NOT NULL,
PRECIO FLOAT NOT NULL,
IVA FLOAT,
IMPORTE FLOAT NOT NULL,
ENTRADA INTEGER
);
CREATE TABLE UNIDADES (
CLAVE INTEGER NOT NULL,
NOMBRE CHAR(50) NOT NULL
);
CREATE OR ALTER VIEW NOMBREVISTA(
NOMBRE)
AS
select nombre from articulos
;
ALTER TABLE ARTICULOS ADD CONSTRAINT PK_ARTICULOS PRIMARY KEY (CLAVE);
ALTER TABLE CATEGORIAS ADD CONSTRAINT PK_CATEGORIA PRIMARY KEY (CLAVE);
ALTER TABLE ENTRADAS ADD CONSTRAINT PK_ENTRADAS_1 PRIMARY KEY (CLAVE);
ALTER TABLE NOTASCREDITO ADD CONSTRAINT PK_NOTASCREDITO PRIMARY KEY (CLAVE);
ALTER TABLE SALIDAS ADD CONSTRAINT PK_SALIDAS_1 PRIMARY KEY (CLAVE);
ALTER TABLE UNIDADES ADD CONSTRAINT PK_UNIDAD PRIMARY KEY (CLAVE);
ALTER TABLE ARTICULOS ADD CONSTRAINT FK_ARTICULOS_CATEGORIA FOREIGN KEY (CATEGORIA) REFERENCES CATEGORIAS (CLAVE) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE ARTICULOS ADD CONSTRAINT FK_ARTICULOS_UNIDAD FOREIGN KEY (UNIDAD) REFERENCES UNIDADES (CLAVE) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE ENTRADAS ADD CONSTRAINT FK_ENTRADAS_ARTICULO FOREIGN KEY (ARTICULO) REFERENCES ARTICULOS (CLAVE) ON DELETE SET DEFAULT ON UPDATE SET DEFAULT;
ALTER TABLE NOTASCREDITO ADD CONSTRAINT FK_NOTASCREDITO_ARTICULO FOREIGN KEY (ARTICULO) REFERENCES ARTICULOS (CLAVE) ON DELETE SET DEFAULT ON UPDATE SET DEFAULT;
ALTER TABLE SALIDAS ADD CONSTRAINT FK_SALIDAS_ARTICULO FOREIGN KEY (ARTICULO) REFERENCES ARTICULOS (CLAVE) ON DELETE SET DEFAULT ON UPDATE SET DEFAULT;
CREATE INDEX IDX_CODIGOS_ARTICULO ON CODIGOS (ARTICULO);
CREATE INDEX IDX_CODIGOS_CODIGO ON CODIGOS (CODIGO);
SET TERM ^ ;
CREATE OR ALTER TRIGGER ARTICULOS_BI0 FOR ARTICULOS
ACTIVE BEFORE INSERT POSITION 0
AS
begin
new.clave = gen_id(articulos,1);
end
^
CREATE OR ALTER TRIGGER CATEGORIA_BI0 FOR CATEGORIAS
ACTIVE BEFORE INSERT POSITION 0
AS
begin
new.clave = gen_id(categoriaS,1);
end
^
CREATE OR ALTER TRIGGER NOTASCREDITO_BI FOR NOTASCREDITO
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
IF (NEW.CLAVE IS NULL) THEN
NEW.CLAVE = GEN_ID(GEN_NOTASCREDITO_ID,1);
END
^
CREATE OR ALTER TRIGGER SALIDAS_BI FOR SALIDAS
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
IF (NEW.CLAVE IS NULL) THEN
NEW.CLAVE = GEN_ID(GEN_NOTASCREDITO_ID,1);
END
^
CREATE OR ALTER TRIGGER UNIDAD_BI0 FOR UNIDADES
ACTIVE BEFORE INSERT POSITION 0
AS
begin
new.clave = gen_id(unidades,1);
end
^
SET TERM ; ^
SET TERM ^ ;
CREATE OR ALTER PROCEDURE MONTHLENGTH (
D DATE)
RETURNS (
ML INTEGER)
AS
declare variable TMP date;
BEGIN
TMP = D - EXTRACT(DAY FROM D) + 32;
ML = EXTRACT(DAY FROM (TMP - EXTRACT(DAY FROM TMP)));
END^
SET TERM ; ^