PAGUE 6 MESES
LEVE 12 MESES
GARANTIR DESCONTO

Fórum Violation of PRIMARY or UNIQUE KEY constraint #379600

16/06/2010

0

Meus caros, aqui estou novamente para buscar ajuda.

O caso é o seguinte, tenho uma procedure para gerar parcelamento de títulos em um contas a pagar e está acontecendo de dar a seguinte mensagem de erro: Violation of PRIMARY or UNIQUE KEY constraint "INTEG_1107" on table "MVTPCP".

Ótimo até ai sem problemas.

Porem fui debugar a mesma e constatei que ele está me dando esta mensagem em um registro inexistente exemplo: A primary key é composta pelos seguintes campos.

EMPRESA, FILIAL, PCP, PARCELA.

A procedure recebe como parâmetro EMPRESA, FILIAL, PCP e o códiogo da forma de pagamento.

Ex: PEMPRESA = '99.999.999/9999-99'
PFILIAL = '99.999.999/9999-99'
PPCP = 4401
PCODIGO_FORMA = 79

ENTÃO A PROCEDURE LÊ O TÍTULO NA TABELA BUSCANDO SOMENTE A PARCELA = 1 E COM ESSES DADOS CARREGADOS EM VARIAVEIS GERA-SE AS DEMAIS PARCELAS.

ELE FAZ A PRIMEIRA LEITURA GERA A PARCELA 2 E QUANDO VAI GERAR A 3 ELE ACUSA O ERRO MENCIONADO ACIMA.

Já varri a tabela filha em busca de registros orfãos e não encontrei, por esse motivo peço ajuda dos companheiros, para faciliar anexo o código fonte.

Atenciosamente,

Tadeu

COMMIT WORK;
SET AUTODDL OFF;
SET TERM ^ ;

/* Stored procedures */

CREATE PROCEDURE CRIA_PARC_PCP
(
  PEMPRESA VARCHAR(18),
  PFILIAL VARCHAR(18),
  PPCP INTEGER,
  PCODIGO_FORMA INTEGER
)
AS
BEGIN EXIT; END ^


