DROP TYPE MAPA_COTACAO_MOBILE_TABLE
/

DROP TYPE MAPA_COTACAO_MOBILE_TYPE
/

CREATE TYPE MAPA_COTACAO_MOBILE_TYPE AS
OBJECT(NRCOLEPRECO      VARCHAR2(20),
       CDREGIAO         VARCHAR2(3),
       NMREGIAO         VARCHAR2(30),
       CDPRODUTO        VARCHAR2(10),
       CDARVPROD        VARCHAR2(20),
       NMPRODUTO        VARCHAR2(50),
       SGUNIDADE        VARCHAR2(10),
       CDMARCA          VARCHAR2(5),
       NMMARCA          VARCHAR2(20),
       CDFORNECED       VARCHAR2(21),
       NMFANTFORN       VARCHAR2(40),
       IDTPIJURFORN     VARCHAR2(1),
       NRINSJURFORN     VARCHAR2(20),
       CDOPERADOR       VARCHAR2(12),
       NMOPERADOR       VARCHAR2(40),
       IDMENORPRECO     VARCHAR2(1),    /*IDENTIFICADOR DE ITEM DE MENOR PRECO*/
       VRPRECUNIITM     FLOAT,          /*VALOR DO ITEM CONSIDERANDO O PARAMETRO DE DESCONTO*/
       QTACOMPRAR       FLOAT,          /*QUANTIDADE A COMPRAR*/
       VRPERDESITM      FLOAT,          /*VALOR DO DESCONTO DO ITEM DE COTACAO*/
       MIN_VRPRECUNIITM FLOAT,          /*MENOR VALOR DO ITEM CONSIDERANDO O PARAMETRO DE DESCONTO*/
       VRPRECOREAL      FLOAT,          /*VALOR DO ITEM REAL(SEM DESCONTO)*/
       VRTOTALITEMREAL  FLOAT,          /*VALOR TOTAL DO ITEM REAL(SEM DESCONTO)*/
       VRTOTALITEMDES   FLOAT,          /*VALOR TOTAL DO ITEM CONSIDERANDO O PARAMETRO DE DESCONTO*/
       VRIPI            FLOAT,          /*VALOR DO IPI*/
       IDTPFORPGTFO     VARCHAR2(1),    /*IDENTIFICADOR DE CONDICAO DE PAGAMENTO(F=FIXO, V=VARIAVEL)*/
       FORMAPGTO        VARCHAR2(100),  /*DESCRICAO DA CONDICAO DE PAGAMENTO*/
       NRPZOENTCOL      VARCHAR2(3),    /*NUMERO DE DIAS CONDICAO DE PAGAMENTO*/
       DSOBSITMCOL      VARCHAR2(1000), /*OBSERVACAO DO ITEM DE COTACAO*/
       VRFRETEFORN      FLOAT,          /*VALOR DO FRETE DO ITEM DE COTACAO*/
       VRPRECOESTOQ     FLOAT,          /*VALOR DO ITEM CONVERTIDO UM UNIADDE DE ESTOQUE CONSIDERANDO O PARAMETRO DE DESCONTO*/
       VRFATOCONV       FLOAT,          /*VALOR DO FATOR DE CONVERSAO DO PRODUTO*/
       VRCUSTOREFER     FLOAT,          /*VALOR DO CUSTO DE REFERENCIA*/
       VRVARIACUSTO     FLOAT,          /*PERCENTUAL DE VARIACAO DO VALOR DE REFERENCIA PARA COTACAO ATUAL(REAL)*/
       NRORG            NUMBER,
       MIN_VRVARIACUSTO FLOAT,          /*PERCENTUAL DE VARIACAO DO VALOR DE REFERENCIA PARA O MENOR VALOR(CONSIDERANDO DESCONTO)*/
       MIN_VRPRECOREAL  FLOAT           /*MENOR VALOR DO ITEM REAL(SEM DESCONTO)*/
       )
/

CREATE TYPE MAPA_COTACAO_MOBILE_TABLE AS TABLE OF MAPA_COTACAO_MOBILE_TYPE
/

CREATE OR REPLACE FUNCTION MAPA_COTACAO_MOBILE(P_CDFILIAL        IN VARCHAR2,
                                               P_DTINICIAL       IN DATE,
                                               P_DTFINAL         IN DATE,
                                               P_CDPRODINI       IN VARCHAR2,
                                               P_CDPRODFIM       IN VARCHAR2,
                                               P_CDREGIAO        IN VARCHAR2,
                                               P_TCDREGIAO       IN VARCHAR2,
                                               P_CDFORNECED      IN VARCHAR2,
                                               P_TCDFORNECED     IN VARCHAR2,
                                               P_CDOPERADOR      IN VARCHAR2,
                                               P_CHBDESCONTO     IN VARCHAR2, /*EXIBE OU NAO EXIBE O DESCONTO DO ITEM DE COTACAO*/
                                               P_EXIBEQTDE       IN VARCHAR2 DEFAULT 'N', /*EXIBE OU NAO EXIBE QTDE A COMPRAR*/
                                               P_EXIBECOTACAO    IN VARCHAR2 DEFAULT 'N', /*EXIBE OU NAO EXIBE N- COTACAO*/
                                               P_EXIBEIPI        IN VARCHAR2 DEFAULT 'N', /*EXIBE OU NAO EXIBE IPI*/
                                               P_EXIBEPGTO       IN VARCHAR2 DEFAULT 'N', /*EXIBE OU NAO EXIBE CONDICAO DE PGTO*/
                                               P_EXIBEREFE       IN VARCHAR2 DEFAULT 'N', /*EXIBE CUSTO DE REFERENCIA(N=NAO, A=AF OU C=CUSTO INFORMADO)*/
                                               P_NRTIPOCUSTO     IN NUMBER   DEFAULT 3,   /*CODIGO DO TIPO DE CUSTO*/
                                               P_VRPERCENTACRES  IN FLOAT    DEFAULT 0,   /*VALOR DO PRECENTUAL DE ACRESCIMO QUE SERA APLICADO NO CUSTO DE REFERENCIA*/
                                               P_EXIBEMENORPREC  IN VARCHAR2 DEFAULT 'N',  /*EXIBE OU NAO EXIBE MENOR PRECO*/
                                               P_EXIBEDADOSEM    IN VARCHAR2 DEFAULT 'C', /*EXIBE PEDIDO COM COTACAO 'S' SEM COTACAO 'N' AMBOS 'T'*/
                                               P_IDGERACOT       IN VARCHAR2 DEFAULT 'N') RETURN MAPA_COTACAO_MOBILE_TABLE PIPELINED
