Fórum Procedure com problema - ajudem #134517
09/04/2010
0
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
Curtir tópico
+ 0Posts
09/04/2010
Emerson Nascimento
publique como você roda a instrução e como você chama a SP....
Gostei + 0
09/04/2010
Tadeu Oliveira
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
09/04/2010
Emerson Nascimento
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
Clique aqui para fazer login e interagir na Comunidade :)