[firebase-br] Procedure
Jean Vichinheski
jean em equipesul.com.br
Qua Maio 17 14:17:22 -03 2006
Boa a tarde a todos !!!
Tenho uma procedure que rodo na base local minha e me traz os valores de
saida corretos,mais tenho uma base remota em linux exatamente igual a
estrutura e os dados, valor de saida pareçe que ta me divindo por 10000, so
que na minha base local sai correto o valor, alguem sabe se é alguma
configuração ou o q seja !! abaixo segue o DDL da procedure !!
grato desde já pela atenção !!!
Jean
CREATE PROCEDURE SPCURVAABC (
PDATAINICIAL VARCHAR(12),
PDATAFINAL VARCHAR(12),
PORIGEMVALORES VARCHAR(2),
PVALORES VARCHAR(2),
PSQLCAMPOS1 VARCHAR(500),
PSQLCAMPOS2 VARCHAR(500),
PSQLTABELAS VARCHAR(500),
PSQLFILTRO VARCHAR(500),
PSQLAGRUPAR VARCHAR(500))
RETURNS (
CAMPO1 VARCHAR(150),
CAMPO2 VARCHAR(150),
CAMPO3 VARCHAR(150),
CAMPO4 VARCHAR(150),
VALORSAIDA NUMERIC(15,4),
VALORENTRADA NUMERIC(15,4),
UNIDADESSAIDA NUMERIC(15,4),
UNIDADESENTRADA NUMERIC(15,4),
DATAMINIMA DATE,
DATAMAXIMA DATE)
AS
DECLARE VARIABLE PSQL VARCHAR(10000);
DECLARE VARIABLE VCAMPO1 VARCHAR(150);
DECLARE VARIABLE VCAMPO2 VARCHAR(150);
DECLARE VARIABLE VCAMPO3 VARCHAR(150);
DECLARE VARIABLE VCAMPO4 VARCHAR(150);
DECLARE VARIABLE VTCAMPO1 VARCHAR(150);
DECLARE VARIABLE VTCAMPO2 VARCHAR(150);
DECLARE VARIABLE VTCAMPO3 VARCHAR(150);
DECLARE VARIABLE VTCAMPO4 VARCHAR(150);
DECLARE VARIABLE VVALORSAIDA NUMERIC(15,4);
DECLARE VARIABLE VVALORENTRADA NUMERIC(15,4);
DECLARE VARIABLE VUNIDADESSAIDA NUMERIC(15,4);
DECLARE VARIABLE VUNIDADESENTRADA NUMERIC(15,4);
DECLARE VARIABLE VDATAMAXIMA DATE;
DECLARE VARIABLE VDATAMINIMA DATE;
DECLARE VARIABLE VTVALORSAIDA NUMERIC(15,4);
DECLARE VARIABLE VTVALORENTRADA NUMERIC(15,4);
DECLARE VARIABLE VTUNIDADESSAIDA NUMERIC(15,4);
DECLARE VARIABLE VTUNIDADESENTRADA NUMERIC(15,4);
DECLARE VARIABLE VPRIMEIRO CHAR(1);
BEGIN
PSQL = "SELECT " || PSQLCAMPOS1 || PSQLCAMPOS2 ||
" FROM notafiscalsaida nfs
INNER JOIN produtonotasaida pns ON
pns.codigonotafiscalsaida = nfs.codigonotafiscalsaida
LEFT JOIN produtonotaentrada pne ON
pne.CODIGOPRODUTONOTAFISCALSAIDA = pns.CODIGOPRODUTONOTAFISCALSAIDA
INNER JOIN naturezaoperacaoempresa nat ON
nat.codigonaturezaoperacao = nfs.codigonaturezaoperacao
AND nat.cfg_codconfig
= nfs.cfg_codconfig
LEFT JOIN Vendedor ve ON nfs.ven_codvendedor =
ve.ven_codvendedor
INNER JOIN Pessoa pe1 ON ve.pes_codpessoa =
pe1.pes_codpessoa
INNER JOIN Cliente cl ON nfs.cli_codcliente =
cl.cli_codcliente
LEFT JOIN EnderecoPessoa ep ON cl.pes_codpessoa =
ep.pes_codpessoa
AND ep.ten_codtipoendereco = 2
INNER JOIN Pessoa pe2 ON cl.pes_codpessoa =
pe2.pes_codpessoa "
|| PSQLTABELAS ||
" WHERE nfs.DataEmissao between " || pdataInicial || " and
" || pdataFinal || "
AND nfs.cancelada <> " || "'T'" || "
AND nfs.faturado = " || "'T'" || "
AND nat.movimentaestoque = " || "'T'" || " "
|| PSQLFILTRO
|| PSQLAGRUPAR;
IF (PORIGEMVALORES = "NO") THEN
BEGIN
vDataMaxima = "01/01/1902";
vDataMinima = current_timestamp;
vValorSaida = 0.00;
vValorEntrada = 0.00;
vUnidadesSaida = 0.00;
vUnidadesEntrada = 0.00;
vtValorSaida = 0.00;
vtValorEntrada = 0.00;
vtUnidadesSaida = 0.00;
vtUnidadesEntrada = 0.00;
VPRIMEIRO = 'S';
IF (PVALORES = "TO") THEN
BEGIN
FOR EXECUTE STATEMENT :PSQL
INTO :DATAMINIMA, :VALORSAIDA, :VALORENTRADA, :UNIDADESSAIDA,
:UNIDADESENTRADA DO
BEGIN
vValorSaida = VALORSAIDA + vValorSaida;
vValorEntrada = VALORENTRADA + vValorEntrada;
vUnidadesSaida = UNIDADESSAIDA + vUnidadesSaida;
vUnidadesEntrada = UNIDADESENTRADA + vUnidadesEntrada;
IF (DATAMINIMA < vDataMinima) THEN
vDataMinima = DATAMINIMA;
IF (DATAMINIMA > vDataMaxima) THEN
vDataMaxima = DATAMINIMA;
END
DATAMINIMA = vDataMinima;
DATAMAXIMA = vDataMaxima;
VALORSAIDA = vvalorSaida;
VALORENTRADA = vValorEntrada;
UNIDADESSAIDA = vUnidadesSaida;
UNIDADESENTRADA = vUnidadesEntrada;
SUSPEND;
END
else IF (PVALORES = "CA") THEN
BEGIN
FOR EXECUTE STATEMENT :PSQL
INTO :campo1, :campo2, :campo3, :campo4, :valorsaida,
:valorentrada, :unidadessaida, :unidadesentrada DO
BEGIN
if (((campo1 <> vCampo1) or
(campo3 <> vcampo3)) and
(VPrimeiro <> 'S')) then
begin
vtCampo1 = Campo1;
vtCampo2 = Campo2;
vtCampo3 = Campo3;
vtCampo4 = Campo4;
Campo1 = vCampo1;
Campo2 = vCampo2;
Campo3 = vCampo3;
Campo4 = vCampo4;
vtValorSaida = ValorSaida;
vtValorEntrada = ValorEntrada;
vtUnidadesSaida = UnidadesSaida;
vtUnidadesEntrada = UnidadesEntrada;
ValorSaida = vValorSaida;
ValorEntrada = vValorEntrada;
UnidadesSaida = vUnidadesSaida;
UnidadesEntrada = vUnidadesEntrada;
SUSPEND;
Campo1 = vtCampo1;
Campo2 = vtCampo2;
Campo3 = vtCampo3;
Campo4 = vtCampo4;
ValorSaida = vtValorSaida;
ValorEntrada = vtValorEntrada;
UnidadesSaida = vtUnidadesSaida;
UnidadesEntrada = vtUnidadesEntrada;
vtValorSaida = 0.00;
vtValorEntrada = 0.00;
vtUnidadesSaida = 0.00;
vtUnidadesEntrada = 0.00;
vValorSaida = 0.00;
vValorEntrada = 0.00;
vUnidadesSaida = 0.00;
vUnidadesEntrada = 0.00;
END
vCampo1 = Campo1;
vCampo2 = Campo2;
vCampo3 = Campo3;
vCampo4 = Campo4;
vValorSaida = vValorSaida + ValorSaida;
vUnidadesSaida = vUnidadesSaida + UnidadesSaida;
if (ValorEntrada is not null) then
vValorEntrada = vValorEntrada + ValorEntrada;
if (UnidadesEntrada is not null) then
vUnidadesEntrada = vUnidadesEntrada + UnidadesEntrada;
vPrimeiro = 'F';
END
ValorSaida = vValorSaida;
ValorEntrada = vValorEntrada;
UnidadesSaida = vUnidadesSaida;
UnidadesEntrada = vUnidadesEntrada;
SUSPEND;
END
END
ELSE IF (PORIGEMVALORES <> "NO") THEN
BEGIN
IF (PVALORES = "TO") THEN
BEGIN
FOR EXECUTE STATEMENT :PSQL
INTO :dataminima, :datamaxima, :valorsaida, :valorentrada,
:unidadessaida, :unidadesentrada DO
SUSPEND;
END
ELSE IF (PVALORES = "CA") THEN
BEGIN
FOR EXECUTE STATEMENT :PSQL
INTO :campo1, :campo2, :campo3, :campo4, :valorsaida,
:valorentrada, :unidadessaida, :unidadesentrada DO
SUSPEND;
END
END
END^
SET TERM ; ^
Mais detalhes sobre a lista de discussão lista