IS
   TYPE CURTYPE      IS REF CURSOR;
   C_REGIAO          CURTYPE;
   C_FORNECEDORES    CURTYPE;
   V_NRPAGINA        NUMERIC;
   V_QUANTFORN       NUMERIC;
   V_QTACOMPRAR      FLOAT;
   V_VRPRECUNIITM    FLOAT;
   V_VRPREUNDESC     FLOAT;
   V_VRMINPRECUNIITM FLOAT;
   V_VRMINPREUNDESC  FLOAT;
   V_VRMENORPRECO    FLOAT;
   V_VRPRECPROD      FLOAT;
   V_VRPRESCPROD     FLOAT;
   V_CHAVE           VARCHAR2(50);
   V_CHAVEPRECO      VARCHAR2(50);
   V_VRIPI           FLOAT := 0;
   V_IDTPFORPGTFO    VARCHAR2(1);
   V_FORMAPGTO       VARCHAR2(100);
   V_NRPZOENTCOL     VARCHAR2(3);
   V_VRCUSTOREFER    FLOAT := 0;
   V_DTINICIAL       VARCHAR2(20);
   V_DTFINAL         VARCHAR2(20);
   V_REGIAO_CDREGIAO VARCHAR2(3);
   V_REGIAO_NRCOLEPRECO VARCHAR2(20);

   V_FORNECEDORES_CDREGIAO     REGIAO.CDREGIAO%TYPE;
   V_FORNECEDORES_CDFORNECED   FORNECEDOR.CDFORNECED%TYPE;
   V_FORNECEDORES_NMFANTFORN   FORNECEDOR.NMFANTFORN%TYPE;
   V_FORNECEDORES_CDOPERADOR   OPERADOR.CDOPERADOR%TYPE;
   V_FORNECEDORES_CDPRODUTO    PRODUTO.CDPRODUTO%TYPE;
   V_FORNECEDORES_CDMARCA      MARCA.CDMARCA%TYPE;
   V_FORNECEDORES_NMPRODUTO    PRODUTO.NMPRODUTO%TYPE;
   V_FORNECEDORES_CDPRODESTO   PRODUTO.CDPRODESTO%TYPE;
   V_FORNECEDORES_IDTPIJURFORN FORNECEDOR.IDTPIJURFORN%TYPE;
   V_FORNECEDORES_NRINSJURFORN FORNECEDOR.NRINSJURFORN%TYPE;
   V_FORNECEDORES_CDARVPROD    PRODUTO.CDARVPROD%TYPE;
   V_FORNECEDORES_SGUNIDADE    PRODUTO.SGUNIDADE%TYPE;
   V_FORNECEDORES_NMMARCA      MARCA.NMMARCA%TYPE;
   V_FORNECEDORES_NMREGIAO     REGIAO.NMREGIAO%TYPE;
   V_FORNECEDORES_NMOPERADOR   OPERADOR.NMOPERADOR%TYPE;
   V_FORNECEDORES_VRFATOCONV   PRODUTO.VRFATOCONV%TYPE;
   V_FORNECEDORES_VRPRECUNIITM ITEMCOLE.VRPRECUNIITM%TYPE;
   V_FORNECEDORES_NRCOLEPRECO  VARCHAR2(20);
   V_FORNECEDORES_VRPERDESITM  ITEMCOLE.VRPERDESITM%TYPE;
   V_FORNECEDORES_VRPRECOREAL  ITEMCOLE.VRPRECUNIITM%TYPE;
   V_FORNECEDORES_DSOBSITMCOL  ITEMCOLE.DSOBSITMCOL%TYPE;
   V_FORNECEDORES_VRFRETEFORN  FORNECEDOR.VRFRETEFORN%TYPE;
   V_FORNECEDORES_NRORG        ITEMCOLE.NRORG%TYPE;
   V_FORNECEDORES_M_VRPRECUN   ITEMCOLE.VRPRECUNIITM%TYPE;
   V_FORNECEDORES_M_VRPRECOR   ITEMCOLE.VRPRECUNIITM%TYPE;

   OUT_RECORD MAPA_COTACAO_MOBILE_TYPE := MAPA_COTACAO_MOBILE_TYPE (NULL, NULL, NULL, NULL, NULL, NULL,
                                                                    NULL, NULL, NULL, NULL, NULL, NULL,
                                                                    NULL, NULL, NULL, NULL, 0, 0, 0, 0,
                                                                    0, 0, 0, 0, NULL, NULL, NULL, NULL,
                                                                    0, 0, 0, 0, 0, 0, 0, 0);
