Por favor : Consulta SQL para titulos (boletos) já vencidos
Bom dia, tenho duas tabelas (CadTitulos e CadBaixas), em CadTitulos eu cadastros o título (boleto), quando esse titulo é pago eu dou baixa em CadBaixas. A ideia é identificar o título atrasado e lançar um aviso no respectivo Form
Segue a descrição das duas tabelas
/***********************************************/
/* TABELA CADASTRO DE TITULOS */
/***********************************************/
create table CADTITULOS (
TI_FORNECEDOR INTEGER NOT NULL,
TI_NUMERO CHAR(15) NOT NULL,
TI_VALOR NUMERIC(10,2) NOT NULL,
TI_EMISSAO DATE NOT NULL,
TI_DATA_DOC DATE NOT NULL,
TI_VENCIMENTO DATE NOT NULL,
TI_OBS VARCHAR(40),
TI_USUARIO INTEGER NOT NULL,
TI_NUMNOTA INTEGER,
constraint PK_CADTITULOS primary key (TI_FORNECEDOR, TI_NUMERO),
constraint FK_CADTITULOS foreign key (TI_FORNECEDOR) REFERENCES FORNECEDORES(F_NUMERO)
);
/***********************************************/
/* TABELA CADASTRO DE BAIXAS */
/***********************************************/
create table CADBAIXAS (
BX_FORNECEDOR INTEGER NOT NULL,
BX_NUMERO CHAR(15) NOT NULL,
BX_DATA DATE NOT NULL,
BX_DEPARTAMENTO INTEGER NOT NULL,
BX_LANCAMENTO INTEGER NOT NULL,
BX_VALOR NUMERIC(10,2) NOT NULL,
BX_JUROS NUMERIC(10,2) NOT NULL,
BX_DESCONTOS NUMERIC(10,2) NOT NULL,
BX_OBS VARCHAR(30),
BX_USUARIO INTEGER NOT NULL,
BX_INTLANC INTEGER NOT NULL,
constraint PK_CADBAIXAS primary key (BX_FORNECEDOR, BX_NUMERO, BX_DATA),
constraint FK_CADBAIXAS foreign key (BX_FORNECEDOR, BX_NUMERO) REFERENCES CADTITULOS(TI_FORNECEDOR, TI_NUMERO) ON DELETE CASCADE
);
CREATE INDEX IX_INTLANC_BAIXAS ON CADBAIXAS (BX_INTLANC);
/************************************************/
/* GENERATOR de BAIXAS DE TITULOS */
/************************************************/
CREATE GENERATOR GEN_BAIXASTIT_NUM;
Observem que os campos (BX_FORNECEDOR, BX_NUMERO) são chave estrangeira de CadTitulos.
Segue a descrição das duas tabelas
/***********************************************/
/* TABELA CADASTRO DE TITULOS */
/***********************************************/
create table CADTITULOS (
TI_FORNECEDOR INTEGER NOT NULL,
TI_NUMERO CHAR(15) NOT NULL,
TI_VALOR NUMERIC(10,2) NOT NULL,
TI_EMISSAO DATE NOT NULL,
TI_DATA_DOC DATE NOT NULL,
TI_VENCIMENTO DATE NOT NULL,
TI_OBS VARCHAR(40),
TI_USUARIO INTEGER NOT NULL,
TI_NUMNOTA INTEGER,
constraint PK_CADTITULOS primary key (TI_FORNECEDOR, TI_NUMERO),
constraint FK_CADTITULOS foreign key (TI_FORNECEDOR) REFERENCES FORNECEDORES(F_NUMERO)
);
/***********************************************/
/* TABELA CADASTRO DE BAIXAS */
/***********************************************/
create table CADBAIXAS (
BX_FORNECEDOR INTEGER NOT NULL,
BX_NUMERO CHAR(15) NOT NULL,
BX_DATA DATE NOT NULL,
BX_DEPARTAMENTO INTEGER NOT NULL,
BX_LANCAMENTO INTEGER NOT NULL,
BX_VALOR NUMERIC(10,2) NOT NULL,
BX_JUROS NUMERIC(10,2) NOT NULL,
BX_DESCONTOS NUMERIC(10,2) NOT NULL,
BX_OBS VARCHAR(30),
BX_USUARIO INTEGER NOT NULL,
BX_INTLANC INTEGER NOT NULL,
constraint PK_CADBAIXAS primary key (BX_FORNECEDOR, BX_NUMERO, BX_DATA),
constraint FK_CADBAIXAS foreign key (BX_FORNECEDOR, BX_NUMERO) REFERENCES CADTITULOS(TI_FORNECEDOR, TI_NUMERO) ON DELETE CASCADE
);
CREATE INDEX IX_INTLANC_BAIXAS ON CADBAIXAS (BX_INTLANC);
/************************************************/
/* GENERATOR de BAIXAS DE TITULOS */
/************************************************/
CREATE GENERATOR GEN_BAIXASTIT_NUM;
Observem que os campos (BX_FORNECEDOR, BX_NUMERO) são chave estrangeira de CadTitulos.
Emanuel Gonçalves
Curtidas 0
Respostas
Daniel Araújo
31/01/2017
Bom dia Emanuel!
Acredito que assim resolva:
Daniel Araújo
http://doispontozero-programador.blogspot.com.br/
Acredito que assim resolva:
SELECT *
FROM CADTITULOS
WHERE TI_VENCIMENTO > CAST(GETDATE() AS DATE)
AND CAST(TI_FORNECEDOR AS CHAR(15)) + TI_NUMERO NOT IN (
SELECT CAST(BX_FORNECEDOR AS CHAR(15)) + BX_NUMERO
FROM CADBAIXAS
)Daniel Araújo
http://doispontozero-programador.blogspot.com.br/
GOSTEI 0
Emanuel Gonçalves
31/01/2017
Bom dia Emanuel!
Acredito que assim resolva:
Daniel Araújo
http://doispontozero-programador.blogspot.com.br/
Acredito que assim resolva:
SELECT *
FROM CADTITULOS
WHERE TI_VENCIMENTO > CAST(GETDATE() AS DATE)
AND CAST(TI_FORNECEDOR AS CHAR(15)) + TI_NUMERO NOT IN (
SELECT CAST(BX_FORNECEDOR AS CHAR(15)) + BX_NUMERO
FROM CADBAIXAS
)Daniel Araújo
http://doispontozero-programador.blogspot.com.br/
Daniel obrigado.
Eu estou executando o SQL dentro de uma query e o mesmo está retornando o seguinte erro ao executar
[FireDAC][Phys][FB]dynamic SLQ Error
expression evaluation not supported
string cannot be added or subtracted in dialect 3
GOSTEI 0
Daniel Araújo
31/01/2017
Boa tarde Emanuel!
Fiz o select pensando no SQL Server. O problema está na concatenação de strings. Acho que no firebird usa o || no lugar do +.
Tenta assim:
Fiz o select pensando no SQL Server. O problema está na concatenação de strings. Acho que no firebird usa o || no lugar do +.
Tenta assim:
SELECT * FROM CADTITULOS WHERE TI_VENCIMENTO > CAST(GETDATE() AS DATE) AND CAST(TI_FORNECEDOR AS CHAR(15)) || TI_NUMERO NOT IN ( SELECT CAST(BX_FORNECEDOR AS CHAR(15)) || BX_NUMERO FROM CADBAIXAS )
GOSTEI 0
Emanuel Gonçalves
31/01/2017
Boa tarde Emanuel!
Fiz o select pensando no SQL Server. O problema está na concatenação de strings. Acho que no firebird usa o || no lugar do +.
Tenta assim:
Fiz o select pensando no SQL Server. O problema está na concatenação de strings. Acho que no firebird usa o || no lugar do +.
Tenta assim:
SELECT * FROM CADTITULOS WHERE TI_VENCIMENTO > CAST(GETDATE() AS DATE) AND CAST(TI_FORNECEDOR AS CHAR(15)) || TI_NUMERO NOT IN ( SELECT CAST(BX_FORNECEDOR AS CHAR(15)) || BX_NUMERO FROM CADBAIXAS )
Daniel só rodou modificando o código GETDATE por CURRENT_DATE, o detalhe é que ele me retornou os títulos com vencimento futuro.
você tem um e-mail para contato?
GOSTEI 0
Daniel Araújo
31/01/2017
Foi mal Emanuel!
Errei no sinal. Faz assim:
Daniel Araújo
http://doispontozero-programador.blogspot.com.br/
Errei no sinal. Faz assim:
SELECT * FROM CADTITULOS WHERE TI_VENCIMENTO < CAST(GETDATE() AS DATE) AND CAST(TI_FORNECEDOR AS CHAR(15)) || TI_NUMERO NOT IN ( SELECT CAST(BX_FORNECEDOR AS CHAR(15)) || BX_NUMERO FROM CADBAIXAS )
Daniel Araújo
http://doispontozero-programador.blogspot.com.br/
GOSTEI 0
Emanuel Gonçalves
31/01/2017
Foi mal Emanuel!
Errei no sinal. Faz assim:
Daniel Araújo
http://doispontozero-programador.blogspot.com.br/
Errei no sinal. Faz assim:
SELECT * FROM CADTITULOS WHERE TI_VENCIMENTO < CAST(GETDATE() AS DATE) AND CAST(TI_FORNECEDOR AS CHAR(15)) || TI_NUMERO NOT IN ( SELECT CAST(BX_FORNECEDOR AS CHAR(15)) || BX_NUMERO FROM CADBAIXAS )
Daniel Araújo
http://doispontozero-programador.blogspot.com.br/
Obrigado Daniel, deu certo. A consulta ficou bem lenta, sem duvida pq os números de registros nas duas tabelas são bem grandes
GOSTEI 0