PAGUE 6 MESES
LEVE 12 MESES
GARANTIR DESCONTO

Fórum "FOR SELECT DO BEGIN ...END DENTRO DE UM WHILE PODE? #380958

08/07/2010

0

Bom dia meus caros.

Tenho uma procedure para gerar parcelamento de títulos no contas a pagar e utilizo while para gerar os titulos das parcelas utilizando como base o título da primeira parcela e este titulo possui um rateio de centro de custos ou seja ele tem ter no mínimo um centro de custos mas pode ter n centro de custos e em função disto utilizo um for select do dentro do while, o resultado é que ele não está gerando o centro de custo das parcelas.

Por isso a pergunta posso utilizar um for select do dentro de um while?

O For Select pode se perder ou algo parecido?

Se não for possivel isto vou ter que modificar a procedure qual a melhor maneira de se fazer isto?

Segue abaixo o metadata da procedure.

Obrigado a todos.

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,
  "PPARCELA" INTEGER
)
AS
BEGIN EXIT; END ^


ALTER PROCEDURE "CRIA_PARC_PCP"
(
  "PEMPRESA" VARCHAR(18),
  "PFILIAL" VARCHAR(18),
  "PPCP" INTEGER,
  "PCODIGO_FORMA" INTEGER,
  "PPARCELA" 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                   TIMESTAMP;
DECLARE VARIABLE vVLR_PCP                   DOUBLE PRECISION;
DECLARE VARIABLE vVCT_PCP                   TIMESTAMP;
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               TIMESTAMP;
DECLARE VARIABLE vAUTENTICACAO              VARCHAR(255);
DECLARE VARIABLE vIMPRIMIU                  VARCHAR(1);
DECLARE VARIABLE vDT_PGTO                   TIMESTAMP;
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             TIMESTAMP;
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                     TIMESTAMP;
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        TIMESTAMP;
DECLARE VARIABLE vNUMLAN                    INTEGER;
DECLARE VARIABLE vAPROVADO                  VARCHAR(5);
DECLARE VARIABLE vDATRAN                    TIMESTAMP;
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  = :PPARCELA
  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 = :PPARCELA + 1;
  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
        );
    FOR 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 = :vCONT
        INTO   :vEMPRESA, :vFILIAL, :vPCP, :vPARCELA, :vDEPARTAMENTO, :vSETOR, :vAPLICACAO,
               :vPERCENTUAL, :vVALOR_RATEIO, :vNDEPARTAMENTO, :vNSETOR, :vNAPLICACAO,
               :vTIPO_RATEIO, :vFORMA_RATEIO
    DO
    BEGIN
      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);
    END
    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