ALTER PROCEDURE CRIA_PARC_PCP
(
  PEMPRESA VARCHAR(18),
  PFILIAL VARCHAR(18),
  PPCP INTEGER,
  PCODIGO_FORMA INTEGER
)
AS
DECLARE VARIABLE vEMPRESA                   VARCHAR(18);
DECLARE VARIABLE vFILIAL                    VARCHAR(18);
DECLARE VARIABLE vPCP                       INTEGER;
DECLARE VARIABLE vPARCELA                   INTEGER;
DECLARE VARIABLE vPARCELAS                  INTEGER;
DECLARE VARIABLE vDT_EMIS                   DATE;
DECLARE VARIABLE vVLR_PCP                   DOUBLE PRECISION;
DECLARE VARIABLE vVCT_PCP                   DATE;
DECLARE VARIABLE vCOD_FORN               VARCHAR(18);
DECLARE VARIABLE vFOR_A                  VARCHAR(100);
DECLARE VARIABLE vDEPARTAMENTO              VARCHAR(2);
DECLARE VARIABLE vNDEPARTAMENTO             VARCHAR(40);
DECLARE VARIABLE vSETOR                     VARCHAR(2);
DECLARE VARIABLE vNSETOR                    VARCHAR(40);
DECLARE VARIABLE vAPLICACAO                 VARCHAR(10);
DECLARE VARIABLE vNAPLICACAO                VARCHAR(50);
DECLARE VARIABLE vOBSERVACAO             VARCHAR(255);
DECLARE VARIABLE vNUMERO_DOCUMENTO         VARCHAR(20);
DECLARE VARIABLE vTIPO_DOCUMENTO           VARCHAR(20);
DECLARE VARIABLE vMOEDA                  VARCHAR(5);
DECLARE VARIABLE vQTD_MOEDA                 DOUBLE PRECISION;
DECLARE VARIABLE vDATA_EMIDOC               DATE;
DECLARE VARIABLE vAUTENTICACAO              VARCHAR(255);
DECLARE VARIABLE vIMPRIMIU                  VARCHAR(1);
DECLARE VARIABLE vDT_PGTO                   DATE;
DECLARE VARIABLE vBCO_PG                    VARCHAR(3);
DECLARE VARIABLE vAGE_PG                    VARCHAR(6);
DECLARE VARIABLE vCTA_PG                 VARCHAR(12);
DECLARE VARIABLE vNRO_CHQ                VARCHAR(20);
DECLARE VARIABLE vVL_PG                  DOUBLE PRECISION;
DECLARE VARIABLE vDT_IMPRESSAO             DATE;
DECLARE VARIABLE vEPRAIMPRIMIR              VARCHAR(1);
DECLARE VARIABLE vSTATUS                 SMALLINT;
DECLARE VARIABLE vVALOR_ABATIMENTO          DOUBLE PRECISION;
DECLARE VARIABLE vVALOR_DESCONTO           DOUBLE PRECISION;
DECLARE VARIABLE vVALOR_JUROS_MORA          DOUBLE PRECISION;
DECLARE VARIABLE vVALOR_MULTA               DOUBLE PRECISION;
DECLARE VARIABLE vCODIGO_BARRAS             VARCHAR(255);
DECLARE VARIABLE vBANCO_DESTINO             VARCHAR(3);
DECLARE VARIABLE vAGENCIA_DESTINO           VARCHAR(6);
DECLARE VARIABLE vCONTA_DESTINO             VARCHAR(12);
DECLARE VARIABLE vTIPO_SERVICO              VARCHAR(2);
DECLARE VARIABLE vFORMA_LANCAMENTO       VARCHAR(2);
DECLARE VARIABLE vCAMARA_CENTRALIZADORA     VARCHAR(3);
DECLARE VARIABLE vDATA_AGENDADA             DATE;
DECLARE VARIABLE vVALOR_ORIGINAL           DOUBLE PRECISION;
DECLARE VARIABLE vTIPO_MOVIMENTO           VARCHAR(3);
DECLARE VARIABLE vVALOR_DESPESAS           DOUBLE PRECISION;
DECLARE VARIABLE vNOSSONUMERO               VARCHAR(100);
DECLARE VARIABLE vINSTRUMOV              VARCHAR(2);
DECLARE VARIABLE vDATA_LIM_DESCONTO        DATE;
DECLARE VARIABLE vNUMLAN                    INTEGER;
DECLARE VARIABLE vAPROVADO                  VARCHAR(5);
DECLARE VARIABLE vDATRAN                    DATE;
DECLARE VARIABLE vUSUARIO                   VARCHAR(20);
DECLARE VARIABLE vCONT                   INTEGER;
DECLARE VARIABLE vINTERVALO                           INTEGER;
DECLARE VARIABLE vPERCENTUAL                        NUMERIC(6, 2);
DECLARE VARIABLE vVALOR_RATEIO                    NUMERIC(12, 2);
DECLARE VARIABLE vTIPO_RATEIO                        VARCHAR(1);
DECLARE VARIABLE vFORMA_RATEIO                     VARCHAR(1);
BEGIN
  SELECT
    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, AUTENTICACAO,
    IMPRIMIU, DT_PGTO, BCO_PG, AGE_PG, CTA_PG, NRO_CHQ, VL_PG, DT_IMPRESSAO,
    EPRAIMPRIMIR, STATUS, VALOR_ABATIMENTO, VALOR_DESCONTO, VALOR_JUROS_MORA, VALOR_MULTA,
    CODIGO_BARRAS, BANCO_DESTINO, AGENCIA_DESTINO, CONTA_DESTINO, TIPO_SERVICO,
    FORMA_LANCAMENTO, CAMARA_CENTRALIZADORA, DATA_AGENDADA, VALOR_ORIGINAL, TIPO_MOVIMENTO,
    VALOR_DESPESAS, NOSSONUMERO, INSTRUMOV, DATA_LIM_DESCONTO, NUMLAN, APROVADO, DATRAN, USUARIO
  FROM
    MVTPCP
  WHERE
    EMPRESA      = :PEMPRESA
    AND FILIAL   = :PFILIAL
    AND PCP      = :PPCP
    AND PARCELA  = 1
  INTO
    :vEMPRESA, :vFILIAL, :vPCP, :vPARCELA, :vPARCELAS, :vDT_EMIS, :vVLR_PCP, :vVCT_PCP, :vCOD_FORN, :vFOR_A,
    :vDEPARTAMENTO, :vNDEPARTAMENTO, :vSETOR, :vNSETOR, :vAPLICACAO, :vNAPLICACAO, :vOBSERVACAO,
    :vNUMERO_DOCUMENTO, :vTIPO_DOCUMENTO, :vMOEDA, :vQTD_MOEDA, :vDATA_EMIDOC, :vAUTENTICACAO,
    :vIMPRIMIU, :vDT_PGTO, :vBCO_PG, :vAGE_PG, :vCTA_PG, :vNRO_CHQ, :vVL_PG, :vDT_IMPRESSAO,
    :vEPRAIMPRIMIR, :vSTATUS, :vVALOR_ABATIMENTO, :vVALOR_DESCONTO, :vVALOR_JUROS_MORA, :vVALOR_MULTA,
    :vCODIGO_BARRAS, :vBANCO_DESTINO, :vAGENCIA_DESTINO, :vCONTA_DESTINO, :vTIPO_SERVICO,
    :vFORMA_LANCAMENTO, :vCAMARA_CENTRALIZADORA, :vDATA_AGENDADA, :vVALOR_ORIGINAL, :vTIPO_MOVIMENTO,
    :vVALOR_DESPESAS, :vNOSSONUMERO, :vINSTRUMOV, :vDATA_LIM_DESCONTO, :vNUMLAN, :vAPROVADO, :vDATRAN, :vUSUARIO;
  vCONT = 2;
  IF (EXISTS(SELECT PARCELAS, INTERVALO
             FROM   FORMAS_DE_PAGAMENTO
             WHERE  CODIGO_FORMA = :PCODIGO_FORMA)) THEN
  BEGIN
    SELECT PARCELAS, CAST(INTERVALO AS INTEGER)
    FROM   FORMAS_DE_PAGAMENTO
    WHERE  CODIGO_FORMA = :PCODIGO_FORMA
    INTO   :vPARCELAS, :vINTERVALO;
  END
  WHILE (vCONT <= vPARCELAS) DO
  BEGIN
    vVCT_PCP = vVCT_PCP + vINTERVALO;
    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, AUTENTICACAO,
    IMPRIMIU, DT_PGTO, BCO_PG, AGE_PG, CTA_PG, NRO_CHQ, VL_PG, DT_IMPRESSAO,
    EPRAIMPRIMIR, STATUS, VALOR_ABATIMENTO, VALOR_DESCONTO, VALOR_JUROS_MORA, VALOR_MULTA,
    CODIGO_BARRAS, BANCO_DESTINO, AGENCIA_DESTINO, CONTA_DESTINO, TIPO_SERVICO,
    FORMA_LANCAMENTO, CAMARA_CENTRALIZADORA, DATA_AGENDADA, VALOR_ORIGINAL, TIPO_MOVIMENTO,
    VALOR_DESPESAS, NOSSONUMERO, INSTRUMOV, DATA_LIM_DESCONTO, NUMLAN, APROVADO, DATRAN, USUARIO
    )
    VALUES (
    :vEMPRESA, :vFILIAL, :vPCP, :vCONT, :vPARCELAS, :vDT_EMIS, :vVLR_PCP, :vVCT_PCP, :vCOD_FORN, :vFOR_A,
        '', '', '', '', '', '', :vOBSERVACAO,
        :vNUMERO_DOCUMENTO, :vTIPO_DOCUMENTO, :vMOEDA, :vQTD_MOEDA, :vDATA_EMIDOC, :vAUTENTICACAO,
        :vIMPRIMIU, :vDT_PGTO, :vBCO_PG, :vAGE_PG, :vCTA_PG, :vNRO_CHQ, :vVL_PG, :vDT_IMPRESSAO,
        :vEPRAIMPRIMIR, :vSTATUS, :vVALOR_ABATIMENTO, :vVALOR_DESCONTO, :vVALOR_JUROS_MORA, :vVALOR_MULTA,
        :vCODIGO_BARRAS, :vBANCO_DESTINO, :vAGENCIA_DESTINO, :vCONTA_DESTINO, :vTIPO_SERVICO,
        :vFORMA_LANCAMENTO, :vCAMARA_CENTRALIZADORA, :vDATA_AGENDADA, :vVALOR_ORIGINAL, :vTIPO_MOVIMENTO,
        :vVALOR_DESPESAS, :vNOSSONUMERO, :vINSTRUMOV, :vDATA_LIM_DESCONTO, :vNUMLAN, :vAPROVADO, :vDATRAN, :vUSUARIO
        );
    SELECT EMPRESA, FILIAL, PCP, PARCELA, DEPARTAMENTO, SETOR, APLICACAO, PERCENTUAL, VALOR,
           NDEPARTAMENTO, NSETOR, NAPLICACAO, TIPO_RATEIO, FORMA_RATEIO
    FROM   CCUSTOPCP
    WHERE  EMPRESA     = :PEMPRESA
           AND FILIAL  = :PFILIAL
           AND PCP     = :PPCP
           AND PARCELA = 1
    INTO   :vEMPRESA, :vFILIAL, :vPCP, :vPARCELA, :vDEPARTAMENTO, :vSETOR, :vAPLICACAO,
           :vPERCENTUAL, :vVALOR_RATEIO, :vNDEPARTAMENTO, :vNSETOR, :vNAPLICACAO,
           :vTIPO_RATEIO, :vFORMA_RATEIO;

    INSERT INTO CCUSTOPCP(EMPRESA, FILIAL, PCP, PARCELA, DEPARTAMENTO, SETOR, APLICACAO,
                          PERCENTUAL, VALOR, NDEPARTAMENTO, NSETOR, NAPLICACAO,
                          TIPO_RATEIO, FORMA_RATEIO)
                   VALUES(:PEMPRESA, :PFILIAL, :vPCP, :vCONT, :vDEPARTAMENTO, :vSETOR, :vAPLICACAO,
                          :vPERCENTUAL, :vVALOR_RATEIO, :vNDEPARTAMENTO, :vNSETOR, :vNAPLICACAO, :vTIPO_RATEIO, :vFORMA_RATEIO);

    vCONT = vCONT + 1;
  END
END
 ^

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

Tadeu Oliveira

Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar