EXTRATO_CAIXA — Tabela
EXTRATO_CAIXA (Stored Procedure)
Chamada
LEFT JOIN EXTRATO_CAIXA(CD_EMPRESA, DT_INICIAL, DT_FINAL, ST_SALDOCONTA, WHERE_MOVTO, WHERE_SALDO) E ON (1=1)
- ST_SALDOCONTA: 'N' extrato geral, 'S' agrupado por conta saldo.
- WHERE_MOVTO: filtro SQL dinamico para movimentos de caixa (string com clausula WHERE).
- WHERE_SALDO: filtro SQL dinamico para contas saldo (string com clausula WHERE).
Saida Principal
- DT_LANCAMENTO (DATE): data do lancamento no caixa.
- CD_CONTA (INTEGER): codigo da conta no plano de contas.
- DS_CONTA (VARCHAR(120)): descricao da conta.
- NR_DOCUMENTO (INTEGER): numero do documento.
- VL_DEBITO, VL_CREDITO (NUMERIC(15,2)): valores do movimento.
- VL_SALDOANTERIOR, VL_SALDO (NUMERIC(15,2)): saldo antes e apos movimento.
- TP_OPERACAO (VARCHAR(1)): 'C' credito, 'D' debito.
- CD_USUARIO: usuario que realizou o lancamento.
- DS_COMPLEMENTO: descricao do historico + complemento.
Permissoes
A permissao do usuario é controlada pelo parametro 'admin' passado a VIEW_PARMSALDO. NAO adicionar INNER JOIN USUARIOEMPRESA — é redundante e causa erros.
Snippet Completo (Extrato bancario por nome)
ESCAPE DE ASPAS (CRITICO): Dentro dos parametros VARCHAR, usar ''valor'' (2 aspas). NUNCA ''''valor'''' (4 aspas) — causa SQLCODE -104.
SELECT
E.CD_EMPRESA, E.DT_LANCAMENTO, E.NR_LANCCAIXA, E.CD_CONTA, E.DS_CONTA,
E.NR_DOCUMENTO, E.TP_OPERACAO, E.DS_COMPLEMENTO,
E.VL_DEBITO, E.VL_CREDITO, E.VL_SALDOANTERIOR, E.VL_DOCUMENTO, E.VL_SALDO,
E.VL_CREDITOGERAL, E.VL_DEBITOGERAL, E.VL_SALDOGERAL,
P.NM_PESSOA AS CD_USUARIO, E.CD_HISTORICO, E.TP_DOCUMENTO, E.VL_SALDOCONTA
FROM VIEW_PLANOCONTAS(1, ' AND P.DS_CONTA CONTAINING ''NOME_BANCO'' ') PC
LEFT JOIN VIEW_PARMSALDO(PC.CD_EMPRESA, PC.CD_CONTA, NULL, 'admin') PS ON (1 = 1)
-- ESCAPE: ''I'' (2 aspas simples) = CORRETO. ''''I'''' (4 aspas) = ERRADO (causa erro -104)
LEFT JOIN EXTRATO_CAIXA(PS.CD_EMPRESA,
PRIMEIRODIAMES(CURRENT_DATE), CURRENT_DATE,
'N',
' AND MX.CD_EMPRESA = 1 AND PARMSALDO.CD_CONTA IN ('||PS.CD_CONTA||') AND COALESCE(PARMSALDO.TP_SALDO,''I'') <> ''I'' ',
' AND PARMSALDO.CD_CONTA IN ('||PS.CD_CONTA||')') E ON (1=1)
LEFT JOIN USUARIO U ON (U.CD_USUARIO = E.CD_USUARIO)
LEFT JOIN PESSOA P ON (P.CD_PESSOA = U.CD_PESSOA)
WHERE PS.ST_ATIVO = 'S'
AND E.DT_LANCAMENTO IS NOT NULL
ORDER BY E.DT_LANCAMENTO, E.NR_LANCCAIXA
Notas:
- Substituir
NOME_BANCOpelo nome da conta (ex:BANCO DO BRASIL,BRADESCO). - Datas: sem periodo especificado, usar mes atual (
PRIMEIRODIAMES(CURRENT_DATE)aCURRENT_DATE). - VIEW_PLANOCONTAS localiza a conta por nome. VIEW_PARMSALDO valida permissoes e status ativo.
Erros Comuns (CRITICO)
Escape de aspas nos parametros WHERE_MOVTO e WHERE_SALDO:
Os parametros WHERE_MOVTO e WHERE_SALDO sao strings VARCHAR. Dentro delas, valores literais precisam de aspas simples duplicadas (''), NAO quadruplicadas ('''').
| Correto | Errado |
|---|---|
COALESCE(PARMSALDO.TP_SALDO,''I'') <> ''I'' | COALESCE(PARMSALDO.TP_SALDO,''''I'''') <> ''''I'''' |
''valor'' (2 aspas = escape nivel 1) | ''''valor'''' (4 aspas = causa erro -104) |
Regra: Dentro do parametro VARCHAR de EXTRATO_CAIXA, usar APENAS '' (2 aspas simples) para escapar strings. O parametro ja é uma string de nivel 1 — nao ha nivel 2 de aninhamento.