Procedure com problema - ajudem

Firebird

09/04/2010

Meus caros estou com o seguinte problema na procedure abaixo;

A query principal que deveria retornar os dados para serem processados não está retornando nada porem quando executo a mesma query no ISQL ela retorna a linha desejada.

O que pode estar havendo não sei não consegui encontrar.

Conto com a ajuda dos colegas.

Obrigado.

COMMIT WORK;
SET AUTODDL OFF;
SET TERM ^ ;

/* Stored procedures */

CREATE PROCEDURE ATUALIZA_NOTAS_DESPESAS
(
  PEMPRESA VARCHAR(18),
  PFILIAL VARCHAR(18),
  PCOD_FORNEC VARCHAR(18),
  PNUM_DOC INTEGER,
  PDATA_EMIS TIMESTAMP,
  PDATA_VENC TIMESTAMP,
  PDEPAR VARCHAR(2),
  PNDEPAR VARCHAR(40),
  PSETOR VARCHAR(2),
  PNSETOR VARCHAR(40),
  PAPLICA VARCHAR(10),
  PNAPLICA VARCHAR(50)
)
AS
BEGIN EXIT; END ^


ALTER PROCEDURE ATUALIZA_NOTAS_DESPESAS
(
  PEMPRESA VARCHAR(18),
  PFILIAL VARCHAR(18),
  PCOD_FORNEC VARCHAR(18),
  PNUM_DOC INTEGER,
  PDATA_EMIS TIMESTAMP,
  PDATA_VENC TIMESTAMP,
  PDEPAR VARCHAR(2),
  PNDEPAR VARCHAR(40),
  PSETOR VARCHAR(2),
  PNSETOR VARCHAR(40),
  PAPLICA VARCHAR(10),
  PNAPLICA VARCHAR(50)
)
AS
DECLARE VARIABLE VCODFORNEC VARCHAR(18);
DECLARE VARIABLE VDATAEMIS TIMESTAMP;
DECLARE VARIABLE VVALORLIQUIDO DOUBLE PRECISION;
DECLARE VARIABLE VPARCELAS INTEGER;
DECLARE VARIABLE VITEM INTEGER;
DECLARE VARIABLE VCODIGO INTEGER;
DECLARE VARIABLE VPRECOUNIT DOUBLE PRECISION;
DECLARE VARIABLE VQUANTIDADE DOUBLE PRECISION;
DECLARE VARIABLE VVALORTOTAL DOUBLE PRECISION;
DECLARE VARIABLE VLANCAMENTO INTEGER;
DECLARE VARIABLE VNUMPCP INTEGER;
DECLARE VARIABLE VPARCELA INTEGER;
DECLARE VARIABLE VVENCIMENTO TIMESTAMP;
DECLARE VARIABLE VFORNECEDOR VARCHAR(50);
DECLARE VARIABLE VNUMERO_ODC INTEGER;
DECLARE VARIABLE VNDIAS1VENC INTEGER;
DECLARE VARIABLE VINTERVALO INTEGER;
DECLARE VARIABLE VCFOP VARCHAR(10);
DECLARE VARIABLE VNATOPE VARCHAR(255);
DECLARE VARIABLE VOPERAC VARCHAR(30);
DECLARE VARIABLE VDEPAR VARCHAR(2);
DECLARE VARIABLE VNDEPAR VARCHAR(40);
DECLARE VARIABLE VSETOR VARCHAR(2);
DECLARE VARIABLE VNSETOR VARCHAR(40);
DECLARE VARIABLE VAPLICA VARCHAR(10);
DECLARE VARIABLE VNAPLICA VARCHAR(50);
DECLARE VARIABLE VPERCPARC1 DOUBLE PRECISION;
DECLARE VARIABLE VPERCPARC DOUBLE PRECISION;
DECLARE VARIABLE VPERC DOUBLE PRECISION;
DECLARE VARIABLE VPERC1 DOUBLE PRECISION;
DECLARE VARIABLE VDIFERENCA DOUBLE PRECISION;
DECLARE VARIABLE VPARC DOUBLE PRECISION;
DECLARE VARIABLE VPARC1 DOUBLE PRECISION;
DECLARE VARIABLE VVALOR_PCP DOUBLE PRECISION;
DECLARE VARIABLE VQUANTIDADEODC DOUBLE PRECISION;
DECLARE VARIABLE VTIPOBAIXA VARCHAR(10);
DECLARE VARIABLE VQTDNOT DOUBLE PRECISION;
DECLARE VARIABLE VQTDODC DOUBLE PRECISION;
DECLARE VARIABLE VALMOXARIFADO VARCHAR(1);
DECLARE VARIABLE VFINANCEIRO VARCHAR(1);
DECLARE VARIABLE VNUNDOC INTEGER;
DECLARE VARIABLE vTIPODOC VARCHAR(20);
DECLARE VARIABLE vTRANSPORTADOR VARCHAR(18);
DECLARE VARIABLE vCTRC_NUMERO INTEGER;
DECLARE VARIABLE vCTRC_SERIE VARCHAR(20);
DECLARE VARIABLE vCTRC_TIPODOC VARCHAR(10);
DECLARE VARIABLE vCTRC_EMISSAO DATE;
DECLARE VARIABLE vCTRC_RAZAO VARCHAR(50);
DECLARE VARIABLE vCTRC_VALOR_TOTAL_PRESTACAO DOUBLE PRECISION;
DECLARE VARIABLE vTIPO_PRODUTO VARCHAR(20);
DECLARE VARIABLE vCTRC_NATOPE VARCHAR(100);
DECLARE VARIABLE vCODPRD INTEGER;
BEGIN
  /* query com problema */    
  SELECT N.CNPJ_EMITENTE, N.NUMERO, N.DATA_EMISSAO, N.VALOR_TOTAL_DA_NOTA,
         N.CFOP, N.NATOPE, C.OPERAC, N.RAZAO_EMITENTE, C.ALMOXARIFADO,
         C.FINANCEIRO, N.TIPODOC
  FROM   NOTAS N, CFOP C
  WHERE  N.EMPRESA           = :PEMPRESA
         AND N.FILIAL        = :PFILIAL
         AND N.CNPJ_EMITENTE = :PCOD_FORNEC
         AND N.NUMERO        = :PNUM_DOC
         AND N.DATA_EMISSAO  = :PDATA_EMIS
         AND C.CFOP          = N.CFOP
  INTO   :vCODFORNEC, :vNUNDOC, :vDATAEMIS, :vVALORLIQUIDO, :vCFOP, :vNATOPE,
         :vOPERAC, :vFORNECEDOR, :vALMOXARIFADO, :vFINANCEIRO, :vTIPODOC;
  /* query com problema */
  IF (NOT (vCFOP IN ('1.653', '1.949', '2.949', '1.302', '2.302', '1.252', '2.252', '1.933', '2.933','1.102', '2.102'))) THEN
  BEGIN
    EXIT;
  END
  IF (vFINANCEIRO = 'S') THEN
  BEGIN
    IF (NOT EXISTS(SELECT NUMPCP FROM NUMPCP
                   WHERE  EMPRESA = :PEMPRESA
                          AND FILIAL = :PFILIAL)) THEN
    BEGIN
      INSERT INTO NUMPCP(EMPRESA, FILIAL, NUMPCP)
                  VALUES(:PEMPRESA, :PFILIAL, 0);
      vNUMPCP = 0;
    END
    ELSE
    BEGIN
      SELECT NUMPCP FROM NUMPCP
      WHERE  EMPRESA = :PEMPRESA
             AND FILIAL = :PFILIAL
      INTO   :vNUMPCP;
    END
    INSERT INTO MVTPCP(EMPRESA, FILIAL, PCP, PARCELA, PARCELAS, DT_EMIS, VLR_PCP, VCT_PCP, COD_FORN,
                       FOR_A, DEPARTAMENTO, NDEPARTAMENTO, SETOR, NSETOR, APLICACAO, NAPLICACAO,
                       OBSERVACAO, NUMERO_DOCUMENTO, TIPO_DOCUMENTO, MOEDA, QTD_MOEDA, DATA_EMIDOC, DATA_LIM_DESCONTO)
                VALUES(:PEMPRESA, :PFILIAL, :vNUMPCP, 0, 0, CURRENT_DATE, :vVALORLIQUIDO, :PDATA_VENC,
                       :PCOD_FORNEC, :vFORNECEDOR, :PDEPAR, :PNDEPAR, :PSETOR, :PNSETOR, :PAPLICA, :PNAPLICA,
                       :vNATOPE, CAST(:PNUM_DOC AS VARCHAR(20)), :vTIPODOC, 'BRL', :vVALORLIQUIDO, :PDATA_EMIS, :PDATA_VENC);
    UPDATE NUMPCP SET NUMPCP = :vNUMPCP
    WHERE  EMPRESA = :PEMPRESA
           AND FILIAL = :PFILIAL;
    IF (EXISTS(SELECT CNPJ_EMITENTE, NUMERO, SERIE, TIPODOC, DATA_EMISSAO, RAZAO_EMITENTE, VALOR_TOTAL_PRESTACAO, NATOPE
             FROM   FRETES
             WHERE  CNPJ_EMITENTE_NF    = :PCOD_FORNEC
                    AND NUMERO_NF       = :PNUM_DOC
                    AND DATA_EMISSAO_NF = :PDATA_EMIS
                    AND TIPO_FRETE      = 'A PAGAR')) THEN
    BEGIN
      SELECT CNPJ_EMITENTE, NUMERO, SERIE, TIPODOC, DATA_EMISSAO, RAZAO_EMITENTE, VALOR_TOTAL_PRESTACAO, NATOPE
      FROM    FRETES
      WHERE  CNPJ_EMITENTE_NF        = :PCOD_FORNEC
                  AND NUMERO_NF           = :PNUM_DOC
                  AND DATA_EMISSAO_NF     = :PDATA_EMIS
                  AND TIPO_FRETE          = 'A PAGAR'
      INTO   :vTRANSPORTADOR, :vCTRC_NUMERO, :vCTRC_SERIE, :vCTRC_TIPODOC, :vCTRC_EMISSAO, :vCTRC_RAZAO, :vCTRC_VALOR_TOTAL_PRESTACAO, :vCTRC_NATOPE;
      IF (NOT EXISTS(SELECT NUMPCP FROM NUMPCP
                              WHERE  EMPRESA = :PEMPRESA
                                          AND FILIAL = :PFILIAL)) THEN
      BEGIN
        INSERT INTO NUMPCP(EMPRESA, FILIAL, NUMPCP)
                    VALUES(:PEMPRESA, :PFILIAL, 0);
        vNUMPCP = 0;
      END
      ELSE
      BEGIN
        SELECT NUMPCP FROM NUMPCP
        WHERE  EMPRESA = :PEMPRESA
                    AND FILIAL = :PFILIAL
        INTO   :vNUMPCP;
      END
      vAPLICA = '530029';
      vNAPLICA = 'FRETES E CARRETOS';
      vVENCIMENTO = (:vCTRC_EMISSAO + 20);
      INSERT INTO MVTPCP(EMPRESA, FILIAL, PCP, PARCELA, PARCELAS, DT_EMIS, VLR_PCP, VCT_PCP, COD_FORN,
                                       FOR_A, DEPARTAMENTO, NDEPARTAMENTO, SETOR, NSETOR, APLICACAO, NAPLICACAO,
                                       OBSERVACAO, NUMERO_DOCUMENTO, TIPO_DOCUMENTO, MOEDA, QTD_MOEDA, DATA_EMIDOC, DATA_LIM_DESCONTO)
                VALUES(:PEMPRESA, :PFILIAL, :vNUMPCP, 0, 0, CURRENT_DATE, :vCTRC_VALOR_TOTAL_PRESTACAO, :vVENCIMENTO,
                             :vTRANSPORTADOR, :vCTRC_RAZAO, :PDEPAR, :PNDEPAR, :PSETOR, :PNSETOR, :vAPLICA, :vNAPLICA,
                             TRIM(:vCTRC_NATOPE), CAST(:vCTRC_NUMERO AS VARCHAR(20)), :vCTRC_TIPODOC, 'BRL', :vCTRC_VALOR_TOTAL_PRESTACAO, :vCTRC_EMISSAO, :vVENCIMENTO);
      UPDATE NUMPCP SET NUMPCP = :vNUMPCP
      WHERE  EMPRESA = :PEMPRESA
                  AND FILIAL = :PFILIAL;
    END
  END
  UPDATE NOTAS SET ATUALIZADA = 'True'
  WHERE  EMPRESA = :PEMPRESA
         AND FILIAL = :PFILIAL
         AND CNPJ_EMITENTE = :PCOD_FORNEC
         AND NUMERO = :PNUM_DOC
         AND DATA_EMISSAO = :PDATA_EMIS;
