[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