DROP TYPE MAPA_COTACAO_TABLE
/

DROP TYPE MAPA_COTACAO_TYPE
/

CREATE TYPE MAPA_COTACAO_TYPE AS
OBJECT( NRPAGINA         FLOAT,
        CDREGIAO         VARCHAR2(3),
        NMREGIAO         VARCHAR2(30),
        CDPRODUTO        VARCHAR2(10), 
        CDARVPROD        VARCHAR2(20), 
        NMPRODUTO        VARCHAR2(50), 
        SGUNIDADE        VARCHAR2(10),
        CDMARCA          VARCHAR2(5),
        NMMARCA          VARCHAR2(20),
        QTACOMPRAR       FLOAT,
        VRMENORPRECO     FLOAT,
        CDFORNECED1      VARCHAR2(21),
        NMFANTFORN1      VARCHAR2(250),
        IDMENORPRECO1    VARCHAR2(1),
        VRPRECUNIITM1    FLOAT,
        CDFORNECED2      VARCHAR2(21),
        NMFANTFORN2      VARCHAR2(250),
        IDMENORPRECO2    VARCHAR2(1),
        VRPRECUNIITM2    FLOAT,
        CDFORNECED3      VARCHAR2(21),
        NMFANTFORN3      VARCHAR2(250),
        IDMENORPRECO3    VARCHAR2(1),
        VRPRECUNIITM3    FLOAT,
        CDFORNECED4      VARCHAR2(21),
        NMFANTFORN4      VARCHAR2(250),
        IDMENORPRECO4    VARCHAR2(1),
        VRPRECUNIITM4    FLOAT,
        CDFORNECED5      VARCHAR2(21),
        NMFANTFORN5      VARCHAR2(250),
        IDMENORPRECO5    VARCHAR2(1),
        VRPRECUNIITM5    FLOAT,
        CDFORNECED6      VARCHAR2(21),
        NMFANTFORN6      VARCHAR2(250),
        IDMENORPRECO6    VARCHAR2(1),
        VRPRECUNIITM6    FLOAT,
        CDFORNECED7      VARCHAR2(21),
        NMFANTFORN7      VARCHAR2(250),
        IDMENORPRECO7    VARCHAR2(1),
        VRPRECUNIITM7    FLOAT,
        CDFORNECED8      VARCHAR2(21),
        NMFANTFORN8      VARCHAR2(250),
        IDMENORPRECO8    VARCHAR2(1),
        VRPRECUNIITM8    FLOAT)
/

CREATE TYPE MAPA_COTACAO_TABLE AS TABLE OF MAPA_COTACAO_TYPE
/

CREATE OR REPLACE FUNCTION MAPA_COTACAO(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) RETURN MAPA_COTACAO_TABLE PIPELINED
IS
   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(20000);
   V_FORNECEDORES    VARCHAR2(20000);
   V_IDMENORPRECO    VARCHAR2(1);

   OUT_RECORD MAPA_COTACAO_TYPE := MAPA_COTACAO_TYPE (NULL, NULL, NULL, NULL, NULL, NULL,
                                                      NULL, NULL, NULL, NULL, NULL, NULL,
                                                      NULL, NULL, NULL, NULL, NULL, NULL,
                                                      NULL, NULL, NULL, NULL, NULL, NULL,
                                                      NULL, NULL, NULL, NULL, NULL, NULL,
                                                      NULL, NULL, NULL, NULL, NULL, NULL,
                                                      NULL, NULL, NULL, NULL, NULL, NULL, NULL);