END
 ^

SET TERM ; ^
COMMIT WORK;
SET AUTODDL ON;
Tadeu Oliveira

Tadeu Oliveira

Curtidas 0

Respostas

Emerson Nascimento

Emerson Nascimento

09/04/2010

os valores passados para a query são exatamente os mesmos colocados na instrução ao exceutá-la individualmente?

publique como você roda a instrução e como você chama a SP....
GOSTEI 0
Tadeu Oliveira

Tadeu Oliveira

09/04/2010

SIM
OS VALORES SÃO OS MESMOS

EU EXECUTO ELA DE DENTRO DE UMA APLICAÇÃO

spATUALIZA_NOTAS_DESPESAS.Close;
spATUALIZA_NOTAS_DESPESAS.ParamByName('PEMPRESA').AsString           :=  qrNotasEMPRESA.Value;
spATUALIZA_NOTAS_DESPESAS.ParamByName('PFILIAL').AsString               :=  qrNotasFILIAL.Value;
spATUALIZA_NOTAS_DESPESAS.ParamByName('PCOD_FORNEC').AsString     :=  qrNotasCNPJ_EMITENTE.Value;
spATUALIZA_NOTAS_DESPESAS.ParamByName('PNUM_DOC').AsInteger        :=  qrNotasNUMERO.Value;
spATUALIZA_NOTAS_DESPESAS.ParamByName('PDATA_EMIS').AsDateTime   :=  qrNotasDATA_EMISSAO.Value;
spATUALIZA_NOTAS_DESPESAS.ParamByName('PDATA_VENC').AsDateTime   := StrToDate(frmCCVenc.edVencimento.Text);
spATUALIZA_NOTAS_DESPESAS.ParamByName('PDEPAR').AsString                :=  frmCCVenc.edDepto.Text;
spATUALIZA_NOTAS_DESPESAS.ParamByName('PNDEPAR').AsString              :=  frmCCVenc.edNDepto.Text;
spATUALIZA_NOTAS_DESPESAS.ParamByName('PSETOR').AsString                :=  frmCCVenc.edSetor.Text;
spATUALIZA_NOTAS_DESPESAS.ParamByName('PNSETOR').AsString              :=  frmCCVenc.edNSetor.Text;
spATUALIZA_NOTAS_DESPESAS.ParamByName('PAPLICA').AsString               :=  frmCCVenc.edCCusto.Text;
spATUALIZA_NOTAS_DESPESAS.ParamByName('PNAPLICA').AsString             :=  frmCCVenc.edNCCusto.Text;
spATUALIZA_NOTAS_DESPESAS.ExecProc;

GOSTEI 0
Emerson Nascimento

Emerson Nascimento

09/04/2010

evite usar o .Value. Se algum valor for nulo, var gerar um erro no seu programa.

outra coisa: os campos são do tipo TimeStamp? Note que esse tipo pode receber data e hora e será preciso passar as informações exatas para que o registro seja encontrado.

se possível, envie as duas tabelas (NOTAS e CFOP), informando também os parâmetros passados, para emerson.en@gmail.com que eu posso ver se consigo te ajudar.
GOSTEI 0
POSTAR