BEGIN
   
   BEGIN
      V_DTINICIAL := TO_CHAR(P_DTINICIAL, 'DD/MM/YYYY');
      V_DTFINAL   := TO_CHAR(P_DTFINAL, 'DD/MM/YYYY');
   EXCEPTION
      WHEN OTHERS THEN BEGIN
         V_DTINICIAL := TRUNC(P_DTINICIAL);
         V_DTFINAL   := TRUNC(P_DTFINAL);
      END;
   END;
   V_NRPAGINA := 0;

   IF P_EXIBEDADOSEM = 'C' THEN
      OPEN C_REGIAO FOR
         SELECT I.CDREGIAO, CASE P_EXIBECOTACAO
                               WHEN 'N'
                               THEN NULL
                               ELSE I.NRCOLEPRECO
                            END NRCOLEPRECO
           FROM COLETAPR C INNER JOIN ITEMCOLE I ON I.NRCOLEPRECO = C.NRCOLEPRECO
                                                AND I.CDFILIAL    = C.CDFILIAL
          WHERE C.CDFILIAL     = P_CDFILIAL
            AND C.CDOPERADOR   = P_CDOPERADOR
            AND I.DTINIVALITM  <= V_DTFINAL
            AND I.DTFINVALITM  >= V_DTINICIAL
            AND ((INSTR(P_CDREGIAO, I.CDREGIAO) <> 0) OR P_TCDREGIAO = 'T')
            AND ((INSTR(P_CDFORNECED,I.CDFORNECED) <> 0) OR (P_TCDFORNECED = 'T'))
            AND NVL(I.VRPRECUNIITM, 0) > 0
          GROUP BY I.CDREGIAO, CASE P_EXIBECOTACAO
                                  WHEN 'N'
                                  THEN NULL
                                  ELSE I.NRCOLEPRECO
                               END
          ORDER BY I.CDREGIAO, 2;
   ELSE
      OPEN C_REGIAO FOR
         SELECT PEDCOLETA.CDREGIAO, CASE P_EXIBECOTACAO
                                       WHEN 'N'
                                       THEN NULL
                                       ELSE PEDCOLGERAL.NRPEDIDOCOL||PEDCOLETA.NRPEDCOLETA
                                    END
          FROM PEDCOLETA INNER JOIN PEDCOLGERAL ON PEDCOLETA.CDFILIAL    = PEDCOLGERAL.CDFILIAL
                                               AND PEDCOLETA.NRPEDIDOCOL = PEDCOLGERAL.NRPEDIDOCOL
                         INNER JOIN FORNECEDOR  ON PEDCOLETA.CDFORNECED  = FORNECEDOR.CDFORNECED
                         INNER JOIN REGIAO      ON PEDCOLETA.CDREGIAO    = REGIAO.CDREGIAO
         WHERE PEDCOLETA.CDFILIAL      = P_CDFILIAL
           AND PEDCOLGERAL.CDOPERADOR  = P_CDOPERADOR
           AND PEDCOLETA.DTINIPERCOT <= V_DTFINAL
           AND PEDCOLETA.DTFINPERCOT >= V_DTINICIAL
           AND (INSTR(P_CDFORNECED,  FORNECEDOR.CDFORNECED ) > 0 OR P_TCDFORNECED  = 'T')
           AND (INSTR(P_CDREGIAO,    REGIAO.CDREGIAO       ) > 0 OR P_TCDREGIAO    = 'T')
           AND EXISTS (SELECT '1'
                         FROM ITEMPEDCOL IPC, PRODUTO P
                        WHERE IPC.CDFILIAL    = PEDCOLETA.CDFILIAL
                          AND IPC.NRPEDCOLETA = PEDCOLETA.NRPEDCOLETA
                          AND IPC.CDREGIAO    = PEDCOLETA.CDREGIAO
                          AND IPC.CDFORNECED  = PEDCOLETA.CDFORNECED
                          AND IPC.CDPRODUTO   = P.CDPRODUTO
                          AND (NVL(IPC.VRITEMPEDCOL, 0)  > 0)
                          AND P.CDARVPROD BETWEEN P_CDPRODINI AND RPAD(P_CDPRODFIM , 20, 'Z'))
                          AND ((P_IDGERACOT = 'T')
                                OR
                              (P_IDGERACOT = 'S' AND EXISTS (SELECT '1'
                                                              FROM ITEMCOLE I
                                                              WHERE I.CDFILIAL    = PEDCOLETA.CDFILIAL
                                                                AND I.NRPEDIDOCOL = PEDCOLETA.NRPEDIDOCOL
                                                                AND I.CDREGIAO    = PEDCOLETA.CDREGIAO
                                                                AND I.CDFORNECED  = PEDCOLETA.CDFORNECED))
                                OR
                              (P_IDGERACOT = 'N' AND NOT EXISTS (SELECT '1'
                                                                  FROM ITEMCOLE I
                                                                  WHERE I.CDFILIAL    = PEDCOLETA.CDFILIAL
                                                                    AND I.NRPEDIDOCOL = PEDCOLETA.NRPEDIDOCOL
                                                                    AND I.CDREGIAO    = PEDCOLETA.CDREGIAO
                                                                    AND I.CDFORNECED  = PEDCOLETA.CDFORNECED)
                              ))
         GROUP BY PEDCOLETA.CDREGIAO, CASE P_EXIBECOTACAO
                                         WHEN 'N'
                                         THEN NULL
                                         ELSE PEDCOLGERAL.NRPEDIDOCOL||PEDCOLETA.NRPEDCOLETA
                                      END
           ORDER BY PEDCOLETA.CDREGIAO, 2;
   END IF;
   LOOP
   FETCH C_REGIAO INTO  V_REGIAO_CDREGIAO, V_REGIAO_NRCOLEPRECO;
   EXIT WHEN C_REGIAO%NOTFOUND;
      V_CHAVE      := '_';
      V_CHAVEPRECO := '_';
      IF P_EXIBEDADOSEM = 'C' THEN
         OPEN C_FORNECEDORES FOR
            SELECT CDREGIAO, CDFORNECED, NMFANTFORN,  CDOPERADOR, CDPRODUTO,
                   CDMARCA, NMPRODUTO, CDPRODESTO, IDTPIJURFORN, NRINSJURFORN,
                   CDARVPROD, SGUNIDADE, NMMARCA, NMREGIAO, NMOPERADOR,
                   VRFATOCONV, MIN(VRPRECUNIITM), NRCOLEPRECO, MIN_VRPRECUNIITM,
                   MIN_VRPRECOREAL, MIN(VRPERDESITM), MIN(VRPRECOREAL), MIN(DSOBSITMCOL),
                   MIN(VRFRETEFORN), NRORG
              FROM (  SELECT I.CDREGIAO, I.CDFORNECED, F.NMFANTFORN,  C.CDOPERADOR, I.CDPRODUTO,
                             I.CDMARCA, P.NMPRODUTO, P.CDPRODESTO, F.IDTPIJURFORN, F.NRINSJURFORN,
                             P.CDARVPROD, P.SGUNIDADE, M.NMMARCA, R.NMREGIAO, O.NMOPERADOR,
                             NVL(P.VRFATOCONV, 1) VRFATOCONV,
                             CASE P_CHBDESCONTO
                                WHEN 'N'
                                THEN I.VRPRECUNIITM
                                ELSE I.VRPRECUNIITM - (I.VRPRECUNIITM*NVL(I.VRPERDESITM, F.VRPEDESCFORN)/100)
                             END VRPRECUNIITM,
                             I.NRCOLEPRECO,
                             MIN(CASE P_CHBDESCONTO
                                    WHEN 'N'
                                    THEN I.VRPRECUNIITM
                                    ELSE I.VRPRECUNIITM - (I.VRPRECUNIITM*NVL(I.VRPERDESITM, F.VRPEDESCFORN)/100)
                                 END) OVER (PARTITION BY I.CDREGIAO, I.CDPRODUTO) MIN_VRPRECUNIITM,
                             MIN(I.VRPRECUNIITM) OVER (PARTITION BY I.CDREGIAO, I.CDPRODUTO) MIN_VRPRECOREAL,
                             NVL(I.VRPERDESITM, F.VRPEDESCFORN) VRPERDESITM,
                             I.VRPRECUNIITM VRPRECOREAL,
                             MAX(DSOBSITMCOL) OVER (PARTITION BY I.CDPRODUTO, I.CDMARCA, I.NRCOLEPRECO) DSOBSITMCOL,
                             NVL(I.VRFRETEFORNEPLANCOT, F.VRFRETEFORN) AS VRFRETEFORN, I.NRORG
                        FROM ITEMCOLE I INNER JOIN COLETAPR C   ON I.CDFILIAL    = C.CDFILIAL
                                                               AND I.NRCOLEPRECO = C.NRCOLEPRECO
                                        INNER JOIN FORNECEDOR F ON I.CDFORNECED  = F.CDFORNECED
                                        INNER JOIN PRODUTO P    ON I.CDPRODUTO   = P.CDPRODUTO
                                        INNER JOIN MARCA M    ON I.CDMARCA     = M.CDMARCA
                                        INNER JOIN REGIAO R   ON I.CDREGIAO    = R.CDREGIAO
                                        INNER JOIN OPERADOR O ON C.CDOPERADOR  = O.CDOPERADOR
                       WHERE C.CDFILIAL    =  P_CDFILIAL
                         AND C.CDOPERADOR  =  P_CDOPERADOR
                         AND I.CDREGIAO    =  V_REGIAO_CDREGIAO
                         AND I.NRCOLEPRECO =  NVL(V_REGIAO_NRCOLEPRECO, I.NRCOLEPRECO)
                         AND I.DTINIVALITM <= V_DTFINAL
                         AND I.DTFINVALITM >= V_DTINICIAL
                         AND P.CDARVPROD BETWEEN P_CDPRODINI AND RPAD(P_CDPRODFIM , 20, 'Z')
                         AND ((INSTR(P_CDFORNECED,I.CDFORNECED) <> 0) OR (P_TCDFORNECED  = 'T'))
                         AND NVL(I.VRPRECUNIITM, 0) > 0
                         AND P_EXIBECOTACAO = 'S'

                      UNION ALL

                      SELECT I.CDREGIAO, I.CDFORNECED, F.NMFANTFORN,  I.CDOPERADOR, I.CDPRODUTO,
                             I.CDMARCA, P.NMPRODUTO, P.CDPRODESTO, F.IDTPIJURFORN, F.NRINSJURFORN,
                             P.CDARVPROD, P.SGUNIDADE, M.NMMARCA, R.NMREGIAO, O.NMOPERADOR,
                             NVL(P.VRFATOCONV, 1) VRFATOCONV,
                             CASE P_CHBDESCONTO
                                WHEN 'N'
                                THEN I.VRPRECUNIITM
                                ELSE I.VRPRECUNIITM - (I.VRPRECUNIITM*NVL(I.VRPERDESITM, F.VRPEDESCFORN)/100)
                             END VRPRECUNIITM, NULL NRCOLEPRECO,
                             MIN(CASE P_CHBDESCONTO
                                   WHEN 'N'
                                   THEN I.VRPRECUNIITM
                                   ELSE I.VRPRECUNIITM - (I.VRPRECUNIITM*NVL(I.VRPERDESITM, F.VRPEDESCFORN)/100)
                                END) OVER (PARTITION BY I.CDREGIAO, I.CDPRODUTO) MIN_VRPRECUNIITM,
                             MIN(I.VRPRECUNIITM) OVER (PARTITION BY I.CDREGIAO, I.CDPRODUTO) MIN_VRPRECOREAL,
                             NVL(I.VRPERDESITM, F.VRPEDESCFORN) VRPERDESITM,
                             I.VRPRECUNIITM VRPRECOREAL,
                             I.DSOBSITMCOL,
                             NVL(I.VRFRETEFORNEPLANCOT, F.VRFRETEFORN) AS VRFRETEFORN, P.NRORG
                       FROM ( SELECT I.CDREGIAO, I.CDFORNECED, C.CDOPERADOR, I.CDPRODUTO,
                                     I.CDMARCA, MIN(I.VRPRECUNIITM) VRPRECUNIITM,
                                     MIN(I.VRPERDESITM) VRPERDESITM,
                                     MAX(I.DSOBSITMCOL) DSOBSITMCOL,
                                     MIN(I.VRFRETEFORNEPLANCOT) AS VRFRETEFORNEPLANCOT
                                FROM ITEMCOLE I INNER JOIN COLETAPR C  ON I.CDFILIAL    = C.CDFILIAL
                                                                      AND I.NRCOLEPRECO = C.NRCOLEPRECO
                               WHERE C.CDFILIAL    =  P_CDFILIAL
                                 AND C.CDOPERADOR  =  P_CDOPERADOR
                                 AND I.CDREGIAO    =  V_REGIAO_CDREGIAO
                                 AND I.NRCOLEPRECO =  NVL(V_REGIAO_NRCOLEPRECO, I.NRCOLEPRECO)
                                 AND I.DTINIVALITM <= V_DTFINAL
                                 AND I.DTFINVALITM >= V_DTINICIAL
                                 AND ((INSTR(P_CDFORNECED,I.CDFORNECED) <> 0) OR (P_TCDFORNECED  = 'T'))
                                 AND NVL(I.VRPRECUNIITM, 0) > 0
                               GROUP BY I.CDREGIAO, I.CDFORNECED, C.CDOPERADOR, I.CDPRODUTO, I.CDMARCA
                            ) I INNER JOIN FORNECEDOR F ON I.CDFORNECED  = F.CDFORNECED
                                INNER JOIN PRODUTO P    ON I.CDPRODUTO   = P.CDPRODUTO
                                INNER JOIN MARCA M      ON I.CDMARCA     = M.CDMARCA
                                INNER JOIN REGIAO R     ON I.CDREGIAO    = R.CDREGIAO
                                INNER JOIN OPERADOR O   ON I.CDOPERADOR  = O.CDOPERADOR
                      WHERE P.CDARVPROD BETWEEN P_CDPRODINI AND RPAD(P_CDPRODFIM , 20, 'Z')
                        AND P_EXIBECOTACAO = 'N')
             GROUP BY CDREGIAO, CDFORNECED, NMFANTFORN,  CDOPERADOR, CDPRODUTO,
                   CDMARCA, NMPRODUTO, CDPRODESTO, IDTPIJURFORN, NRINSJURFORN,
                   CDARVPROD, SGUNIDADE, NMMARCA, NMREGIAO, NMOPERADOR,
                   VRFATOCONV, NRCOLEPRECO, MIN_VRPRECUNIITM,
                   MIN_VRPRECOREAL, NRORG
             ORDER BY NRCOLEPRECO, CDREGIAO, CDPRODUTO, CDMARCA, CDFORNECED;
      ELSE
         OPEN C_FORNECEDORES FOR
            SELECT CDREGIAO, CDFORNECED, NMFANTFORN,  CDOPERADOR, CDPRODUTO,
                   CDMARCA, NMPRODUTO, CDPRODESTO, IDTPIJURFORN, NRINSJURFORN,
                   CDARVPROD, SGUNIDADE, NMMARCA, NMREGIAO, NMOPERADOR,
                   VRFATOCONV, MIN(VRPRECUNIITM), NRCOLEPRECO, MIN_VRPRECUNIITM,
                   MIN_VRPRECOREAL, MIN(VRPERDESITM), MIN(VRPRECOREAL), MIN(DSOBSITMCOL),
                   MIN(VRFRETEFORN), NRORG
              FROM (SELECT I.CDREGIAO, I.CDFORNECED, F.NMFANTFORN,  PEDCOLGERAL.CDOPERADOR, I.CDPRODUTO,
                           I.CDMARCA, P.NMPRODUTO, P.CDPRODESTO, F.IDTPIJURFORN, F.NRINSJURFORN,
                           P.CDARVPROD, P.SGUNIDADE, M.NMMARCA, R.NMREGIAO, O.NMOPERADOR,
                           NVL(P.VRFATOCONV, 1) VRFATOCONV,
                           CASE P_CHBDESCONTO
                              WHEN 'N'
                              THEN I.VRITEMPEDCOL
                              ELSE I.VRITEMPEDCOL - (I.VRITEMPEDCOL*F.VRPEDESCFORN/100)
                           END VRPRECUNIITM,
                           PRMARCPEDCOL.NRPEDIDOCOL NRCOLEPRECO,
                           MIN(CASE P_CHBDESCONTO
                                  WHEN 'N'
                                  THEN I.VRITEMPEDCOL
                                  ELSE I.VRITEMPEDCOL - (I.VRITEMPEDCOL*F.VRPEDESCFORN/100)
                               END) OVER (PARTITION BY I.CDREGIAO, I.CDPRODUTO) MIN_VRPRECUNIITM,
                           MIN(I.VRITEMPEDCOL) OVER (PARTITION BY I.CDREGIAO, I.CDPRODUTO) MIN_VRPRECOREAL,
                           F.VRPEDESCFORN VRPERDESITM,
                           I.VRITEMPEDCOL VRPRECOREAL,
                           '' DSOBSITMCOL,
                           F.VRFRETEFORN AS VRFRETEFORN, I.NRORG
                      FROM PEDCOLGERAL INNER JOIN PEDCOLETA
                                             ON PEDCOLETA.CDFILIAL    = PEDCOLGERAL.CDFILIAL
                                            AND PEDCOLETA.NRPEDIDOCOL = PEDCOLGERAL.NRPEDIDOCOL
                                     INNER JOIN ITEMPEDCOL I
                                             ON PEDCOLETA.CDFILIAL    = I.CDFILIAL
                                            AND PEDCOLETA.NRPEDCOLETA = I.NRPEDCOLETA
                                            AND PEDCOLETA.CDFORNECED  = I.CDFORNECED
                                            AND PEDCOLETA.CDREGIAO    = I.CDREGIAO
                                      INNER JOIN PRMARCPEDCOL
                                              ON I.CDFILIAL  = PRMARCPEDCOL.CDFILIAL
                                             AND I.CDPRODUTO = PRMARCPEDCOL.CDPRODUTO
                                             AND I.CDMARCA   = PRMARCPEDCOL.CDMARCA
                                             AND PRMARCPEDCOL.NRPEDIDOCOL = PEDCOLGERAL.NRPEDIDOCOL
                                      INNER JOIN FORNECEDOR F ON I.CDFORNECED  = F.CDFORNECED
                                      INNER JOIN REGIAO R   ON I.CDREGIAO    = R.CDREGIAO
                                      INNER JOIN OPERADOR O ON PEDCOLGERAL.CDOPERADOR  = O.CDOPERADOR
                                      INNER JOIN PRODUTO P    ON I.CDPRODUTO   = P.CDPRODUTO
                                      INNER JOIN MARCA M    ON I.CDMARCA     = M.CDMARCA

                     WHERE I.CDFILIAL    =  P_CDFILIAL
                       AND PRMARCPEDCOL.NRPEDIDOCOL||I.NRPEDCOLETA = V_REGIAO_NRCOLEPRECO

                       AND PEDCOLGERAL.CDOPERADOR  = P_CDOPERADOR
                       AND PEDCOLETA.DTINIPERCOT <= V_DTFINAL
                       AND PEDCOLETA.DTFINPERCOT >= V_DTINICIAL
                       AND I.CDREGIAO    =  V_REGIAO_CDREGIAO
                       AND P.CDARVPROD BETWEEN P_CDPRODINI AND RPAD(P_CDPRODFIM , 20, 'Z')
                       AND ((INSTR(P_CDFORNECED,I.CDFORNECED) <> 0) OR (P_TCDFORNECED  = 'T'))
                       AND NVL(I.VRITEMPEDCOL, 0) > 0
                       AND P_EXIBECOTACAO = 'S'
                       AND ((P_IDGERACOT = 'T')
                             OR
                           (P_IDGERACOT = 'S' AND EXISTS (SELECT '1'
                                                           FROM ITEMCOLE I
                                                           WHERE I.CDFILIAL    = PEDCOLETA.CDFILIAL
                                                             AND I.NRPEDIDOCOL = PEDCOLETA.NRPEDIDOCOL
                                                             AND I.CDREGIAO    = PEDCOLETA.CDREGIAO
                                                             AND I.CDFORNECED  = PEDCOLETA.CDFORNECED))
                             OR
                           (P_IDGERACOT = 'N' AND NOT EXISTS (SELECT '1'
                                                               FROM ITEMCOLE I
                                                               WHERE I.CDFILIAL    = PEDCOLETA.CDFILIAL
                                                                 AND I.NRPEDIDOCOL = PEDCOLETA.NRPEDIDOCOL
                                                                 AND I.CDREGIAO    = PEDCOLETA.CDREGIAO
                                                                 AND I.CDFORNECED  = PEDCOLETA.CDFORNECED)
                           ))
                    UNION ALL

                    SELECT I.CDREGIAO, I.CDFORNECED, F.NMFANTFORN,  PEDCOLGERAL.CDOPERADOR, I.CDPRODUTO,
                           I.CDMARCA, P.NMPRODUTO, P.CDPRODESTO, F.IDTPIJURFORN, F.NRINSJURFORN,
                           P.CDARVPROD, P.SGUNIDADE, M.NMMARCA, R.NMREGIAO, O.NMOPERADOR,
                           NVL(P.VRFATOCONV, 1) VRFATOCONV,
                           CASE P_CHBDESCONTO
                              WHEN 'N'
                              THEN I.VRITEMPEDCOL
                              ELSE I.VRITEMPEDCOL - (I.VRITEMPEDCOL*F.VRPEDESCFORN/100)
                           END VRPRECUNIITM,
                           NULL NRCOLEPRECO,
                           MIN(CASE P_CHBDESCONTO
                                  WHEN 'N'
                                  THEN I.VRITEMPEDCOL
                                  ELSE I.VRITEMPEDCOL - (I.VRITEMPEDCOL*F.VRPEDESCFORN/100)
                               END) OVER (PARTITION BY I.CDREGIAO, I.CDPRODUTO) MIN_VRPRECUNIITM,
                           MIN(I.VRITEMPEDCOL) OVER (PARTITION BY I.CDREGIAO, I.CDPRODUTO) MIN_VRPRECOREAL,
                           F.VRPEDESCFORN VRPERDESITM,
                           I.VRITEMPEDCOL VRPRECOREAL,
                           '' DSOBSITMCOL,
                           F.VRFRETEFORN AS VRFRETEFORN, I.NRORG
                      FROM PEDCOLGERAL INNER JOIN PEDCOLETA
                                             ON PEDCOLETA.CDFILIAL    = PEDCOLGERAL.CDFILIAL
                                            AND PEDCOLETA.NRPEDIDOCOL = PEDCOLGERAL.NRPEDIDOCOL
                                     INNER JOIN ITEMPEDCOL I
                                             ON PEDCOLETA.CDFILIAL    = I.CDFILIAL
                                            AND PEDCOLETA.NRPEDCOLETA = I.NRPEDCOLETA
                                            AND PEDCOLETA.CDFORNECED  = I.CDFORNECED
                                            AND PEDCOLETA.CDREGIAO    = I.CDREGIAO
                                      INNER JOIN PRMARCPEDCOL
                                              ON I.CDFILIAL  = PRMARCPEDCOL.CDFILIAL
                                             AND I.CDPRODUTO = PRMARCPEDCOL.CDPRODUTO
                                             AND I.CDMARCA   = PRMARCPEDCOL.CDMARCA
                                             AND PRMARCPEDCOL.NRPEDIDOCOL = PEDCOLGERAL.NRPEDIDOCOL
                                      INNER JOIN FORNECEDOR F ON I.CDFORNECED  = F.CDFORNECED
                                      INNER JOIN REGIAO R   ON I.CDREGIAO    = R.CDREGIAO
                                      INNER JOIN OPERADOR O ON PEDCOLGERAL.CDOPERADOR  = O.CDOPERADOR


                                      INNER JOIN PRODUTO P    ON I.CDPRODUTO   = P.CDPRODUTO
                                      INNER JOIN MARCA M    ON I.CDMARCA     = M.CDMARCA

                     WHERE I.CDFILIAL    =  P_CDFILIAL
                       AND PRMARCPEDCOL.NRPEDIDOCOL||I.NRPEDCOLETA = NVL(V_REGIAO_NRCOLEPRECO, PRMARCPEDCOL.NRPEDIDOCOL||I.NRPEDCOLETA)

                       AND PEDCOLGERAL.CDOPERADOR  = P_CDOPERADOR
                       AND PEDCOLETA.DTINIPERCOT <= V_DTFINAL
                       AND PEDCOLETA.DTFINPERCOT >= V_DTINICIAL
                       AND I.CDREGIAO    =  V_REGIAO_CDREGIAO
                       AND P.CDARVPROD BETWEEN P_CDPRODINI AND RPAD(P_CDPRODFIM , 20, 'Z')
                       AND ((INSTR(P_CDFORNECED,I.CDFORNECED) <> 0) OR (P_TCDFORNECED  = 'T'))
                       AND NVL(I.VRITEMPEDCOL, 0) > 0
                       AND P_EXIBECOTACAO = 'N'
                       AND ((P_IDGERACOT = 'T')
                             OR
                           (P_IDGERACOT = 'S' AND EXISTS (SELECT '1'
                                                           FROM ITEMCOLE I
                                                           WHERE I.CDFILIAL    = PEDCOLETA.CDFILIAL
                                                             AND I.NRPEDIDOCOL = PEDCOLETA.NRPEDIDOCOL
                                                             AND I.CDREGIAO    = PEDCOLETA.CDREGIAO
                                                             AND I.CDFORNECED  = PEDCOLETA.CDFORNECED))
                             OR
                           (P_IDGERACOT = 'N' AND NOT EXISTS (SELECT '1'
                                                               FROM ITEMCOLE I
                                                               WHERE I.CDFILIAL    = PEDCOLETA.CDFILIAL
                                                                 AND I.NRPEDIDOCOL = PEDCOLETA.NRPEDIDOCOL
                                                                 AND I.CDREGIAO    = PEDCOLETA.CDREGIAO
                                                                 AND I.CDFORNECED  = PEDCOLETA.CDFORNECED)
                           ))
                       )
             GROUP BY CDREGIAO, CDFORNECED, NMFANTFORN,  CDOPERADOR, CDPRODUTO,
                   CDMARCA, NMPRODUTO, CDPRODESTO, IDTPIJURFORN, NRINSJURFORN,
                   CDARVPROD, SGUNIDADE, NMMARCA, NMREGIAO, NMOPERADOR,
                   VRFATOCONV, NRCOLEPRECO, MIN_VRPRECUNIITM,
                   MIN_VRPRECOREAL, NRORG
             ORDER BY NRCOLEPRECO, CDREGIAO, CDPRODUTO, CDFORNECED, CDMARCA;
      END IF;
      LOOP
      FETCH C_FORNECEDORES INTO  V_FORNECEDORES_CDREGIAO, V_FORNECEDORES_CDFORNECED, V_FORNECEDORES_NMFANTFORN,
                                 V_FORNECEDORES_CDOPERADOR, V_FORNECEDORES_CDPRODUTO, V_FORNECEDORES_CDMARCA,
                                 V_FORNECEDORES_NMPRODUTO, V_FORNECEDORES_CDPRODESTO, V_FORNECEDORES_IDTPIJURFORN,
                                 V_FORNECEDORES_NRINSJURFORN, V_FORNECEDORES_CDARVPROD, V_FORNECEDORES_SGUNIDADE,
                                 V_FORNECEDORES_NMMARCA, V_FORNECEDORES_NMREGIAO, V_FORNECEDORES_NMOPERADOR,
                                 V_FORNECEDORES_VRFATOCONV, V_FORNECEDORES_VRPRECUNIITM, V_FORNECEDORES_NRCOLEPRECO,
                                 V_FORNECEDORES_M_VRPRECUN, V_FORNECEDORES_M_VRPRECOR, V_FORNECEDORES_VRPERDESITM,
                                 V_FORNECEDORES_VRPRECOREAL, V_FORNECEDORES_DSOBSITMCOL, V_FORNECEDORES_VRFRETEFORN,
                                 V_FORNECEDORES_NRORG;
      EXIT WHEN C_FORNECEDORES%NOTFOUND;
         IF (P_EXIBEQTDE = 'S') THEN
            /*Quantidade a comprar*/
            BEGIN
               SELECT QTACOMPRAR
                 INTO V_QTACOMPRAR
                 FROM (  SELECT SUM(COMP.QTDECOMP-NVL(JACOMP.QTDECOMP/COMP.VRFATOCONV,0)) AS QTACOMPRAR
                           FROM PARASUPRI, FILIAL,
                                (SELECT ITEMSOLI.CDFILSOLI AS CDFILIAL, ITEMSOLI.DTPROGENTR, ESTOQUE.CDPRODESTO,
                                        ESTOQUE.CDPRODUTO, ESTOQUE.VRFATOCONV, SUM(ITEMSOLI.QTSOLIPROD*PRODUTO.VRFATOCONV/ESTOQUE.VRFATOCONV) AS QTDECOMP
                                   FROM ITEMSOLI INNER JOIN PRODUTO         ON ITEMSOLI.CDPRODUTO = PRODUTO.CDPRODUTO
                                                 INNER JOIN PRODUTO ESTOQUE ON PRODUTO.CDPRODESTO = ESTOQUE.CDPRODESTO
                                  WHERE ITEMSOLI.IDITMCONS = 'N'
                                    AND ITEMSOLI.DTPROGENTR BETWEEN V_DTINICIAL AND V_DTFINAL
                                    AND ESTOQUE.CDPRODUTO = V_FORNECEDORES_CDPRODUTO
                                    AND NVL(ITEMSOLI.IDSOLIAPROV,'S') = 'S'
                                  GROUP BY ITEMSOLI.CDFILSOLI, ITEMSOLI.DTPROGENTR, ESTOQUE.CDPRODESTO,
                                           ESTOQUE.CDPRODUTO, ESTOQUE.VRFATOCONV) COMP LEFT JOIN
                                (SELECT ITEMAUTF.CDFILDEST AS CDFILIAL, ITEMAUTF.DTENTRITMSOL, PRODUTO.CDPRODESTO,
                                        SUM(ITEMAUTF.QTPROGENTAF*PRODUTO.VRFATOCONV) AS QTDECOMP
                                   FROM ITEMAUTF INNER JOIN AUTOFORNE ON ITEMAUTF.CDFILDEST  = AUTOFORNE.CDFILDEST
                                                                     AND ITEMAUTF.CDFILLANC  = AUTOFORNE.CDFILLANC
                                                                     AND ITEMAUTF.NRAUTOFORN = AUTOFORNE.NRAUTOFORN
                                                 INNER JOIN PRODUTO   ON ITEMAUTF.CDPRODUTO  = PRODUTO.CDPRODUTO
                                  WHERE AUTOFORNE.IDSITUATUAAF IS NULL
                                    AND AUTOFORNE.IDAFFORALIM = 'N'
                                    AND AUTOFORNE.IDAUTOFORNEX = 'N'
                                    AND ITEMAUTF.DTENTRITMSOL BETWEEN V_DTINICIAL AND V_DTFINAL
                                  GROUP BY ITEMAUTF.CDFILDEST, ITEMAUTF.DTENTRITMSOL, PRODUTO.CDPRODESTO) JACOMP ON COMP.CDFILIAL   = JACOMP.CDFILIAL
                                                                                                                AND COMP.DTPROGENTR = JACOMP.DTENTRITMSOL
                                                                                                                AND COMP.CDPRODESTO = JACOMP.CDPRODESTO
                          WHERE PARASUPRI.CDFILIAL = NVL(FILIAL.CDFILCENTCMP, FILIAL.CDFILIAL)
                            AND NVL(PARASUPRI.IDCONSPRSOL, 'N') = 'N'
                            AND COMP.CDFILIAL   = FILIAL.CDFILIAL
                            AND FILIAL.CDREGIAO = V_REGIAO_CDREGIAO
                            AND COMP.QTDECOMP-NVL(JACOMP.QTDECOMP/COMP.VRFATOCONV,0) > 0
                         HAVING SUM(COMP.QTDECOMP-NVL(JACOMP.QTDECOMP/COMP.VRFATOCONV,0)) <> 0

                         UNION ALL

                         SELECT SUM(COMP.QTDECOMP-NVL(JACOMP.QTDECOMP,0)) AS QTACOMPRAR
                           FROM PARASUPRI, FILIAL,
                                (SELECT ITEMSOLI.CDFILSOLI AS CDFILIAL, ITEMSOLI.DTPROGENTR, ITEMSOLI.CDPRODUTO,
                                        SUM(ITEMSOLI.QTSOLIPROD) AS QTDECOMP
                                   FROM ITEMSOLI
                                  WHERE ITEMSOLI.IDITMCONS = 'N'
                                    AND ITEMSOLI.DTPROGENTR BETWEEN V_DTINICIAL AND V_DTFINAL
                                    AND ITEMSOLI.CDPRODUTO = V_FORNECEDORES_CDPRODUTO
                                    AND NVL(ITEMSOLI.IDSOLIAPROV,'S') = 'S'
                                  GROUP BY ITEMSOLI.CDFILSOLI, ITEMSOLI.DTPROGENTR, ITEMSOLI.CDPRODUTO) COMP LEFT JOIN
                                (SELECT ITEMAUTF.CDFILDEST AS CDFILIAL, ITEMAUTF.DTENTRITMSOL, ITEMAUTF.CDPRODUTO,
                                        SUM(ITEMAUTF.QTPROGENTAF) AS QTDECOMP
                                   FROM ITEMAUTF INNER JOIN AUTOFORNE ON ITEMAUTF.CDFILDEST  = AUTOFORNE.CDFILDEST
                                                                     AND ITEMAUTF.CDFILLANC  = AUTOFORNE.CDFILLANC
                                                                     AND ITEMAUTF.NRAUTOFORN = AUTOFORNE.NRAUTOFORN
                                  WHERE AUTOFORNE.IDSITUATUAAF IS NULL
                                    AND AUTOFORNE.IDAFFORALIM = 'N'
                                    AND AUTOFORNE.IDAUTOFORNEX = 'N'
                                    AND ITEMAUTF.DTENTRITMSOL BETWEEN V_DTINICIAL AND V_DTFINAL
                                  GROUP BY ITEMAUTF.CDFILDEST, ITEMAUTF.DTENTRITMSOL, ITEMAUTF.CDPRODUTO) JACOMP ON COMP.CDFILIAL   = JACOMP.CDFILIAL
                                                                                                                AND COMP.DTPROGENTR = JACOMP.DTENTRITMSOL
                                                                                                                AND COMP.CDPRODUTO  = JACOMP.CDPRODUTO
                          WHERE PARASUPRI.CDFILIAL = NVL(FILIAL.CDFILCENTCMP, FILIAL.CDFILIAL)
                            AND PARASUPRI.IDCONSPRSOL = 'S'
                            AND COMP.CDFILIAL = FILIAL.CDFILIAL
                            AND FILIAL.CDREGIAO = V_REGIAO_CDREGIAO
                            AND COMP.QTDECOMP-NVL(JACOMP.QTDECOMP,0) > 0
                         HAVING SUM(COMP.QTDECOMP-NVL(JACOMP.QTDECOMP,0)) <> 0);
            EXCEPTION
               WHEN NO_DATA_FOUND THEN
                  V_QTACOMPRAR := 0;
            END;
         END IF;
         IF (V_CHAVE <> V_REGIAO_NRCOLEPRECO||V_FORNECEDORES_CDREGIAO||V_FORNECEDORES_CDFORNECED) THEN
            V_CHAVE := V_REGIAO_NRCOLEPRECO||V_FORNECEDORES_CDREGIAO||V_FORNECEDORES_CDFORNECED;
            IF P_EXIBEIPI = 'S' THEN
               SELECT NVL(SOMA, 0)
                 INTO V_VRIPI
                 FROM (SELECT SUM(IMPCOLET.VRIMPCOLETA) AS SOMA
                         FROM IMPCOLET, ITEMCOLE, PRODUTO
                        WHERE IMPCOLET.CDFILIAL    = ITEMCOLE.CDFILIAL
                          AND IMPCOLET.NRCOLEPRECO = ITEMCOLE.NRCOLEPRECO
                          AND IMPCOLET.CDMARCA     = ITEMCOLE.CDMARCA
                          AND IMPCOLET.CDREGIAO    = ITEMCOLE.CDREGIAO
                          AND IMPCOLET.CDFORNECED  = ITEMCOLE.CDFORNECED
                          AND IMPCOLET.CDPRODUTO   = ITEMCOLE.CDPRODUTO
                          AND IMPCOLET.NRCOLEPRECO = NVL(V_REGIAO_NRCOLEPRECO, IMPCOLET.NRCOLEPRECO)
                          AND IMPCOLET.CDREGIAO    = V_FORNECEDORES_CDREGIAO
                          AND IMPCOLET.CDFORNECED  = V_FORNECEDORES_CDFORNECED
                          AND IMPCOLET.CDIMPOSTO   = '10'
                          AND IMPCOLET.CDPRODUTO   = PRODUTO.CDPRODUTO
                          AND PRODUTO.CDARVPROD BETWEEN P_CDPRODINI AND RPAD(P_CDPRODFIM , 20, 'Z')
                          AND ITEMCOLE.DTINIVALITM <= V_DTFINAL
                          AND ITEMCOLE.DTFINVALITM >= V_DTINICIAL) A;
            END IF;
            IF P_EXIBEPGTO = 'S' THEN
               SELECT NVL(MAX(IDTPFORPGTFO), ' '), NVL(MAX(FORMAPGTO), ' ')
                 INTO V_IDTPFORPGTFO, V_FORMAPGTO
                 FROM (SELECT F.IDTPFORPGTFO,
                              DECODE (F.IDTPFORPGTFO, 'V', P.NMFORMPGTO || ' ' || TO_CHAR(PR.NRDIASPGTOFO) || ' ' || TO_CHAR(ROUND(PR.VRPERCPGTOFO, 2)),
                              'F', TO_CHAR(F.NRDIAPGFIXFO) || ' ' || TO_CHAR(ROUND(NRPARCPGTOFO, 2))) AS FORMAPGTO
                         FROM FORNECEDOR F, FORMPGTO P, PRAZOPGTFORN PR
                        WHERE F.CDFORNECED  = V_FORNECEDORES_CDFORNECED
                          AND F.CDFORMPGTO  = P.CDFORMPGTO (+)
                          AND F.CDFORNECED  = PR.CDFORNECED(+));
               SELECT NRPZOENTCOL
                 INTO V_NRPZOENTCOL
                 FROM (SELECT NVL(MAX(NRPZOENTCOL), '0') AS NRPZOENTCOL
                         FROM ITEMCOLE
                        WHERE CDREGIAO    = V_FORNECEDORES_CDREGIAO
                          AND CDFORNECED  = V_FORNECEDORES_CDFORNECED
                          AND NRCOLEPRECO = NVL(V_REGIAO_NRCOLEPRECO, NRCOLEPRECO));
            END IF;
         END IF;
         IF P_EXIBEREFE = 'A' THEN
            SELECT NVL(MIN(ITEMAUTF.VRPREUNIAF), 0)
              INTO V_VRCUSTOREFER
              FROM AUTOFORNE,
                   ITEMAUTF,
                   (SELECT MAX(ITEMAUTF.NRAUTOFORN)  AS NRAUTOFORN,
                           MAX(ITEMAUTF.DTPROGENTAF) AS DTPROGENTAF
                      FROM ITEMAUTF, FILIAL
                     WHERE FILIAL.CDREGIAO     = V_FORNECEDORES_CDREGIAO
                       AND ITEMAUTF.CDFILDEST  = FILIAL.CDFILIAL
                       AND ITEMAUTF.CDPRODUTO  = V_FORNECEDORES_CDPRODUTO) MAX_AF
             WHERE AUTOFORNE.CDFILDEST  = ITEMAUTF.CDFILDEST
               AND AUTOFORNE.NRAUTOFORN = ITEMAUTF.NRAUTOFORN
               AND ITEMAUTF.CDPRODUTO   = V_FORNECEDORES_CDPRODUTO
               AND ITEMAUTF.DTPROGENTAF = MAX_AF.DTPROGENTAF
               AND ITEMAUTF.NRAUTOFORN  = MAX_AF.NRAUTOFORN;
         ELSIF P_EXIBEREFE = 'C' THEN
            SELECT NVL(MIN(VRCUSTOREFER), 0)/V_FORNECEDORES_VRFATOCONV
              INTO V_VRCUSTOREFER
              FROM (SELECT CUSTO_PRODUTO(FILIAL.CDFILIAL, V_FORNECEDORES_CDPRODESTO, P_NRTIPOCUSTO, SYSDATE, SYSDATE) VRCUSTOREFER
                      FROM FILIAL
                     WHERE FILIAL.CDREGIAO = V_FORNECEDORES_CDREGIAO)
              WHERE VRCUSTOREFER > 0;
         END IF;
         IF (P_VRPERCENTACRES > 0) AND (V_VRCUSTOREFER > 0)THEN
            V_VRCUSTOREFER := V_VRCUSTOREFER * (1 + (P_VRPERCENTACRES / 100));
         END IF;
         OUT_RECORD.NRCOLEPRECO     := V_REGIAO_NRCOLEPRECO;
         OUT_RECORD.CDREGIAO        := V_FORNECEDORES_CDREGIAO;
         OUT_RECORD.NMREGIAO        := V_FORNECEDORES_NMREGIAO;
         OUT_RECORD.CDPRODUTO       := V_FORNECEDORES_CDPRODUTO;
         OUT_RECORD.CDARVPROD       := V_FORNECEDORES_CDARVPROD;
         OUT_RECORD.SGUNIDADE       := V_FORNECEDORES_SGUNIDADE;
         OUT_RECORD.NMPRODUTO       := V_FORNECEDORES_NMPRODUTO;
         OUT_RECORD.CDMARCA         := V_FORNECEDORES_CDMARCA;
         OUT_RECORD.NMMARCA         := V_FORNECEDORES_NMMARCA;
         OUT_RECORD.CDOPERADOR      := V_FORNECEDORES_CDOPERADOR;
         OUT_RECORD.NMOPERADOR      := V_FORNECEDORES_NMOPERADOR;
         OUT_RECORD.CDFORNECED      := V_FORNECEDORES_CDFORNECED;
         OUT_RECORD.NMFANTFORN      := V_FORNECEDORES_NMFANTFORN;
         OUT_RECORD.IDTPIJURFORN    := V_FORNECEDORES_IDTPIJURFORN;
         OUT_RECORD.NRINSJURFORN    := V_FORNECEDORES_NRINSJURFORN;
         OUT_RECORD.VRPRECUNIITM    := V_FORNECEDORES_VRPRECUNIITM;
         OUT_RECORD.VRPERDESITM     := V_FORNECEDORES_VRPERDESITM;
         OUT_RECORD.QTACOMPRAR      := V_QTACOMPRAR;
         OUT_RECORD.VRPRECOREAL     := V_FORNECEDORES_VRPRECOREAL;
         OUT_RECORD.VRTOTALITEMREAL := CASE NVL(V_QTACOMPRAR, 1)
                                          WHEN 0
                                          THEN 1
                                          ELSE NVL(V_QTACOMPRAR, 1)
                                       END*V_FORNECEDORES_VRPRECOREAL;
         OUT_RECORD.VRTOTALITEMDES  := CASE NVL(V_QTACOMPRAR, 1)
                                          WHEN 0
                                          THEN 1
                                          ELSE NVL(V_QTACOMPRAR, 1)
                                       END*V_FORNECEDORES_VRPRECUNIITM;
         IF V_FORNECEDORES_M_VRPRECUN = V_FORNECEDORES_VRPRECUNIITM THEN
            OUT_RECORD.IDMENORPRECO := 'S';
         ELSE
            OUT_RECORD.IDMENORPRECO := 'N';
         END IF;
         OUT_RECORD.MIN_VRPRECUNIITM  := V_FORNECEDORES_M_VRPRECUN;
         OUT_RECORD.VRIPI             := V_VRIPI;
         OUT_RECORD.IDTPFORPGTFO      := V_IDTPFORPGTFO;
         OUT_RECORD.FORMAPGTO         := V_FORMAPGTO;
         OUT_RECORD.NRPZOENTCOL       := V_NRPZOENTCOL;
         OUT_RECORD.DSOBSITMCOL       := V_FORNECEDORES_DSOBSITMCOL;
         OUT_RECORD.VRFRETEFORN       := V_FORNECEDORES_VRFRETEFORN;
         OUT_RECORD.VRPRECOESTOQ      := V_FORNECEDORES_VRPRECUNIITM/V_FORNECEDORES_VRFATOCONV;
         OUT_RECORD.VRFATOCONV        := V_FORNECEDORES_VRFATOCONV;
         OUT_RECORD.VRCUSTOREFER      := V_VRCUSTOREFER;

         IF ((V_VRCUSTOREFER = 0) OR (V_VRCUSTOREFER = V_FORNECEDORES_VRPRECOREAL)) THEN
            OUT_RECORD.VRVARIACUSTO   := 0;
         ELSE
            OUT_RECORD.VRVARIACUSTO   := (((V_FORNECEDORES_VRPRECOREAL / V_VRCUSTOREFER) - 1) * 100);
         END IF;

         IF ((V_VRCUSTOREFER = 0) OR (V_VRCUSTOREFER = V_FORNECEDORES_M_VRPRECUN)) THEN
            OUT_RECORD.MIN_VRVARIACUSTO   := 0;
         ELSE
            OUT_RECORD.MIN_VRVARIACUSTO   := (((V_FORNECEDORES_M_VRPRECUN / V_VRCUSTOREFER) - 1) * 100);            
         END IF;

         OUT_RECORD.NRORG              := V_FORNECEDORES_NRORG;
         OUT_RECORD.MIN_VRPRECOREAL    := V_FORNECEDORES_M_VRPRECOR;
         PIPE ROW (OUT_RECORD);

         IF ((V_FORNECEDORES_M_VRPRECUN = V_FORNECEDORES_VRPRECUNIITM) AND
             (P_EXIBEMENORPREC = 'S')) THEN
            /*INICIO GRAVA FORNECEDOR FAKE*/
            OUT_RECORD.NRCOLEPRECO     := V_REGIAO_NRCOLEPRECO;
            OUT_RECORD.CDREGIAO        := V_FORNECEDORES_CDREGIAO;
            OUT_RECORD.NMREGIAO        := V_FORNECEDORES_NMREGIAO;
            OUT_RECORD.CDPRODUTO       := V_FORNECEDORES_CDPRODUTO;
            OUT_RECORD.CDARVPROD       := V_FORNECEDORES_CDARVPROD;
            OUT_RECORD.SGUNIDADE       := V_FORNECEDORES_SGUNIDADE;
            OUT_RECORD.NMPRODUTO       := V_FORNECEDORES_NMPRODUTO;
            OUT_RECORD.CDMARCA         := V_FORNECEDORES_CDMARCA;
            OUT_RECORD.NMMARCA         := V_FORNECEDORES_NMMARCA;
            OUT_RECORD.CDOPERADOR      := V_FORNECEDORES_CDOPERADOR;
            OUT_RECORD.NMOPERADOR      := V_FORNECEDORES_NMOPERADOR;
            OUT_RECORD.CDFORNECED      := '0';
            OUT_RECORD.NMFANTFORN      := 'A';
            OUT_RECORD.IDTPIJURFORN    := 'A';
            OUT_RECORD.NRINSJURFORN    := '0';
            OUT_RECORD.VRPRECUNIITM    := V_FORNECEDORES_M_VRPRECUN;
            OUT_RECORD.VRPERDESITM     := V_FORNECEDORES_VRPERDESITM;
            OUT_RECORD.QTACOMPRAR      := V_QTACOMPRAR;
            OUT_RECORD.VRPRECOREAL     := V_FORNECEDORES_M_VRPRECOR;
            OUT_RECORD.VRTOTALITEMREAL := CASE NVL(V_QTACOMPRAR, 1)
                                             WHEN 0
                                             THEN 1
                                             ELSE NVL(V_QTACOMPRAR, 1)
                                          END*V_FORNECEDORES_M_VRPRECOR;
            OUT_RECORD.VRTOTALITEMDES  := CASE NVL(V_QTACOMPRAR, 1)
                                             WHEN 0
                                             THEN 1
                                             ELSE NVL(V_QTACOMPRAR, 1)
                                          END*V_FORNECEDORES_M_VRPRECUN;
            IF V_FORNECEDORES_M_VRPRECUN = V_FORNECEDORES_M_VRPRECUN THEN
               OUT_RECORD.IDMENORPRECO := 'S';
            ELSE
               OUT_RECORD.IDMENORPRECO := 'N';
            END IF;
            OUT_RECORD.MIN_VRPRECUNIITM  := V_FORNECEDORES_M_VRPRECUN;
            OUT_RECORD.VRIPI             := V_VRIPI;
            OUT_RECORD.IDTPFORPGTFO      := V_IDTPFORPGTFO;
            OUT_RECORD.FORMAPGTO         := V_FORMAPGTO;
            OUT_RECORD.NRPZOENTCOL       := V_NRPZOENTCOL;
            OUT_RECORD.DSOBSITMCOL       := V_FORNECEDORES_DSOBSITMCOL;
            OUT_RECORD.VRFRETEFORN       := V_FORNECEDORES_VRFRETEFORN;
            OUT_RECORD.VRPRECOESTOQ      := V_FORNECEDORES_M_VRPRECUN/V_FORNECEDORES_VRFATOCONV;
            OUT_RECORD.VRFATOCONV        := V_FORNECEDORES_VRFATOCONV;
            OUT_RECORD.VRCUSTOREFER      := V_VRCUSTOREFER;

            IF ((V_VRCUSTOREFER = 0) OR (V_VRCUSTOREFER = V_FORNECEDORES_M_VRPRECOR)) THEN
               OUT_RECORD.VRVARIACUSTO   := 0;
            ELSE
               OUT_RECORD.VRVARIACUSTO   := (((V_FORNECEDORES_M_VRPRECOR / V_VRCUSTOREFER) - 1) * 100);
            END IF;

            IF ((V_VRCUSTOREFER = 0) OR (V_VRCUSTOREFER = V_FORNECEDORES_M_VRPRECUN)) THEN
               OUT_RECORD.MIN_VRVARIACUSTO   := 0;
            ELSE
               OUT_RECORD.MIN_VRVARIACUSTO   := (((V_FORNECEDORES_M_VRPRECUN / V_VRCUSTOREFER) - 1) * 100);
            END IF;

            OUT_RECORD.NRORG              := V_FORNECEDORES_NRORG;
            OUT_RECORD.MIN_VRPRECOREAL    := V_FORNECEDORES_M_VRPRECOR;
            PIPE ROW (OUT_RECORD);
            /*FIM GRAVA FORNECEDOR FAKE*/
         END IF;
      END LOOP;
      CLOSE C_FORNECEDORES;
   END LOOP;
   CLOSE C_REGIAO;
END;
/