BEGIN
   V_NRPAGINA := 0;
   FOR C_REGIAO IN (SELECT I.CDREGIAO
                      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 >= P_DTINICIAL
                       AND I.DTFINVALITM <= P_DTFINAL
                       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
                     ORDER BY I.CDREGIAO)
   LOOP
      V_NRPAGINA     := V_NRPAGINA +1;
      V_QUANTFORN    := 0;
      V_FORNECEDORES := 'ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ';
      V_CHAVE        := 'ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ';
      FOR C_FORNECEDORES IN (  SELECT I.CDREGIAO, I.CDFORNECED, F.NMFANTFORN
                                 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
                                WHERE C.CDFILIAL    =  P_CDFILIAL
                                  AND C.CDOPERADOR  =  P_CDOPERADOR
                                  AND I.CDREGIAO    =  C_REGIAO.CDREGIAO
                                  AND I.DTINIVALITM >= P_DTINICIAL
                                  AND I.DTFINVALITM <= P_DTFINAL
                                  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
                                GROUP BY I.CDREGIAO, I.CDFORNECED, F.NMFANTFORN)
      LOOP
         V_QUANTFORN := V_QUANTFORN +1;
         FOR C_PRODUTOS IN ( SELECT I.CDREGIAO, C.CDOPERADOR, I.CDPRODUTO, I.CDMARCA, P.NMPRODUTO,
                                    P.CDARVPROD, P.SGUNIDADE, M.NMMARCA, R.NMREGIAO
                               FROM ITEMCOLE I INNER JOIN COLETAPR C ON I.CDFILIAL    = C.CDFILIAL
                                                                    AND I.NRCOLEPRECO = C.NRCOLEPRECO
                                               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
                              WHERE C.CDFILIAL    =  P_CDFILIAL
                                AND C.CDOPERADOR  =  P_CDOPERADOR
                                AND I.CDREGIAO    =  C_REGIAO.CDREGIAO
                                AND I.DTINIVALITM >=  P_DTINICIAL
                                AND I.DTFINVALITM <=  P_DTFINAL
                                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
                              GROUP BY I.CDREGIAO, C.CDOPERADOR, I.CDPRODUTO, I.CDMARCA, P.NMPRODUTO,
                                       P.CDARVPROD, P.SGUNIDADE, M.NMMARCA, R.NMREGIAO)
         LOOP
            IF C_PRODUTOS.CDREGIAO = C_FORNECEDORES.CDREGIAO 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 P_DTINICIAL AND P_DTFINAL
                                       AND ESTOQUE.CDPRODUTO = C_PRODUTOS.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 P_DTINICIAL AND P_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 = C_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 P_DTINICIAL AND P_DTFINAL
                                       AND ITEMSOLI.CDPRODUTO = C_PRODUTOS.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 P_DTINICIAL AND P_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 = C_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;

               /*Menor pre�o*/
               BEGIN
                  SELECT MIN(VRPRECUNIITM) VRPRECUNIITM, MIN(VRPREUNDESC) VRPREUNDESC
                    INTO V_VRPRECUNIITM, V_VRPREUNDESC
                    FROM (  SELECT I.VRPRECUNIITM, I.VRPRECUNIITM - (I.VRPRECUNIITM*I.VRPERDESITM/100) AS VRPREUNDESC
                              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     = C_PRODUTOS.CDREGIAO
                               AND I.CDPRODUTO    = C_PRODUTOS.CDPRODUTO
                               AND I.CDFORNECED   = C_FORNECEDORES.CDFORNECED
                               AND I.DTINIVALITM >=  P_DTINICIAL
                               AND I.DTFINVALITM <=  P_DTFINAL
                               AND I.CDMARCA      = C_PRODUTOS.CDMARCA
                               AND NVL(I.VRPRECUNIITM, 0) > 0);
               EXCEPTION
                  WHEN NO_DATA_FOUND THEN
                     V_VRPRECUNIITM := 0;
                     V_VRPREUNDESC  := 0;
               END;

               OUT_RECORD.NRPAGINA     := V_NRPAGINA;
               OUT_RECORD.CDREGIAO     := C_PRODUTOS.CDREGIAO;
               OUT_RECORD.NMREGIAO     := C_PRODUTOS.NMREGIAO;
               OUT_RECORD.CDPRODUTO    := C_PRODUTOS.CDPRODUTO;
               OUT_RECORD.CDARVPROD    := C_PRODUTOS.CDARVPROD;
               OUT_RECORD.SGUNIDADE    := C_PRODUTOS.SGUNIDADE;
               OUT_RECORD.NMPRODUTO    := C_PRODUTOS.NMPRODUTO;
               OUT_RECORD.CDMARCA      := C_PRODUTOS.CDMARCA;
               OUT_RECORD.NMMARCA      := C_PRODUTOS.NMMARCA;
               OUT_RECORD.QTACOMPRAR   := V_QTACOMPRAR;

               OUT_RECORD.CDFORNECED1   := '';
               OUT_RECORD.NMFANTFORN1   := '';
               OUT_RECORD.VRPRECUNIITM1 := '';
               OUT_RECORD.IDMENORPRECO1 := '';

               OUT_RECORD.CDFORNECED2   := '';
               OUT_RECORD.NMFANTFORN2   := '';
               OUT_RECORD.VRPRECUNIITM2 := '';
               OUT_RECORD.IDMENORPRECO2 := '';

               OUT_RECORD.CDFORNECED3   := '';
               OUT_RECORD.NMFANTFORN3   := '';
               OUT_RECORD.VRPRECUNIITM3 := '';
               OUT_RECORD.IDMENORPRECO3 := '';

               OUT_RECORD.CDFORNECED4   := '';
               OUT_RECORD.NMFANTFORN4   := '';
               OUT_RECORD.VRPRECUNIITM4 := '';
               OUT_RECORD.IDMENORPRECO4 := '';

               OUT_RECORD.CDFORNECED5   := '';
               OUT_RECORD.NMFANTFORN5   := '';
               OUT_RECORD.VRPRECUNIITM5 := '';
               OUT_RECORD.IDMENORPRECO5 := '';

               OUT_RECORD.CDFORNECED6   := '';
               OUT_RECORD.NMFANTFORN6   := '';
               OUT_RECORD.VRPRECUNIITM6 := '';
               OUT_RECORD.IDMENORPRECO6 := '';

               OUT_RECORD.CDFORNECED7   := '';
               OUT_RECORD.NMFANTFORN7   := '';
               OUT_RECORD.VRPRECUNIITM7 := '';
               OUT_RECORD.IDMENORPRECO7 := '';

               OUT_RECORD.CDFORNECED8   := '';
               OUT_RECORD.NMFANTFORN8   := '';
               OUT_RECORD.VRPRECUNIITM8 := '';
               OUT_RECORD.IDMENORPRECO8 := '';

               IF (V_CHAVE <> C_PRODUTOS.CDREGIAO || C_PRODUTOS.CDPRODUTO) THEN
                  V_CHAVE        := C_PRODUTOS.CDREGIAO || C_PRODUTOS.CDPRODUTO;
                  V_FORNECEDORES := '_';
                  SELECT MIN(VRPRECUNIITM) VRPRECUNIITM, MIN(VRPREUNDESC) VRPREUNDESC
                    INTO V_VRMINPRECUNIITM, V_VRMINPREUNDESC
                    FROM (  SELECT I.VRPRECUNIITM, I.VRPRECUNIITM - (I.VRPRECUNIITM*I.VRPERDESITM/100) AS VRPREUNDESC
                              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     = C_PRODUTOS.CDREGIAO
                               AND I.CDPRODUTO    = C_PRODUTOS.CDPRODUTO
                               AND I.DTINIVALITM >=  P_DTINICIAL
                               AND I.DTFINVALITM <=  P_DTFINAL
                               AND I.CDMARCA      = C_PRODUTOS.CDMARCA
                               AND NVL(I.VRPRECUNIITM, 0) > 0);

                  SELECT MIN(VRPRECUNIITM) * V_QTACOMPRAR
                    INTO V_VRMENORPRECO
                    FROM ( SELECT C.CDOPERADOR, I.CDFORNECED, F.NMFANTFORN, MIN(VRPRECUNIITM) VRPRECUNIITM
                             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
                            WHERE C.CDFILIAL    =  P_CDFILIAL
                              AND C.CDOPERADOR  =  P_CDOPERADOR
                              AND I.CDREGIAO    =  C_PRODUTOS.CDREGIAO
                              AND I.DTINIVALITM >= P_DTINICIAL
                              AND I.DTFINVALITM <= P_DTFINAL
                              AND I.CDPRODUTO    = C_PRODUTOS.CDPRODUTO
                              AND NVL(I.VRPRECUNIITM, 0) > 0
                            GROUP BY C.CDOPERADOR, I.CDFORNECED, F.NMFANTFORN);

                  SELECT MIN(VRPRECUNIITM) VRPRECUNIITM, MIN(VRPREUNDESC) VRPREUNDESC
                    INTO V_VRPRECPROD, V_VRPRESCPROD
                    FROM (  SELECT I.VRPRECUNIITM, I.VRPRECUNIITM - (I.VRPRECUNIITM*I.VRPERDESITM/100) AS VRPREUNDESC
                              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     = C_PRODUTOS.CDREGIAO
                               AND I.CDPRODUTO    = C_PRODUTOS.CDPRODUTO
                               AND I.DTINIVALITM >=  P_DTINICIAL
                               AND I.DTFINVALITM <=  P_DTFINAL
                               AND NVL(I.VRPRECUNIITM, 0) > 0);
               END IF;

               OUT_RECORD.VRMENORPRECO := V_VRMENORPRECO;

               IF P_CHBDESCONTO = 'S' THEN
                  V_VRPRECUNIITM    := V_VRPREUNDESC;
                  V_VRMINPRECUNIITM := V_VRMINPREUNDESC;
                  V_VRPRECPROD      := V_VRPRESCPROD;
               END IF;

               IF V_VRPRECUNIITM = V_VRPRECPROD THEN
                  V_IDMENORPRECO := 'S';
               ELSE
                  V_IDMENORPRECO := 'N';
               END IF;

               CASE
                  WHEN V_QUANTFORN = 1 THEN OUT_RECORD.CDFORNECED1   := C_FORNECEDORES.CDFORNECED;
                                            OUT_RECORD.NMFANTFORN1   := C_FORNECEDORES.NMFANTFORN;
                                            OUT_RECORD.VRPRECUNIITM1 := V_VRPRECUNIITM;
                                            OUT_RECORD.IDMENORPRECO1 := V_IDMENORPRECO;
                  WHEN V_QUANTFORN = 2 THEN OUT_RECORD.CDFORNECED2   := C_FORNECEDORES.CDFORNECED;
                                            OUT_RECORD.NMFANTFORN2   := C_FORNECEDORES.NMFANTFORN;
                                            OUT_RECORD.VRPRECUNIITM2 := V_VRPRECUNIITM;
                                            OUT_RECORD.IDMENORPRECO2 := V_IDMENORPRECO;
                  WHEN V_QUANTFORN = 3 THEN OUT_RECORD.CDFORNECED3   := C_FORNECEDORES.CDFORNECED;
                                            OUT_RECORD.NMFANTFORN3   := C_FORNECEDORES.NMFANTFORN;
                                            OUT_RECORD.VRPRECUNIITM3 := V_VRPRECUNIITM;
                                            OUT_RECORD.IDMENORPRECO3 := V_IDMENORPRECO;
                  WHEN V_QUANTFORN = 4 THEN OUT_RECORD.CDFORNECED4   := C_FORNECEDORES.CDFORNECED;
                                            OUT_RECORD.NMFANTFORN4   := C_FORNECEDORES.NMFANTFORN;
                                            OUT_RECORD.VRPRECUNIITM4 := V_VRPRECUNIITM;
                                            OUT_RECORD.IDMENORPRECO4 := V_IDMENORPRECO;
                  WHEN V_QUANTFORN = 5 THEN OUT_RECORD.CDFORNECED5   := C_FORNECEDORES.CDFORNECED;
                                            OUT_RECORD.NMFANTFORN5   := C_FORNECEDORES.NMFANTFORN;
                                            OUT_RECORD.VRPRECUNIITM5 := V_VRPRECUNIITM;
                                            OUT_RECORD.IDMENORPRECO5 := V_IDMENORPRECO;
                  WHEN V_QUANTFORN = 6 THEN OUT_RECORD.CDFORNECED6   := C_FORNECEDORES.CDFORNECED;
                                            OUT_RECORD.NMFANTFORN6   := C_FORNECEDORES.NMFANTFORN;
                                            OUT_RECORD.VRPRECUNIITM6 := V_VRPRECUNIITM;
                                            OUT_RECORD.IDMENORPRECO6 := V_IDMENORPRECO;
                  WHEN V_QUANTFORN = 7 THEN OUT_RECORD.CDFORNECED7   := C_FORNECEDORES.CDFORNECED;
                                            OUT_RECORD.NMFANTFORN7   := C_FORNECEDORES.NMFANTFORN;
                                            OUT_RECORD.VRPRECUNIITM7 := V_VRPRECUNIITM;
                                            OUT_RECORD.IDMENORPRECO7 := V_IDMENORPRECO;
                  WHEN V_QUANTFORN = 8 THEN OUT_RECORD.CDFORNECED8   := C_FORNECEDORES.CDFORNECED;
                                            OUT_RECORD.NMFANTFORN8   := C_FORNECEDORES.NMFANTFORN;
                                            OUT_RECORD.VRPRECUNIITM8 := V_VRPRECUNIITM;
                                            OUT_RECORD.IDMENORPRECO8 := V_IDMENORPRECO;
               END CASE;

               IF INSTR(V_FORNECEDORES, C_FORNECEDORES.CDFORNECED||'_'||C_PRODUTOS.CDPRODUTO||'_'||C_PRODUTOS.CDMARCA) = 0 THEN
                  PIPE ROW (OUT_RECORD);
               END IF;
               V_FORNECEDORES := V_FORNECEDORES || C_FORNECEDORES.CDFORNECED||'_'||C_PRODUTOS.CDPRODUTO||'_'||C_PRODUTOS.CDMARCA||'_';
            END IF;
         END LOOP;
         IF V_QUANTFORN = 8 THEN
            V_NRPAGINA  := V_NRPAGINA + 1;
            V_QUANTFORN := 0;
         END IF;
      END LOOP;
   END LOOP;
END;
/

-- VERSAO --
BEGIN ATUVEROBJ('GERA_MAPA_COTACAO','6.10.000'); END;
/

