CREATE OR REPLACE PACKAGE BODY PEDIDO_COLETA IS

    PROCEDURE GET_PARASUPRI(P_CDFILIAL  IN FILIAL.CDFILIAL%TYPE,
                            P_PARASUPRI OUT S_RECORD_PARASUPRI) IS
    BEGIN
        SELECT *
          INTO P_PARASUPRI
          FROM PARASUPRI
         WHERE CDFILIAL = P_CDFILIAL;
    EXCEPTION
        WHEN NO_DATA_FOUND THEN
            NULL;
    END GET_PARASUPRI;

    PROCEDURE GET_DADOSFILIAL(P_CDFILIAL IN FILIAL.CDFILIAL%TYPE,
                              P_FILIAL  OUT S_RECORD_FILIAL) IS
    BEGIN
        SELECT *
          INTO P_FILIAL
          FROM FILIAL
         WHERE CDFILIAL = P_CDFILIAL;
    EXCEPTION
        WHEN NO_DATA_FOUND THEN
            NULL;
    END GET_DADOSFILIAL;

    PROCEDURE INSERT_PEDIDOCOLETATMP(P_ITEMS IN S_RECORD_PEDIDOCOLETA_TMP) IS
        R_RECORD S_RECORD_PEDIDOCOLETA_TMP;
    BEGIN
        R_RECORD := P_ITEMS;
        
        SELECT NRORG, 
               IDATIVO, 
               DTINCLUSAO, 
               DTULTATU, 
               NRORGINCLUSAO, 
               CDOPERINCLUSAO, 
               NRORGULTATU, 
               CDOPERULTATU 
          INTO R_RECORD.NRORG,
               R_RECORD.IDATIVO, 
               R_RECORD.DTINCLUSAO, 
               R_RECORD.DTULTATU, 
               R_RECORD.NRORGINCLUSAO, 
               R_RECORD.CDOPERINCLUSAO, 
               R_RECORD.NRORGULTATU, 
               R_RECORD.CDOPERULTATU 
          FROM EMPRESA
         WHERE ROWNUM = 1;
        
        R_RECORD.NRPEDIDOCOLETA := SEQ_PEDCOLTMP_NRPEDIDOCOLETA.NEXTVAL;
        INSERT INTO PEDIDOCOLETA_TMP VALUES R_RECORD;
    END INSERT_PEDIDOCOLETATMP;

    FUNCTION MONTA_TODOS_ACOMPRAR(P_PARASUPRI   IN S_RECORD_PARASUPRI,
                                  P_FILIAL      IN S_RECORD_FILIAL, 
                                  P_CDFILIPROC  IN FILIAL.CDFILIAL%TYPE,
                                  P_CDFILIAL    IN FILIAL.CDFILIAL%TYPE,
                                  P_CDMARCA     IN VARCHAR2,
                                  P_CDCOMPRADOR IN VARCHAR2,
                                  P_CDFORNECED  IN VARCHAR2,
                                  P_CDREGIAO    IN VARCHAR2,
                                  P_CDPRODINI   IN PRODUTO.CDARVPROD%TYPE,
                                  P_CDPRODFIN   IN PRODUTO.CDARVPROD%TYPE,
                                  P_DTINI       IN DATE,
                                  P_DTFIN       IN DATE,
                                  P_TIPOPEDIDO  IN VARCHAR2) RETURN VARCHAR2 IS
        V_SQL VARCHAR2(32000);
    BEGIN
        V_SQL := 
            ' SELECT CDREGIAO, CDOPERADOR, CDFORNECED, CDPRODUTO, CDMARCA, SUM(QTACOMPRAR) QTACOMPRAR, NULL AS NRCOLEPRECO'||
            '   FROM (SELECT COMPLETO.CDREGIAO, COMPLETO.CDOPERADOR, COMPLETO.CDFORNECED,'||
            '                COMPLETO.CDPRODUTO, COMPLETO.CDMARCA,'||
            '                (NVL(PRODACOMPRAR.QTACOMPRAR, 0) * PRODACOMPRAR.VRFATOCONV) / COMPLETO.VRFATOCONV AS QTACOMPRAR'||
            '           FROM (SELECT REGIAO.CDREGIAO, OPERADOR.CDOPERADOR, FORNECEDOR.CDFORNECED,'||
            '                        PRODUTO.CDPRODUTO, PRODUTO.CDPRODESTO, MARCA.CDMARCA, NVL(PRODUTO.VRFATOCONV, 1) VRFATOCONV'|| 
            '                   FROM OPERADOR, REGIAO, PRODFORNCOMP'||
            '                   JOIN FORNECEDOR ON PRODFORNCOMP.CDFORNECED = FORNECEDOR.CDFORNECED'||
            '                   JOIN PRODUTO ON PRODFORNCOMP.CDPRODCOMPL = PRODUTO.CDPRODUTO';
        
        IF ((P_CDMARCA IS NOT NULL) AND (P_CDPRODINI IS NOT NULL) AND (P_CDPRODFIN IS NOT NULL)) THEN
            V_SQL := V_SQL ||
                '               JOIN (SELECT MARCA.CDMARCA, MARCPRODCOMP.CDPRMARCOMPL'||
                '                       FROM MARCPRODCOMP'||
                '                       JOIN MARCA ON MARCPRODCOMP.CDMARCA = MARCA.CDMARCA'||
                '                       JOIN PRODUTO ON MARCPRODCOMP.CDPRMARCOMPL = PRODUTO.CDPRODUTO'||
                '                      WHERE MARCA.IDMARCAATIVA = ''' || K_A ||''''||
                '                        AND INSTR('''|| P_CDMARCA ||''', MARCA.CDMARCA) > 0 '||
                '                        AND PRODUTO.CDARVPROD BETWEEN '''|| P_CDPRODINI ||''' AND RPAD('''|| P_CDPRODFIN ||''', 20, '''|| K_Z || ''') '||
                '                      UNION ALL'||
                '                     SELECT MARCA.CDMARCA, MARCPRODCOMP.CDPRMARCOMPL'||
                '                       FROM MARCPRODCOMP'||
                '                       JOIN MARCA ON MARCPRODCOMP.CDMARCA = MARCA.CDMARCA'||
                '                       JOIN PRODUTO ON MARCPRODCOMP.CDPRMARCOMPL = PRODUTO.CDPRODUTO'||
                '                      WHERE MARCA.IDMARCAATIVA = ''' || K_A ||''''||
                '                        AND MARCA.CDMARCA = '''|| P_PARASUPRI.CDMARCA ||''''||
                '                        AND PRODUTO.CDARVPROD BETWEEN '''|| P_CDPRODINI ||''' AND RPAD('''|| P_CDPRODFIN ||''', 20, '''|| K_Z || ''') '||
                '                        AND NOT EXISTS (SELECT 1'||
                '                                          FROM MARCPRODCOMP MP'||
                '                                          JOIN PRODUTO ON MP.CDPRMARCOMPL = PRODUTO.CDPRODUTO'||
                '                                         WHERE INSTR('''|| P_CDMARCA ||''', MP.CDMARCA) > 0 '||
                '                                           AND PRODUTO.CDARVPROD BETWEEN '''|| P_CDPRODINI ||''' AND RPAD('''|| P_CDPRODFIN ||''', 20, '''|| K_Z || ''')) '||
                '                   ) MARCA ON PRODFORNCOMP.CDPRODCOMPL = MARCA.CDPRMARCOMPL';

        ELSIF P_CDMARCA IS NOT NULL THEN
            V_SQL := V_SQL ||
                '               JOIN (SELECT MARCA.CDMARCA, MARCPRODCOMP.CDPRMARCOMPL'||
                '                       FROM MARCPRODCOMP'||
                '                       JOIN MARCA ON MARCPRODCOMP.CDMARCA = MARCA.CDMARCA'||
                '                      WHERE MARCA.IDMARCAATIVA = ''' || K_A ||''''||
                '                        AND INSTR('''|| P_CDMARCA ||''', MARCA.CDMARCA) > 0 '||
                '                      UNION ALL'||
                '                     SELECT MARCA.CDMARCA, MARCPRODCOMP.CDPRMARCOMPL'||
                '                       FROM MARCPRODCOMP'||
                '                       JOIN MARCA ON MARCPRODCOMP.CDMARCA = MARCA.CDMARCA'||
                '                      WHERE MARCA.IDMARCAATIVA = ''' || K_A ||''''||
                '                        AND MARCA.CDMARCA = '''|| P_PARASUPRI.CDMARCA ||''''||
                '                        AND NOT EXISTS (SELECT 1'||
                '                                          FROM MARCPRODCOMP MP'||
                '                                         WHERE INSTR('''|| P_CDMARCA ||''', MP.CDMARCA) > 0 '||
                '                                           AND MP.CDPRMARCOMPL = MARCPRODCOMP.CDPRMARCOMPL) '||
                '                   ) MARCA ON PRODFORNCOMP.CDPRODCOMPL = MARCA.CDPRMARCOMPL';
        ELSIF ((P_CDPRODINI IS NOT NULL) AND (P_CDPRODFIN IS NOT NULL)) THEN
            V_SQL := V_SQL ||
                '               JOIN (SELECT MARCA.CDMARCA, MARCPRODCOMP.CDPRMARCOMPL'||
                '                       FROM MARCPRODCOMP'||
                '                       JOIN MARCA ON MARCPRODCOMP.CDMARCA = MARCA.CDMARCA'||
                '                       JOIN PRODUTO ON MARCPRODCOMP.CDPRMARCOMPL = PRODUTO.CDPRODUTO'||
                '                      WHERE MARCA.IDMARCAATIVA = ''' || K_A ||''''||
                '                        AND PRODUTO.CDARVPROD BETWEEN '''|| P_CDPRODINI ||''' AND RPAD('''|| P_CDPRODFIN ||''', 20, '''|| K_Z || ''') '||
                '                   ) MARCA ON PRODFORNCOMP.CDPRODCOMPL = MARCA.CDPRMARCOMPL';
        ELSE
            V_SQL := V_SQL ||
                '               JOIN (SELECT MARCA.CDMARCA, MARCPRODCOMP.CDPRMARCOMPL'||
                '                       FROM MARCPRODCOMP'||
                '                       JOIN MARCA ON MARCPRODCOMP.CDMARCA = MARCA.CDMARCA'||
                '                       JOIN PRODUTO ON MARCPRODCOMP.CDPRMARCOMPL = PRODUTO.CDPRODUTO'||
                '                      WHERE MARCA.IDMARCAATIVA = ''' || K_A ||''''||
                '                   ) MARCA ON PRODFORNCOMP.CDPRODCOMPL = MARCA.CDPRMARCOMPL';
        END IF;

        V_SQL := V_SQL ||
            '                  WHERE NVL(PRODUTO.IDPRODATIVPR, '''|| K_N ||''') =  '''|| K_S ||'''';

        IF NVL(P_PARASUPRI.IDUTLPROCMP, K_N) = K_S THEN
            V_SQL := V_SQL || '  AND PRODUTO.CDPRODUTO <> PRODUTO.CDPRODESTO ';
        END IF;

        IF P_CDCOMPRADOR IS NOT NULL THEN
            V_SQL := V_SQL ||  ' AND INSTR('''|| P_CDCOMPRADOR ||''', OPERADOR.CDOPERADOR) > 0 ';
        END IF;

        IF P_CDFORNECED IS NOT NULL THEN
            V_SQL := V_SQL || ' AND INSTR('''|| P_CDFORNECED ||''', FORNECEDOR.CDFORNECED) > 0 ';
        END IF;

        IF P_CDREGIAO IS NOT NULL THEN
            V_SQL := V_SQL || ' AND INSTR('''|| P_CDREGIAO ||''', REGIAO.CDREGIAO) > 0 ';
        END IF;

        IF P_CDPRODINI IS NOT NULL AND P_CDPRODFIN IS NOT NULL THEN
            V_SQL := V_SQL || ' AND PRODUTO.CDARVPROD BETWEEN '''|| P_CDPRODINI ||''' AND RPAD('''|| P_CDPRODFIN ||''', 20, '''|| K_Z || ''') ';
        END IF;
        
        V_SQL := V_SQL ||
            ' AND NOT EXISTS (SELECT 1'|| 
            '                   FROM REFOREG'||
            '                  WHERE REFOREG.CDREGIAO = REGIAO.CDREGIAO'||
            '               AND REFOREG.CDFORNECED = FORNECEDOR.CDFORNECED)'||
            ' AND EXISTS (SELECT 1'||
            '               FROM PRODCOMP, PRODUTO PR'||
            '              WHERE PRODCOMP.CDPRODUTO = PR.CDPRODUTO'||
            '                AND PRODUTO.CDARVPROD LIKE PR.CDARVPROD || '''|| K_CP ||''''||
            '                AND OPERADOR.CDOPERADOR = PRODCOMP.CDOPERADOR) ';
            
        IF P_PARASUPRI.IDULTIDTVALQ = K_D THEN
            V_SQL := V_SQL || 
                ' AND NOT EXISTS (SELECT 1'|| 
                '                   FROM QUALIFICACAO QF'||
                '                  WHERE FORNECEDOR.CDQUALIF = QF.CDQUALIF'||
                '                    AND FORNECEDOR.IDFORNAUTO = '''|| K_N ||''''||
                '                    AND (QF.IDPERCOTCMP = 2 OR'||  
                '                         TO_DATE(SYSDATE) > FORNECEDOR.DTVALQUALIF))'||
                ' AND NOT EXISTS (SELECT 1'||
                '                   FROM QFOMARPROD QF'||
                '                  WHERE QF.CDPRODUTO = PRODUTO.CDPRODUTO'||
                '                    AND QF.CDMARCA = MARCA.CDMARCA'|| 
                '                    AND ((QF.IDAPRMARPRO = '''|| K_N ||''' AND'||
                '                          QF.IDAUTMARPRO = '''|| K_N ||''') OR (QF.IDAPRMARPRO = '''|| K_S ||''' AND'||
                '                                                                TO_DATE(SYSDATE) > QF.DTVALAPROVA)))'||
                ' AND NOT EXISTS (SELECT 1'||
                '                   FROM QFOPRODFORN'|| 
                '                  WHERE QFOPRODFORN.CDPRODUTO = PRODFORNCOMP.CDPRODCOMPL'||
                '                    AND QFOPRODFORN.CDFORNECED= PRODFORNCOMP.CDFORNECED'||
                '                    AND ((QFOPRODFORN.IDFORNAPROV = '''|| K_N ||''' AND'||
                '                          QFOPRODFORN.IDFORNAUTOR = '''|| K_N ||''') OR'||
                '                         (QFOPRODFORN.IDFORNAPROV = '''|| K_S ||''' AND'|| 
                '                          TO_DATE(SYSDATE) > QFOPRODFORN.DTVALPRFORN))) ';
        END IF;
        
        IF P_PARASUPRI.IDULTIDTVALQ = K_M THEN
            V_SQL := V_SQL ||
                ' AND NOT EXISTS (SELECT 1'|| 
                '                   FROM QUALIFICACAO QF'||
                '                  WHERE FORNECEDOR.CDQUALIF = QF.CDQUALIF'||
                '                    AND FORNECEDOR.IDFORNAUTO = '''|| K_N ||''''||
                '                    AND (QF.IDPERCOTCMP = 2 OR'||  
                '                         TO_DATE(SYSDATE) > LAST_DAY(FORNECEDOR.DTVALQUALIF)))'||
                ' AND NOT EXISTS (SELECT 1'||
                '                   FROM QFOMARPROD QF'||
                '                  WHERE QF.CDPRODUTO = PRODUTO.CDPRODUTO'||
                '                    AND QF.CDMARCA = MARCA.CDMARCA'|| 
                '                    AND ((QF.IDAPRMARPRO = '''|| K_N ||''' AND'||
                '                          QF.IDAUTMARPRO = '''|| K_N ||''') OR (QF.IDAPRMARPRO = '''|| K_S ||''' AND'|| 
                '                                                                TO_DATE(SYSDATE) > LAST_DAY(QF.DTVALAPROVA))))'||
                ' AND NOT EXISTS (SELECT 1'||
                '                   FROM QFOPRODFORN'|| 
                '                  WHERE QFOPRODFORN.CDPRODUTO = PRODFORNCOMP.CDPRODCOMPL'||
                '                    AND QFOPRODFORN.CDFORNECED = PRODFORNCOMP.CDFORNECED'||
                '                    AND ((QFOPRODFORN.IDFORNAPROV = '''|| K_N ||''' AND'||
                '                          QFOPRODFORN.IDFORNAUTOR = '''|| K_N ||''') OR'||
                '                         (QFOPRODFORN.IDFORNAPROV = '''|| K_S ||''' AND'|| 
                '                          TO_DATE(SYSDATE) > LAST_DAY(QFOPRODFORN.DTVALPRFORN)))) ';
        END IF;

        IF NVL(P_PARASUPRI.IDMARSEMQUA, K_N) = K_S THEN
            V_SQL := V_SQL ||
                ' AND EXISTS (SELECT 1'||
                '               FROM QFOMARPROD'||
                '              WHERE QFOMARPROD.CDPRODUTO = PRODUTO.CDPRODUTO'||
                '                AND QFOMARPROD.CDMARCA = MARCA.CDMARCA) ';
        END IF;

        V_SQL := V_SQL ||
            ' AND EXISTS (SELECT 1'|| 
            '               FROM MARCFORNPEDCOL'|| 
            '              WHERE MARCFORNPEDCOL.CDFORNECED = FORNECEDOR.CDFORNECED'||
            '                AND MARCFORNPEDCOL.CDMARCA = MARCA.CDMARCA'|| 
            '              UNION ALL'||
            '             SELECT 1'|| 
            '               FROM DUAL'||
            '              WHERE NOT EXISTS (SELECT 1'||
            '                                  FROM MARCFORNPEDCOL'||
            '                                 WHERE MARCFORNPEDCOL.CDFORNECED = FORNECEDOR.CDFORNECED))';
        
        IF P_TIPOPEDIDO = 'TODOS' THEN
            V_SQL := V_SQL || ' ) COMPLETO LEFT JOIN ';
        ELSIF P_TIPOPEDIDO = 'COMPRAR' THEN
            V_SQL := V_SQL || ' ) COMPLETO JOIN ';
        END IF;
        
        IF NVL(P_PARASUPRI.IDCONSPRSOL, K_N) = K_N THEN
            V_SQL := V_SQL ||
                ' (SELECT FILIAL.CDREGIAO, PRODACOMPRAR.CDFILIAL,'||
                '	      PRODACOMPRAR.CDPRODUTO, PRODACOMPRAR.QTACOMPRAR, PRODACOMPRAR.VRFATOCONV'||
                '    FROM (SELECT COMP.CDFILIAL, COMP.DTPROGENTR, COMP.CDPRODUTO, NVL(COMP.VRFATOCONV, 1) VRFATOCONV,'|| 
                '                 COMP.QTDECOMP-NVL(JACOMP.QTDECOMP/NVL(COMP.VRFATOCONV,1),0) QTACOMPRAR,'||
                '                 NVL(JACOMP.QTDECOMP / NVL(COMP.VRFATOCONV, 1),0) QTJACOMP, COMP.QTDECOMP QTCOMP'||
                '            FROM (SELECT ITEMSOLI.CDFILSOLI CDFILIAL, ITEMSOLI.DTPROGENTR,'|| 
                '                         ESTOQUE.CDPRODUTO, ESTOQUE.CDPRODESTO, ESTOQUE.VRFATOCONV,'||
                '                         SUM((ITEMSOLI.QTSOLIPROD*NVL(PRODUTO.VRFATOCONV,1))/NVL(ESTOQUE.VRFATOCONV,1)) QTDECOMP'||
                '                    FROM PRODUTO ESTOQUE'||
                '                    JOIN PRODUTO ON ESTOQUE.CDPRODUTO = PRODUTO.CDPRODESTO'||
                '                    JOIN ITEMSOLI ON PRODUTO.CDPRODUTO = ITEMSOLI.CDPRODUTO'||
                '                   WHERE ITEMSOLI.IDITMCONS = '''|| K_N ||''''||
                '                     AND NVL(ITEMSOLI.IDSOLIAPROV, '''|| K_S ||''') = '''|| K_S ||'''';
            
            IF P_CDPRODINI IS NOT NULL AND P_CDPRODFIN IS NOT NULL THEN
                V_SQL := V_SQL || ' AND ESTOQUE.CDARVPROD BETWEEN '''|| P_CDPRODINI ||''' AND RPAD('''|| P_CDPRODFIN ||''', 20, '''|| K_Z || ''') ';
            END IF;
            
            V_SQL := V_SQL ||
                '                     AND (ITEMSOLI.DTPROGENTR BETWEEN '''|| P_DTINI ||''' AND '''|| P_DTFIN ||''')'||              
                '                   GROUP BY ITEMSOLI.CDFILSOLI, ITEMSOLI.DTPROGENTR,'||
                '                            ESTOQUE.CDPRODESTO, ESTOQUE.CDPRODUTO,'||
                '                            ESTOQUE.VRFATOCONV'||
                '               ) COMP LEFT JOIN';
        END IF;

        IF NVL(P_PARASUPRI.IDCONSPRSOL, K_N) = K_S THEN
            V_SQL := V_SQL ||
                ' ( SELECT FILIAL.CDREGIAO, PRODACOMPRAR.CDFILIAL, PRODACOMPRAR.CDPRODUTO,'||
                '          PRODACOMPRAR.QTACOMPRAR, PRODACOMPRAR.VRFATOCONV'||  
                '     FROM (SELECT COMP.CDFILIAL, COMP.DTPROGENTR, COMP.CDPRODUTO, NVL(COMP.VRFATOCONV, 1) VRFATOCONV,'|| 
                '                  COMP.QTDECOMP-NVL(JACOMP.QTDECOMP/NVL(COMP.VRFATOCONV,1),0) QTACOMPRAR,'|| 
                '                  NVL(JACOMP.QTDECOMP/NVL(COMP.VRFATOCONV,1),0) QTJACOMP, COMP.QTDECOMP QTCOMP'||
                '             FROM (SELECT ITEMSOLI.CDFILSOLI AS CDFILIAL, ITEMSOLI.DTPROGENTR,'||
                '                          PRODUTO.CDPRODUTO, PRODUTO.CDPRODESTO, PRODUTO.VRFATOCONV,'||
                '                          SUM(ITEMSOLI.QTSOLIPROD*NVL(PRODUTO.VRFATOCONV,1)) QTDECOMP'||
                '                     FROM PRODUTO'||
                '                     JOIN ITEMSOLI ON PRODUTO.CDPRODUTO = ITEMSOLI.CDPRODUTO'||
                '                    WHERE ITEMSOLI.IDITMCONS = '''|| K_N ||''''||
                '                      AND NVL(ITEMSOLI.IDSOLIAPROV,'''|| K_S ||''') = '''|| K_S ||'''';
            
            IF P_CDPRODINI IS NOT NULL AND P_CDPRODFIN IS NOT NULL THEN
                V_SQL := V_SQL || ' AND PRODUTO.CDARVPROD BETWEEN '''|| P_CDPRODINI ||''' AND RPAD('''|| P_CDPRODFIN ||''', 20, '''|| K_Z || ''') ';
            END IF;
            
            V_SQL := V_SQL ||
                '                      AND (ITEMSOLI.DTPROGENTR BETWEEN '''|| P_DTINI ||''' AND '''|| P_DTFIN ||''')'||
                '                    GROUP BY ITEMSOLI.CDFILSOLI, ITEMSOLI.DTPROGENTR,'||
                '                             PRODUTO.CDPRODESTO, PRODUTO.CDPRODUTO,'||
                '                             PRODUTO.VRFATOCONV'||  
                '           ) COMP LEFT JOIN';
        END IF;
        
        V_SQL := V_SQL ||
            '            (SELECT ITEMAUTF.CDFILDEST CDFILIAL, ITEMAUTF.DTENTRITMSOL,'||
            '                    PRODUTO.CDPRODESTO,'||
            '                    SUM(ITEMAUTF.QTPROGENTAF*NVL(PRODUTO.VRFATOCONV,1)) QTDECOMP'||
            '               FROM ITEMAUTF'||
            '               JOIN PRODUTO ON ITEMAUTF.CDPRODUTO = PRODUTO.CDPRODUTO'||
            '               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 = '''|| K_N ||''''||
            '                AND AUTOFORNE.IDAUTOFORNEX = '''|| K_N ||''''||
            '                AND (ITEMAUTF.DTENTRITMSOL BETWEEN '''|| P_DTINI ||''' AND '''|| P_DTFIN ||''')'||
            '                AND NVL(AUTOFORNE.IDBAIXAAF, 0) <> 5'||
            '              GROUP BY ITEMAUTF.CDFILDEST, ITEMAUTF.DTENTRITMSOL,'||
            '                       PRODUTO.CDPRODESTO'||
            '            ) JACOMP ON COMP.CDFILIAL = JACOMP.CDFILIAL'||
            '                    AND COMP.DTPROGENTR = JACOMP.DTENTRITMSOL'||
            '                    AND COMP.CDPRODESTO = JACOMP.CDPRODESTO'||
            '       ) PRODACOMPRAR JOIN FILIAL ON PRODACOMPRAR.CDFILIAL = FILIAL.CDFILIAL'||
            ' WHERE NVL(FILIAL.CDFILCENTCMP, FILIAL.CDFILIAL) = '''|| P_CDFILIAL ||''''||
            '   AND (PRODACOMPRAR.QTCOMP - PRODACOMPRAR.QTJACOMP) > 0';

        IF P_CDREGIAO IS NOT NULL THEN
            V_SQL := V_SQL || ' AND INSTR('''|| P_CDREGIAO ||''', FILIAL.CDREGIAO) <> 0 ';
        END IF;

        V_SQL := V_SQL || 
            ' ) PRODACOMPRAR ON COMPLETO.CDPRODESTO = PRODACOMPRAR.CDPRODUTO'||
            '               AND COMPLETO.CDREGIAO  = PRODACOMPRAR.CDREGIAO';

        IF NVL(P_FILIAL.IDFUNCAOFILI, K_O) = K_C THEN 
            V_SQL := V_SQL ||
                ' JOIN (SELECT PARAMPRODSUP.CDREGIAO, PARAMPRODSUP.CDPRODUTO'||
                '         FROM PARAMPRODSUP'||
                '         JOIN FILIAL ON PARAMPRODSUP.CDFILICTRL = FILIAL.CDFILIAL'||
                '        WHERE FILIAL.CDFILIAL = '''|| P_CDFILIPROC ||''''||
                '          AND PARAMPRODSUP.IDFILINEGCOR = '''|| K_S ||''')'||
                '   ON COMPLETO.CDPRODUTO = PARAMPRODSUP.CDPRODUTO'||
                '  AND COMPLETO.CDREGIAO = PARAMPRODSUP.CDREGIAO';
        END IF;

        IF NVL(P_FILIAL.IDFUNCAOFILI, K_O) = K_R THEN 
            V_SQL := V_SQL ||
                ' JOIN (SELECT PARAMPRODSUP.CDREGIAO, PARAMPRODSUP.CDPRODUTO'||
                '         FROM PARAMPRODSUP'||
                '         JOIN FILIAL ON PARAMPRODSUP.CDFILICTRL = FILIAL.CDFILIAL'||
                '        WHERE FILIAL.CDFILIAL = '''|| P_CDFILIPROC ||''''||
                '          AND PARAMPRODSUP.IDFILINEGREG = '''|| K_S ||''')'||
                '   ON COMPLETO.CDPRODUTO = PARAMPRODSUP.CDPRODUTO'||
                '  AND COMPLETO.CDREGIAO = PARAMPRODSUP.CDREGIAO';
        END IF;

        V_SQL := V_SQL || ' ) GROUP BY CDREGIAO, CDOPERADOR, CDFORNECED, CDPRODUTO, CDMARCA';
        
        RETURN V_SQL;
    END MONTA_TODOS_ACOMPRAR;

    FUNCTION MONTA_COTACAO(P_PARASUPRI   IN S_RECORD_PARASUPRI,
                           P_FILIAL      IN S_RECORD_FILIAL, 
                           P_CDFILIPROC  IN FILIAL.CDFILIAL%TYPE,
                           P_CDFILIAL    IN FILIAL.CDFILIAL%TYPE,
                           P_CDMARCA     IN VARCHAR2,
                           P_CDCOMPRADOR IN VARCHAR2,
                           P_CDFORNECED  IN VARCHAR2,
                           P_CDREGIAO    IN VARCHAR2,
                           P_CDPRODINI   IN PRODUTO.CDARVPROD%TYPE,
                           P_CDPRODFIN   IN PRODUTO.CDARVPROD%TYPE,
                           P_NRCOLEPRECO IN ITEMCOLE.NRCOLEPRECO%TYPE,
                           P_DESCFORNCOT IN VARCHAR2 DEFAULT 'N') RETURN VARCHAR2 IS
        V_SQL VARCHAR2(32000);
    BEGIN
        V_SQL := 
            ' SELECT ITEM.CDREGIAO, ITEM.CDOPERADOR, ITEM.CDFORNECED, ITEM.CDPRODUTO, ITEM.CDMARCA,  ITEM.QTACOMPRAR, NULL AS NRCOLEPRECO'||
            '   FROM ( SELECT REGIAO.CDREGIAO, OPERADOR.CDOPERADOR, ITEMCOLE.CDFORNECED, PRODUTO.CDPRODUTO,'|| 
            '                 MARCA.CDMARCA, NVL(ITEMCOLE.QTACMPITMCOL, 0) AS QTACOMPRAR'||
            '            FROM COLETAPR'||
            '            JOIN ITEMCOLE ON COLETAPR.CDFILIAL = ITEMCOLE.CDFILIAL'||
            '                         AND COLETAPR.NRCOLEPRECO = ITEMCOLE.NRCOLEPRECO'||
            '            JOIN PRODUTO ON ITEMCOLE.CDPRODUTO = PRODUTO.CDPRODUTO'||
            '            JOIN REGIAO ON ITEMCOLE.CDREGIAO = REGIAO.CDREGIAO'||
            '            JOIN OPERADOR ON COLETAPR.CDOPERADOR = OPERADOR.CDOPERADOR';
        
        IF P_DESCFORNCOT = 'S' THEN
            V_SQL := V_SQL ||
                '        LEFT JOIN (SELECT FORNECEDOR.*'||
                '                     FROM FORNECEDOR';
            IF P_CDFORNECED IS NOT NULL THEN 
                V_SQL := V_SQL || '  WHERE INSTR('''||P_CDFORNECED||''', FORNECEDOR.CDFORNECED) > 0'; 
            END IF;

            V_SQL := V_SQL ||
                ' ) FORNECEDOR ON ITEMCOLE.CDFORNECED = FORNECEDOR.CDFORNECED';
        ELSE
            V_SQL := V_SQL ||
                '             JOIN (SELECT FORNECEDOR.*'||
                '                     FROM FORNECEDOR';
            IF P_CDFORNECED IS NOT NULL THEN 
                V_SQL := V_SQL || '  WHERE INSTR('''||P_CDFORNECED||''', FORNECEDOR.CDFORNECED) > 0'; 
            END IF;

            V_SQL := V_SQL ||
                ' ) FORNECEDOR ON ITEMCOLE.CDFORNECED = FORNECEDOR.CDFORNECED';
        END IF;

        V_SQL := V_SQL || 
            '            JOIN PRODFORNCOMP ON ITEMCOLE.CDFORNECED = PRODFORNCOMP.CDFORNECED'||
            '                             AND PRODUTO.CDPRODUTO = PRODFORNCOMP.CDPRODCOMPL'||
            '            JOIN MARCA ON ITEMCOLE.CDMARCA = MARCA.CDMARCA';

        V_SQL := V_SQL || 
            '            LEFT JOIN (SELECT MARCPRODCOMP.CDPRMARCOMPL, MARCPRODCOMP.CDMARCA, '||
            '                              NVL(MARCPRODCOMP.CDMARCA, '''|| P_PARASUPRI.CDMARCA ||''') CDMARCACOMPL'||
            '                         FROM MARCPRODCOMP'||
            '                        WHERE NVL(MARCPRODCOMP.CDMARCA, ''' || P_PARASUPRI.CDMARCA ||''') IS NOT NULL) MARCPRODCOMP'||
            '                   ON MARCA.CDMARCA = MARCPRODCOMP.CDMARCA'||
            '                  AND PRODFORNCOMP.CDPRODCOMPL = MARCPRODCOMP.CDPRMARCOMPL';
    
        IF NVL(P_FILIAL.IDFUNCAOFILI, K_O) = K_C THEN 
            V_SQL := V_SQL ||
                '        JOIN (SELECT PARAMPRODSUP.CDREGIAO, PARAMPRODSUP.CDPRODUTO'||
                '                FROM PARAMPRODSUP'||
                '                JOIN FILIAL ON FILIAL.CDFILIAL = PARAMPRODSUP.CDFILICTRL'||
                '               WHERE FILIAL.CDFILIAL = ''' || P_CDFILIPROC || ''''||
                '                 AND FILIAL.IDFUNCAOFILI = '''||K_C||''''||
                '                 AND PARAMPRODSUP.IDFILINEGCOR = ''' || K_S ||''')'||
                '          ON PARAMPRODSUP.CDPRODUTO = ITEMCOLE.CDPRODUTO'||
                '         AND PARAMPRODSUP.CDREGIAO = ITEMCOLE.CDREGIAO';
        END IF;

        IF NVL(P_FILIAL.IDFUNCAOFILI, K_O) = K_R THEN 
            V_SQL := V_SQL ||
                '        JOIN (SELECT PARAMPRODSUP.CDREGIAO, PARAMPRODSUP.CDPRODUTO'||
                '                FROM PARAMPRODSUP'||
                '                JOIN FILIAL ON FILIAL.CDFILIAL = PARAMPRODSUP.CDFILICTRL'||
                '               WHERE FILIAL.CDFILIAL = ''' || P_CDFILIPROC || ''''||
                '                 AND FILIAL.IDFUNCAOFILI = '''||K_R||''''||
                '                 AND PARAMPRODSUP.IDFILINEGREG = ''' || K_S ||''')'||
                '          ON PARAMPRODSUP.CDPRODUTO = ITEMCOLE.CDPRODUTO'||
                '         AND PARAMPRODSUP.CDREGIAO = ITEMCOLE.CDREGIAO';
        END IF;

        V_SQL := V_SQL ||    
            '           WHERE COLETAPR.CDFILIAL = ''' || P_CDFILIAL || ''''||
            '             AND COLETAPR.NRCOLEPRECO = ''' ||P_NRCOLEPRECO || ''''||
            '             AND PRODUTO.CDARVPROD BETWEEN ''' || P_CDPRODINI ||''' AND RPAD('''|| P_CDPRODFIN ||''', 20, '''|| K_Z || ''') '||
            '             AND MARCA.IDMARCAATIVA = ''' || K_A || '''';

        IF P_CDREGIAO IS NOT NULL THEN 
            V_SQL := V_SQL || ' AND INSTR('''||P_CDREGIAO||''', REGIAO.CDREGIAO) > 0'; 
        END IF;

        IF P_CDCOMPRADOR IS NOT NULL THEN 
            V_SQL := V_SQL || ' AND INSTR('''||P_CDCOMPRADOR||''', OPERADOR.CDOPERADOR) > 0'; 
        END IF;

        IF P_CDMARCA IS NOT NULL THEN 
            V_SQL := V_SQL || ' AND INSTR('''||P_CDMARCA||''', MARCA.CDMARCA) > 0'; 
        END IF;

        V_SQL := V_SQL || 
            ' AND EXISTS (SELECT 1'||
            '               FROM MARCFORNPEDCOL'||
            '              WHERE MARCFORNPEDCOL.CDFORNECED = ITEMCOLE.CDFORNECED'||
            '                AND MARCFORNPEDCOL.CDMARCA = MARCA.CDMARCA'||
            '              UNION ALL'||
            '             SELECT 1'||
            '               FROM DUAL'||
            '              WHERE NOT EXISTS (SELECT 1'||
            '                                  FROM MARCFORNPEDCOL'||
            '                                 WHERE MARCFORNPEDCOL.CDFORNECED = ITEMCOLE.CDFORNECED))';

        V_SQL := V_SQL ||
            ' AND NOT EXISTS (SELECT 1'|| 
            '                   FROM REFOREG'||
            '                  WHERE REFOREG.CDREGIAO = REGIAO.CDREGIAO'||
            '               AND REFOREG.CDFORNECED = ITEMCOLE.CDFORNECED)'||
            ' AND EXISTS (SELECT 1'||
            '               FROM PRODCOMP, PRODUTO PR'||
            '              WHERE PRODCOMP.CDPRODUTO = PR.CDPRODUTO'||
            '                AND PRODUTO.CDARVPROD LIKE PR.CDARVPROD || '''|| K_CP ||''''||
            '                AND OPERADOR.CDOPERADOR = PRODCOMP.CDOPERADOR) ';
            
        IF P_PARASUPRI.IDULTIDTVALQ = K_D THEN
            V_SQL := V_SQL || 
                ' AND NOT EXISTS (SELECT 1'|| 
                '                   FROM QUALIFICACAO QF'||
                '                  WHERE FORNECEDOR.CDQUALIF = QF.CDQUALIF'||
                '                    AND FORNECEDOR.IDFORNAUTO = '''|| K_N ||''''||
                '                    AND (QF.IDPERCOTCMP = 2 OR'||  
                '                         TO_DATE(SYSDATE) > FORNECEDOR.DTVALQUALIF))'||
                ' AND NOT EXISTS (SELECT 1'||
                '                   FROM QFOMARPROD QF'||
                '                  WHERE QF.CDPRODUTO = PRODUTO.CDPRODUTO'||
                '                    AND QF.CDMARCA = MARCPRODCOMP.CDMARCACOMPL'|| 
                '                    AND ((QF.IDAPRMARPRO = '''|| K_N ||''' AND'||
                '                          QF.IDAUTMARPRO = '''|| K_N ||''') OR (QF.IDAPRMARPRO = '''|| K_S ||''' AND'||
                '                                                                TO_DATE(SYSDATE) > QF.DTVALAPROVA)))'||
                ' AND NOT EXISTS (SELECT 1'||
                '                   FROM QFOPRODFORN'|| 
                '                  WHERE QFOPRODFORN.CDPRODUTO = PRODFORNCOMP.CDPRODCOMPL'||
                '                    AND QFOPRODFORN.CDFORNECED= PRODFORNCOMP.CDFORNECED'||
                '                    AND ((QFOPRODFORN.IDFORNAPROV = '''|| K_N ||''' AND'||
                '                          QFOPRODFORN.IDFORNAUTOR = '''|| K_N ||''') OR'||
                '                         (QFOPRODFORN.IDFORNAPROV = '''|| K_S ||''' AND'|| 
                '                          TO_DATE(SYSDATE) > QFOPRODFORN.DTVALPRFORN))) ';
        END IF;
                
        IF P_PARASUPRI.IDULTIDTVALQ = K_M THEN
            V_SQL := V_SQL ||
                ' AND NOT EXISTS (SELECT 1'|| 
                '                   FROM QUALIFICACAO QF'||
                '                  WHERE FORNECEDOR.CDQUALIF = QF.CDQUALIF'||
                '                    AND FORNECEDOR.IDFORNAUTO = '''|| K_N ||''''||
                '                    AND (QF.IDPERCOTCMP = 2 OR'||  
                '                         TO_DATE(SYSDATE) > LAST_DAY(FORNECEDOR.DTVALQUALIF)))'||
                ' AND NOT EXISTS (SELECT 1'||
                '                   FROM QFOMARPROD QF'||
                '                  WHERE QF.CDPRODUTO = PRODUTO.CDPRODUTO'||
                '                    AND QF.CDMARCA = MARCPRODCOMP.CDMARCACOMPL'|| 
                '                    AND ((QF.IDAPRMARPRO = '''|| K_N ||''' AND'||
                '                          QF.IDAUTMARPRO = '''|| K_N ||''') OR (QF.IDAPRMARPRO = '''|| K_S ||''' AND'|| 
                '                                                                TO_DATE(SYSDATE) > LAST_DAY(QF.DTVALAPROVA))))'||
                ' AND NOT EXISTS (SELECT 1'||
                '                   FROM QFOPRODFORN'|| 
                '                  WHERE QFOPRODFORN.CDPRODUTO = PRODFORNCOMP.CDPRODCOMPL'||
                '                    AND QFOPRODFORN.CDFORNECED = PRODFORNCOMP.CDFORNECED'||
                '                    AND ((QFOPRODFORN.IDFORNAPROV = '''|| K_N ||''' AND'||
                '                          QFOPRODFORN.IDFORNAUTOR = '''|| K_N ||''') OR'||
                '                         (QFOPRODFORN.IDFORNAPROV = '''|| K_S ||''' AND'|| 
                '                          TO_DATE(SYSDATE) > LAST_DAY(QFOPRODFORN.DTVALPRFORN)))) ';
        END IF;

        IF NVL(P_PARASUPRI.IDMARSEMQUA, K_N) = K_S THEN
            V_SQL := V_SQL ||
                ' AND EXISTS (SELECT 1'||
                '               FROM QFOMARPROD'||
                '              WHERE QFOMARPROD.CDPRODUTO = PRODUTO.CDPRODUTO'||
                '                AND QFOMARPROD.CDMARCA = MARCPRODCOMP.CDMARCACOMPL)';
        END IF;

        V_SQL := V_SQL || ' ) ITEM';

        RETURN V_SQL;
    
    END MONTA_COTACAO;

    FUNCTION MONTA_LISTPREC_IDSISDOS_3(P_PARASUPRI    IN S_RECORD_PARASUPRI,
                                       P_FILIAL       IN S_RECORD_FILIAL,
                                       P_CDFILIPROC   IN FILIAL.CDFILIAL%TYPE,
                                       P_CDFILIAL     IN FILIAL.CDFILIAL%TYPE,
                                       P_CDMARCA      IN VARCHAR2,
                                       P_CDCOMPRADOR  IN VARCHAR2,
                                       P_CDFORNECED   IN VARCHAR2,
                                       P_CDREGIAO     IN VARCHAR2,
                                       P_CDPRODINI    IN PRODUTO.CDARVPROD%TYPE,
                                       P_CDPRODFIN    IN PRODUTO.CDARVPROD%TYPE,
                                       P_NRSEQPRELIST IN ITEMCOLE.NRSEQPRELIST%TYPE,
                                       P_DTINI        IN DATE,
                                       P_DTFIN        IN DATE) RETURN VARCHAR2 IS
        V_SQL VARCHAR2(32000);
    BEGIN
        V_SQL := 
            '   SELECT REGIAO.CDREGIAO, OPERADOR.CDOPERADOR, FORNECEDOR.CDFORNECED, PRODUTO.CDPRODUTO, MARCA.CDMARCA,'||
            '          SUM(NVL(PRODACOMPRAR.QTACOMPRAR, 0)) QTACOMPRAR,'||
            '          ITEMCOLE.NRCOLEPRECO'||
            '     FROM ITEMCOLE'||
            '     JOIN COLETAPR ON ITEMCOLE.CDFILIAL = COLETAPR.CDFILIAL'||
            '                  AND ITEMCOLE.NRCOLEPRECO = COLETAPR.NRCOLEPRECO'||
            '     JOIN PRODUTO ON ITEMCOLE.CDPRODUTO = PRODUTO.CDPRODUTO'||
            '     JOIN MARCPRODCOMP ON ITEMCOLE.CDPRODUTO = MARCPRODCOMP.CDPRMARCOMPL'||
            '                      AND ITEMCOLE.CDMARCA = MARCPRODCOMP.CDMARCA'||
            '     JOIN REGIAO ON ITEMCOLE.CDREGIAO = REGIAO.CDREGIAO'||
            '     JOIN OPERADOR ON COLETAPR.CDOPERADOR = OPERADOR.CDOPERADOR'||
            '     JOIN FORNECEDOR ON ITEMCOLE.CDFORNECED = FORNECEDOR.CDFORNECED'||
            '     JOIN MARCA ON MARCPRODCOMP.CDMARCA = MARCA.CDMARCA';

        IF NVL(P_FILIAL.IDFUNCAOFILI, K_O) = K_C THEN 
            V_SQL := V_SQL ||
                ' JOIN (SELECT PARAMPRODSUP.CDREGIAO, PARAMPRODSUP.CDPRODUTO'||
                '         FROM PARAMPRODSUP'||
                '         JOIN FILIAL ON PARAMPRODSUP.CDFILICTRL = FILIAL.CDFILIAL'||
                '        WHERE FILIAL.CDFILIAL = '''|| P_CDFILIPROC ||''''||
                '          AND PARAMPRODSUP.IDFILINEGCOR = '''|| K_S ||''')'||
                '   ON ITEMCOLE.CDPRODUTO = PARAMPRODSUP.CDPRODUTO'||
                '  AND ITEMCOLE.CDREGIAO = PARAMPRODSUP.CDREGIAO';
        END IF;

        IF NVL(P_FILIAL.IDFUNCAOFILI, K_O) = K_R THEN 
            V_SQL := V_SQL ||
                ' JOIN (SELECT PARAMPRODSUP.CDREGIAO, PARAMPRODSUP.CDPRODUTO'||
                '         FROM PARAMPRODSUP'||
                '         JOIN FILIAL ON PARAMPRODSUP.CDFILICTRL = FILIAL.CDFILIAL'||
                '        WHERE FILIAL.CDFILIAL = '''|| P_CDFILIPROC ||''''||
                '          AND PARAMPRODSUP.IDFILINEGREG = '''|| K_S ||''')'||
                '   ON ITEMCOLE.CDPRODUTO = PARAMPRODSUP.CDPRODUTO'||
                '  AND ITEMCOLE.CDREGIAO = PARAMPRODSUP.CDREGIAO';
        END IF;

        IF NVL(P_PARASUPRI.IDCONSPRSOL, K_N) = K_N THEN
            V_SQL := V_SQL ||
                ' LEFT JOIN (SELECT COMP.CDREGIAO, COMP.CDPRODUTO,'||
                '                   COMP.QTDECOMP-NVL(JACOMP.QTDECOMP/COMP.VRFATOCONV,0) QTACOMPRAR'||
                '              FROM (SELECT FILIAL.CDREGIAO, ESTOQUE.CDPRODESTO, ESTOQUE.CDPRODUTO, ESTOQUE.VRFATOCONV,'||
                '                           SUM((ITEMSOLI.QTSOLIPROD*PRODUTO.VRFATOCONV)/ESTOQUE.VRFATOCONV) QTDECOMP'||
                '                      FROM ITEMSOLI'||
                '                      JOIN FILIAL ON ITEMSOLI.CDFILSOLI = FILIAL.CDFILIAL'||
                '                      JOIN PRODUTO ON ITEMSOLI.CDPRODUTO = PRODUTO.CDPRODUTO'||
                '                      JOIN PRODUTO ESTOQUE ON PRODUTO.CDPRODESTO = ESTOQUE.CDPRODUTO'||
                '                     WHERE ITEMSOLI.DTPROGENTR BETWEEN '''|| P_DTINI || ''' AND '''|| P_DTFIN ||''''||
                '                       AND ITEMSOLI.IDITMCONS = '''||K_N||''''||
                '                       AND NVL(ITEMSOLI.IDSOLIAPROV,'''||K_S||''') = '''||K_S||'''';
            
            IF P_CDPRODINI IS NOT NULL AND P_CDPRODFIN IS NOT NULL THEN
                V_SQL := V_SQL || '     AND PRODUTO.CDARVPROD BETWEEN '''|| P_CDPRODINI ||''' AND RPAD('''|| P_CDPRODFIN ||''', 20, '''|| K_Z || ''') ';
            END IF;

            IF P_CDREGIAO IS NOT NULL THEN 
                V_SQL := V_SQL || '     AND INSTR('''||P_CDREGIAO||''', FILIAL.CDREGIAO) > 0'; 
            END IF;

            V_SQL := V_SQL || 
                '                     GROUP BY FILIAL.CDREGIAO, ESTOQUE.CDPRODESTO, ESTOQUE.CDPRODUTO, ESTOQUE.VRFATOCONV) COMP'||
                '         LEFT JOIN (SELECT FILIAL.CDREGIAO, PRODUTO.CDPRODESTO, SUM(ITEMAUTF.QTPROGENTAF*PRODUTO.VRFATOCONV) QTDECOMP'||
                '                      FROM ITEMAUTF'||
                '                      JOIN AUTOFORNE ON ITEMAUTF.CDFILDEST = AUTOFORNE.CDFILDEST'||
                '                                    AND ITEMAUTF.CDFILLANC = AUTOFORNE.CDFILLANC'||
                '                                    AND ITEMAUTF.NRAUTOFORN = AUTOFORNE.NRAUTOFORN'||
                '                      JOIN FILIAL ON AUTOFORNE.CDFILDEST = FILIAL.CDFILIAL'||
                '                      JOIN PRODUTO ON ITEMAUTF.CDPRODUTO = PRODUTO.CDPRODUTO'||
                '                     WHERE ITEMAUTF.DTENTRITMSOL BETWEEN '''|| P_DTINI || ''' AND '''|| P_DTFIN ||''''||
                '                       AND AUTOFORNE.IDSITUATUAAF IS NULL'||
                '                       AND AUTOFORNE.IDAFFORALIM = '''||K_N||''''||
                '                       AND AUTOFORNE.IDAUTOFORNEX = '''||K_N||''''||
                '                       AND NVL(AUTOFORNE.IDBAIXAAF, '''||'0'||''') <> '''||'5'||'''';

            IF P_CDREGIAO IS NOT NULL THEN 
                V_SQL := V_SQL || '     AND INSTR('''||P_CDREGIAO||''', FILIAL.CDREGIAO) > 0'; 
            END IF;

            IF P_CDPRODINI IS NOT NULL AND P_CDPRODFIN IS NOT NULL THEN
                V_SQL := V_SQL || '     AND PRODUTO.CDARVPROD BETWEEN '''|| P_CDPRODINI ||''' AND RPAD('''|| P_CDPRODFIN ||''', 20, '''|| K_Z || ''') ';
            END IF;

            V_SQL := V_SQL || 
                '                     GROUP BY FILIAL.CDREGIAO, PRODUTO.CDPRODESTO) JACOMP'||
                '                ON COMP.CDREGIAO = JACOMP.CDREGIAO'||
                '               AND COMP.CDPRODESTO = JACOMP.CDPRODESTO'||
                '             WHERE COMP.QTDECOMP-NVL(JACOMP.QTDECOMP/COMP.VRFATOCONV,0) > 0) PRODACOMPRAR'||
                '        ON ITEMCOLE.CDREGIAO = PRODACOMPRAR.CDREGIAO'||
                '       AND ITEMCOLE.CDPRODUTO = PRODACOMPRAR.CDPRODUTO';
        END IF;

        IF NVL(P_PARASUPRI.IDCONSPRSOL, K_N) = K_S THEN
            V_SQL := V_SQL ||
                ' LEFT JOIN (SELECT COMP.CDREGIAO, COMP.CDPRODUTO,'||
                '                   COMP.QTDECOMP-NVL(JACOMP.QTDECOMP/COMP.VRFATOCONV,0) QTACOMPRAR'||
                '              FROM (SELECT FILIAL.CDREGIAO, PRODUTO.CDPRODESTO, PRODUTO.CDPRODUTO, PRODUTO.VRFATOCONV,'||
                '                           SUM(ITEMSOLI.QTSOLIPROD*PRODUTO.VRFATOCONV) QTDECOMP'||
                '                      FROM ITEMSOLI'||
                '                      JOIN FILIAL ON ITEMSOLI.CDFILSOLI = FILIAL.CDFILIAL'||
                '                      JOIN PRODUTO ON ITEMSOLI.CDPRODUTO = PRODUTO.CDPRODUTO'||
                '                     WHERE ITEMSOLI.DTPROGENTR BETWEEN '''|| P_DTINI || ''' AND '''|| P_DTFIN ||''''||
                '                       AND ITEMSOLI.IDITMCONS = '''||K_N||''''||
                '                       AND NVL(ITEMSOLI.IDSOLIAPROV,'''||K_S||''') = '''||K_S||'''';

            IF P_CDPRODINI IS NOT NULL AND P_CDPRODFIN IS NOT NULL THEN
                V_SQL := V_SQL || '     AND PRODUTO.CDARVPROD BETWEEN '''|| P_CDPRODINI ||''' AND RPAD('''|| P_CDPRODFIN ||''', 20, '''|| K_Z || ''') ';
            END IF;

            IF P_CDREGIAO IS NOT NULL THEN 
                V_SQL := V_SQL || '     AND INSTR('''||P_CDREGIAO||''', FILIAL.CDREGIAO) > 0'; 
            END IF;

            V_SQL := V_SQL || 
                '                     GROUP BY FILIAL.CDREGIAO, PRODUTO.CDPRODESTO, PRODUTO.CDPRODUTO, PRODUTO.VRFATOCONV) COMP'||
                '         LEFT JOIN (SELECT FILIAL.CDREGIAO, PRODUTO.CDPRODESTO, SUM(ITEMAUTF.QTPROGENTAF*PRODUTO.VRFATOCONV) QTDECOMP'||
                '                      FROM ITEMAUTF'||
                '                      JOIN AUTOFORNE ON ITEMAUTF.CDFILDEST = AUTOFORNE.CDFILDEST'||
                '                                    AND ITEMAUTF.CDFILLANC = AUTOFORNE.CDFILLANC'||
                '                                    AND ITEMAUTF.NRAUTOFORN = AUTOFORNE.NRAUTOFORN'||
                '                      JOIN FILIAL ON AUTOFORNE.CDFILDEST = FILIAL.CDFILIAL'||
                '                      JOIN PRODUTO ON ITEMAUTF.CDPRODUTO = PRODUTO.CDPRODUTO'||
                '                     WHERE ITEMAUTF.DTENTRITMSOL BETWEEN '''|| P_DTINI || ''' AND '''|| P_DTFIN ||''''||
                '                       AND AUTOFORNE.IDSITUATUAAF IS NULL'||
                '                       AND AUTOFORNE.IDAFFORALIM = '''||K_N||''''||
                '                       AND AUTOFORNE.IDAUTOFORNEX = '''||K_N||''''||
                '                       AND NVL(AUTOFORNE.IDBAIXAAF, '''||'0'||''') <> '''||'5'||'''';

            IF P_CDPRODINI IS NOT NULL AND P_CDPRODFIN IS NOT NULL THEN
                V_SQL := V_SQL || '     AND PRODUTO.CDARVPROD BETWEEN '''|| P_CDPRODINI ||''' AND RPAD('''|| P_CDPRODFIN ||''', 20, '''|| K_Z || ''') ';
            END IF;

            IF P_CDREGIAO IS NOT NULL THEN 
                V_SQL := V_SQL || '     AND INSTR('''||P_CDREGIAO||''', FILIAL.CDREGIAO) > 0'; 
            END IF;

        V_SQL := V_SQL || 
                '                     GROUP BY FILIAL.CDREGIAO, PRODUTO.CDPRODESTO) JACOMP'||
                '                ON COMP.CDREGIAO = JACOMP.CDREGIAO'||
                '               AND COMP.CDPRODESTO = JACOMP.CDPRODESTO'||
                '             WHERE COMP.QTDECOMP-NVL(JACOMP.QTDECOMP/COMP.VRFATOCONV,0) > 0) PRODACOMPRAR'||
                '        ON ITEMCOLE.CDREGIAO = PRODACOMPRAR.CDREGIAO'||
                '       AND ITEMCOLE.CDPRODUTO = PRODACOMPRAR.CDPRODUTO';
        END IF;


        V_SQL := V_SQL ||

            ' WHERE ITEMCOLE.CDFILIAL = '''|| P_CDFILIAL ||''''||
            '   AND ITEMCOLE.NRSEQPRELIST = '''|| P_NRSEQPRELIST ||''''||
            '   AND MARCA.IDMARCAATIVA = '''|| K_A || '''';

        IF P_CDPRODINI IS NOT NULL AND P_CDPRODFIN IS NOT NULL THEN
            V_SQL := V_SQL || ' AND PRODUTO.CDARVPROD BETWEEN '''|| P_CDPRODINI ||''' AND RPAD('''|| P_CDPRODFIN ||''', 20, '''|| K_Z || ''') ';
        END IF;
        
        IF P_CDREGIAO IS NOT NULL THEN 
            V_SQL := V_SQL || ' AND INSTR('''||P_CDREGIAO||''', REGIAO.CDREGIAO) > 0'; 
        END IF;

        IF P_CDCOMPRADOR IS NOT NULL THEN 
            V_SQL := V_SQL || ' AND INSTR('''||P_CDCOMPRADOR||''', OPERADOR.CDOPERADOR) > 0'; 
        END IF;

        IF P_CDMARCA IS NOT NULL THEN 
            V_SQL := V_SQL || ' AND INSTR('''||P_CDMARCA||''', MARCA.CDMARCA) > 0'; 
        END IF;

        IF P_CDFORNECED IS NOT NULL THEN
            V_SQL := V_SQL || ' AND INSTR('''|| P_CDFORNECED ||''', FORNECEDOR.CDFORNECED) > 0 ';
        END IF;

        V_SQL := V_SQL ||
            ' GROUP BY REGIAO.CDREGIAO, OPERADOR.CDOPERADOR, FORNECEDOR.CDFORNECED, PRODUTO.CDPRODUTO, MARCA.CDMARCA,'||
            '          ITEMCOLE.NRCOLEPRECO';

        RETURN V_SQL;
    END MONTA_LISTPREC_IDSISDOS_3;

    FUNCTION MONTA_LISTPREC_IDSISDOS_1(P_PARASUPRI    IN S_RECORD_PARASUPRI,
                                       P_FILIAL       IN S_RECORD_FILIAL,
                                       P_CDFILIPROC   IN FILIAL.CDFILIAL%TYPE,
                                       P_CDFILIAL     IN FILIAL.CDFILIAL%TYPE,
                                       P_CDMARCA      IN VARCHAR2,
                                       P_CDCOMPRADOR  IN VARCHAR2,
                                       P_CDFORNECED   IN VARCHAR2,
                                       P_CDREGIAO     IN VARCHAR2,
                                       P_CDPRODINI    IN PRODUTO.CDARVPROD%TYPE,
                                       P_CDPRODFIN    IN PRODUTO.CDARVPROD%TYPE,
                                       P_NRSEQPRELIST IN ITEMCOLE.NRSEQPRELIST%TYPE) RETURN VARCHAR2 IS
        V_SQL VARCHAR2(32000);
    BEGIN
        V_SQL := 
            '   SELECT REGIAO.CDREGIAO, OPERADOR.CDOPERADOR, FORNECEDOR.CDFORNECED, PRODUTO.CDPRODUTO, MARCA.CDMARCA,'||
            '          SUM(NVL(ITEMCOLE.QTACMPITMCOL, 0)) QTACOMPRAR, NULL AS NRCOLEPRECO'||
            '     FROM ITEMCOLE'||
            '     JOIN COLETAPR ON ITEMCOLE.CDFILIAL = COLETAPR.CDFILIAL'||
            '                  AND ITEMCOLE.NRCOLEPRECO = COLETAPR.NRCOLEPRECO'||
            '     JOIN PRODUTO ON ITEMCOLE.CDPRODUTO = PRODUTO.CDPRODUTO'||
            '     JOIN REGIAO ON ITEMCOLE.CDREGIAO = REGIAO.CDREGIAO'||
            '     JOIN FORNECEDOR ON ITEMCOLE.CDFORNECED = FORNECEDOR.CDFORNECED'||
            '     JOIN MARCA ON ITEMCOLE.CDMARCA = MARCA.CDMARCA'||
            '     JOIN OPERADOR ON COLETAPR.CDOPERADOR = OPERADOR.CDOPERADOR'||
            '     JOIN PRODFORNCOMP ON ITEMCOLE.CDFORNECED = PRODFORNCOMP.CDFORNECED'||
            '                      AND PRODUTO.CDPRODUTO = PRODFORNCOMP.CDPRODCOMPL'||
            '     LEFT JOIN (SELECT MARCPRODCOMP.CDPRMARCOMPL, MARCPRODCOMP.CDMARCA, '||
            '                       NVL(MARCPRODCOMP.CDMARCA, '''|| P_PARASUPRI.CDMARCA ||''') CDMARCACOMPL'||
            '                  FROM MARCPRODCOMP'||
            '                 WHERE NVL(MARCPRODCOMP.CDMARCA, ''' || P_PARASUPRI.CDMARCA ||''') IS NOT NULL) MARCPRODCOMP'||
            '            ON MARCA.CDMARCA = MARCPRODCOMP.CDMARCA'||
            '           AND PRODFORNCOMP.CDPRODCOMPL = MARCPRODCOMP.CDPRMARCOMPL';

        IF NVL(P_FILIAL.IDFUNCAOFILI, K_O) = K_C THEN 
            V_SQL := V_SQL ||
                ' JOIN (SELECT PARAMPRODSUP.CDREGIAO, PARAMPRODSUP.CDPRODUTO'||
                '         FROM PARAMPRODSUP'||
                '         JOIN FILIAL ON FILIAL.CDFILIAL = PARAMPRODSUP.CDFILICTRL'||
                '        WHERE FILIAL.CDFILIAL = ''' || P_CDFILIPROC || ''''||
                '          AND FILIAL.IDFUNCAOFILI = '''||K_C||''''||
                '          AND PARAMPRODSUP.IDFILINEGCOR = ''' || K_S ||''')'||
                '   ON PARAMPRODSUP.CDPRODUTO = ITEMCOLE.CDPRODUTO'||
                '  AND PARAMPRODSUP.CDREGIAO = ITEMCOLE.CDREGIAO';
        END IF;

        IF NVL(P_FILIAL.IDFUNCAOFILI, K_O) = K_R THEN 
            V_SQL := V_SQL ||
                ' JOIN (SELECT PARAMPRODSUP.CDREGIAO, PARAMPRODSUP.CDPRODUTO'||
                '         FROM PARAMPRODSUP'||
                '         JOIN FILIAL ON FILIAL.CDFILIAL = PARAMPRODSUP.CDFILICTRL'||
                '        WHERE FILIAL.CDFILIAL = ''' || P_CDFILIPROC || ''''||
                '          AND FILIAL.IDFUNCAOFILI = '''||K_R||''''||
                '          AND PARAMPRODSUP.IDFILINEGREG = ''' || K_S ||''')'||
                '   ON PARAMPRODSUP.CDPRODUTO = ITEMCOLE.CDPRODUTO'||
                '  AND PARAMPRODSUP.CDREGIAO = ITEMCOLE.CDREGIAO';
        END IF;

        V_SQL := V_SQL ||
            '    WHERE ITEMCOLE.CDFILIAL = '''|| P_CDFILIAL ||''''||
            '      AND ITEMCOLE.NRSEQPRELIST = '''|| P_NRSEQPRELIST ||''''||
            '      AND MARCA.IDMARCAATIVA = ''' || K_A ||'''';

        IF P_CDPRODINI IS NOT NULL AND P_CDPRODFIN IS NOT NULL THEN
            V_SQL := V_SQL || 
                '  AND PRODUTO.CDARVPROD BETWEEN '''|| P_CDPRODINI ||''' AND RPAD('''|| P_CDPRODFIN ||''', 20, '''|| K_Z || ''') ';
        END IF;
                                    
        IF P_CDREGIAO IS NOT NULL THEN 
            V_SQL := V_SQL || 
                '  AND INSTR('''||P_CDREGIAO||''', REGIAO.CDREGIAO) > 0'; 
        END IF;

        IF P_CDFORNECED IS NOT NULL THEN
            V_SQL := V_SQL || 
                '  AND INSTR('''|| P_CDFORNECED ||''', FORNECEDOR.CDFORNECED) > 0 ';
        END IF;

        IF P_CDCOMPRADOR IS NOT NULL THEN 
            V_SQL := V_SQL || 
                '  AND INSTR('''||P_CDCOMPRADOR||''', OPERADOR.CDOPERADOR) > 0'; 
        END IF;

        IF P_CDMARCA IS NOT NULL THEN 
            V_SQL := V_SQL || 
                '  AND INSTR('''||P_CDMARCA||''', MARCA.CDMARCA) > 0'; 
        END IF;            

        V_SQL := V_SQL ||
            '      AND NOT EXISTS (SELECT 1'|| 
            '                        FROM REFOREG'||
            '                       WHERE REFOREG.CDREGIAO = REGIAO.CDREGIAO'||
            '                         AND REFOREG.CDFORNECED = FORNECEDOR.CDFORNECED)'||
            '      AND EXISTS (SELECT 1'||
            '                    FROM PRODCOMP, PRODUTO PR'||
            '                   WHERE PRODCOMP.CDPRODUTO = PR.CDPRODUTO'||
            '                     AND PRODUTO.CDARVPROD LIKE PR.CDARVPROD || '''|| K_CP ||''''||
            '                     AND OPERADOR.CDOPERADOR = PRODCOMP.CDOPERADOR) ';
            
        IF P_PARASUPRI.IDULTIDTVALQ = K_D THEN
            V_SQL := V_SQL || 
                '  AND NOT EXISTS (SELECT 1'|| 
                '                    FROM QUALIFICACAO QF'||
                '                   WHERE FORNECEDOR.CDQUALIF = QF.CDQUALIF'||
                '                     AND FORNECEDOR.IDFORNAUTO = '''|| K_N ||''''||
                '                     AND (QF.IDPERCOTCMP = 2 OR'||  
                '                          TO_DATE(SYSDATE) > FORNECEDOR.DTVALQUALIF))'||
                '  AND NOT EXISTS (SELECT 1'||
                '                    FROM QFOMARPROD QF'||
                '                   WHERE QF.CDPRODUTO = PRODUTO.CDPRODUTO'||
                '                     AND QF.CDMARCA = MARCPRODCOMP.CDMARCACOMPL'|| 
                '                     AND ((QF.IDAPRMARPRO = '''|| K_N ||''' AND'||
                '                           QF.IDAUTMARPRO = '''|| K_N ||''') OR (QF.IDAPRMARPRO = '''|| K_S ||''' AND'||
                '                                                                 TO_DATE(SYSDATE) > QF.DTVALAPROVA)))'||
                '  AND NOT EXISTS (SELECT 1'||
                '                    FROM QFOPRODFORN'|| 
                '                   WHERE QFOPRODFORN.CDPRODUTO = PRODFORNCOMP.CDPRODCOMPL'||
                '                     AND QFOPRODFORN.CDFORNECED= PRODFORNCOMP.CDFORNECED'||
                '                     AND ((QFOPRODFORN.IDFORNAPROV = '''|| K_N ||''' AND'||
                '                           QFOPRODFORN.IDFORNAUTOR = '''|| K_N ||''') OR'||
                '                          (QFOPRODFORN.IDFORNAPROV = '''|| K_S ||''' AND'|| 
                '                           TO_DATE(SYSDATE) > QFOPRODFORN.DTVALPRFORN))) ';
        END IF;
        
        IF P_PARASUPRI.IDULTIDTVALQ = K_M THEN
            V_SQL := V_SQL ||
                '  AND NOT EXISTS (SELECT 1'|| 
                '                    FROM QUALIFICACAO QF'||
                '                   WHERE FORNECEDOR.CDQUALIF = QF.CDQUALIF'||
                '                     AND FORNECEDOR.IDFORNAUTO = '''|| K_N ||''''||
                '                     AND (QF.IDPERCOTCMP = 2 OR'||  
                '                          TO_DATE(SYSDATE) > LAST_DAY(FORNECEDOR.DTVALQUALIF)))'||
                '  AND NOT EXISTS (SELECT 1'||
                '                    FROM QFOMARPROD QF'||
                '                   WHERE QF.CDPRODUTO = PRODUTO.CDPRODUTO'||
                '                     AND QF.CDMARCA = MARCPRODCOMP.CDMARCACOMPL'|| 
                '                     AND ((QF.IDAPRMARPRO = '''|| K_N ||''' AND'||
                '                           QF.IDAUTMARPRO = '''|| K_N ||''') OR (QF.IDAPRMARPRO = '''|| K_S ||''' AND'|| 
                '                                                                 TO_DATE(SYSDATE) > LAST_DAY(QF.DTVALAPROVA))))'||
                '  AND NOT EXISTS (SELECT 1'||
                '                    FROM QFOPRODFORN'|| 
                '                   WHERE QFOPRODFORN.CDPRODUTO = PRODFORNCOMP.CDPRODCOMPL'||
                '                     AND QFOPRODFORN.CDFORNECED = PRODFORNCOMP.CDFORNECED'||
                '                     AND ((QFOPRODFORN.IDFORNAPROV = '''|| K_N ||''' AND'||
                '                           QFOPRODFORN.IDFORNAUTOR = '''|| K_N ||''') OR'||
                '                          (QFOPRODFORN.IDFORNAPROV = '''|| K_S ||''' AND'|| 
                '                           TO_DATE(SYSDATE) > LAST_DAY(QFOPRODFORN.DTVALPRFORN)))) ';
        END IF;

        IF NVL(P_PARASUPRI.IDMARSEMQUA, K_N) = K_S THEN
            V_SQL := V_SQL ||
                '  AND EXISTS (SELECT 1'||
                '                FROM QFOMARPROD'||
                '               WHERE QFOMARPROD.CDPRODUTO = PRODUTO.CDPRODUTO'||
                '                 AND QFOMARPROD.CDMARCA = MARCPRODCOMP.CDMARCACOMPL) ';
        END IF;

        V_SQL := V_SQL ||
            '      AND EXISTS (SELECT 1'|| 
            '                    FROM MARCFORNPEDCOL'|| 
            '                   WHERE MARCFORNPEDCOL.CDFORNECED = FORNECEDOR.CDFORNECED'||
            '                     AND MARCFORNPEDCOL.CDMARCA = MARCA.CDMARCA'|| 
            '                   UNION ALL'||
            '                  SELECT 1'|| 
            '                    FROM DUAL'||
            '                   WHERE NOT EXISTS (SELECT 1'||
            '                                       FROM MARCFORNPEDCOL'||
            '                                      WHERE MARCFORNPEDCOL.CDFORNECED = FORNECEDOR.CDFORNECED))';

        V_SQL := V_SQL ||
            '    GROUP BY REGIAO.CDREGIAO, OPERADOR.CDOPERADOR, FORNECEDOR.CDFORNECED, PRODUTO.CDPRODUTO, MARCA.CDMARCA';
        
        RETURN V_SQL;
    END MONTA_LISTPREC_IDSISDOS_1;

    FUNCTION MONTA_NRCOMPRA(P_PARASUPRI   IN S_RECORD_PARASUPRI,
                            P_FILIAL      IN S_RECORD_FILIAL,
                            P_CDFILIPROC  IN FILIAL.CDFILIAL%TYPE,
                            P_CDFILIAL    IN FILIAL.CDFILIAL%TYPE,
                            P_CDMARCA     IN VARCHAR2,
                            P_CDCOMPRADOR IN VARCHAR2,
                            P_CDFORNECED  IN VARCHAR2,
                            P_CDREGIAO    IN VARCHAR2,
                            P_CDPRODINI   IN PRODUTO.CDARVPROD%TYPE,
                            P_CDPRODFIN   IN PRODUTO.CDARVPROD%TYPE,
                            P_NRCOMPRA    IN COMPRA.NRCOMPRA%TYPE,
                            P_DTINI       IN DATE,
                            P_DTFIN       IN DATE) RETURN VARCHAR2 IS
        V_SQL VARCHAR2(32000);
    BEGIN
        V_SQL :=
            'SELECT FILIAL.CDREGIAO, COMPRA.CDCOMPRADOR, FORPRCOMPRA.CDFORNECED, PRODUTO.CDPRODUTO, '''' CDMARCA,'||
            '       NVL(PRODACOMPRAR.QTACOMPRAR, 0) QTACOMPRAR, NULL AS NRCOLEPRECO'||
            '  FROM PRODCOMPRA'||
            '  JOIN COMPRA ON PRODCOMPRA.NRCOMPRA = COMPRA.NRCOMPRA'||
            '  JOIN PRODUTO ON PRODCOMPRA.CDPRODUTO = PRODUTO.CDPRODUTO'||
            '  JOIN FORPRCOMPRA ON PRODCOMPRA.NRCOMPRA = FORPRCOMPRA.NRCOMPRA'||
            '  JOIN FILIAL ON PRODCOMPRA.CDFILSOLI = FILIAL.CDFILIAL'||
            '  LEFT JOIN (SELECT COMP.CDREGIAO, COMP.CDPRODUTO, ((COMP.QTDECOMP-NVL(JACOMP.QTDECOMP,0))/COMP.VRFATOCONV) QTACOMPRAR';

        IF NVL(P_FILIAL.IDFUNCAOFILI, K_O) = K_C OR NVL(P_FILIAL.IDFUNCAOFILI, K_O) = K_R THEN
            V_SQL := V_SQL || 
                '           FROM (SELECT FILIAL.CDREGIAO, ESTOQUE.CDPRODESTO, ESTOQUE.CDPRODUTO, ESTOQUE.VRFATOCONV,'||
                '                        SUM((ITEMSOLI.QTSOLIPROD*PRODUTO.VRFATOCONV)/ESTOQUE.VRFATOCONV) QTDECOMP';
        ELSE
            V_SQL := V_SQL || 
                '           FROM (SELECT FILIAL.CDREGIAO, PRODUTO.CDPRODESTO, PRODUTO.CDPRODUTO, PRODUTO.VRFATOCONV,'||
                '                        SUM(ITEMSOLI.QTSOLIPROD*PRODUTO.VRFATOCONV) QTDECOMP';
        END IF;

        V_SQL := V_SQL ||
            '                       FROM ITEMSOLI'|| 
            '                       JOIN PRODCOMPRA ON ITEMSOLI.CDFILSOLI = PRODCOMPRA.CDFILSOLI'||
            '                                      AND ITEMSOLI.CDFILLAN = PRODCOMPRA.CDFILLAN'||
            '                                      AND ITEMSOLI.NRSOLICMP = PRODCOMPRA.NRSOLICMP'||
            '                                      AND ITEMSOLI.DTPROGENTR = PRODCOMPRA.DTPROGENTR'||
            '                                      AND ITEMSOLI.CDPRODUTO = PRODCOMPRA.CDPRODUTO'||
            '                       JOIN PRODUTO ON PRODCOMPRA.CDPRODUTO = PRODUTO.CDPRODUTO'||
            '                       JOIN FILIAL ON PRODCOMPRA.CDFILSOLI = FILIAL.CDFILIAL';

        IF NVL(P_FILIAL.IDFUNCAOFILI, K_O) = K_C OR NVL(P_FILIAL.IDFUNCAOFILI, K_O) = K_R THEN
            V_SQL := V_SQL || 
                '                   JOIN PRODUTO ESTOQUE ON PRODUTO.CDPRODESTO = ESTOQUE.CDPRODUTO';
        END IF;

        V_SQL := V_SQL ||
            '                      WHERE ITEMSOLI.DTPROGENTR BETWEEN '''|| P_DTINI || ''' AND '''|| P_DTFIN ||''''||
            '                        AND ITEMSOLI.IDITMCONS = '''||K_N||''''||
            '                        AND NVL(ITEMSOLI.IDSOLIAPROV,'''||K_S||''') = '''||K_S||''''||
            '                        AND PRODCOMPRA.NRCOMPRA = '''||P_NRCOMPRA||'''';
                    
        IF P_CDPRODINI IS NOT NULL AND P_CDPRODFIN IS NOT NULL THEN
            V_SQL := V_SQL || 
                '                    AND PRODUTO.CDARVPROD BETWEEN '''|| P_CDPRODINI ||''' AND RPAD('''|| P_CDPRODFIN ||''', 20, '''|| K_Z || ''') ';
        END IF;

        IF P_CDREGIAO IS NOT NULL THEN 
            V_SQL := V_SQL || 
                '                    AND INSTR('''||P_CDREGIAO||''', FILIAL.CDREGIAO) > 0'; 
        END IF;

        IF NVL(P_FILIAL.IDFUNCAOFILI, K_O) = K_C OR NVL(P_FILIAL.IDFUNCAOFILI, K_O) = K_R THEN
            V_SQL := V_SQL || 
                '                  GROUP BY FILIAL.CDREGIAO, ESTOQUE.CDPRODESTO, ESTOQUE.CDPRODUTO, ESTOQUE.VRFATOCONV) COMP';
        ELSE
            V_SQL := V_SQL || 
                '                  GROUP BY FILIAL.CDREGIAO, PRODUTO.CDPRODESTO, PRODUTO.CDPRODUTO, PRODUTO.VRFATOCONV) COMP';
        END IF;

        V_SQL := V_SQL || 
            '               LEFT JOIN (SELECT FILIAL.CDREGIAO, PRODUTO.CDPRODESTO, SUM(ITEMAUTF.QTPROGENTAF*PRODUTO.VRFATOCONV) QTDECOMP'||
            '                            FROM ITEMAUTF'||
            '                            JOIN AUTOFORNE ON ITEMAUTF.CDFILDEST = AUTOFORNE.CDFILDEST'||
            '                                          AND ITEMAUTF.CDFILLANC = AUTOFORNE.CDFILLANC'||
            '                                          AND ITEMAUTF.NRAUTOFORN = AUTOFORNE.NRAUTOFORN'||
            '                            JOIN PRODUTO ON ITEMAUTF.CDPRODUTO = PRODUTO.CDPRODUTO'||
            '                            JOIN PRODCOMPRA ON ITEMAUTF.CDPRODUTO = PRODCOMPRA.CDPRODUTO'||
            '                                           AND ITEMAUTF.CDFILDEST = PRODCOMPRA.CDFILSOLI'||
            '                            JOIN FILIAL ON ITEMAUTF.CDFILDEST = FILIAL.CDFILIAL'||
            '                           WHERE ITEMAUTF.DTENTRITMSOL BETWEEN '''|| P_DTINI || ''' AND '''|| P_DTFIN ||''''||
            '                             AND AUTOFORNE.IDSITUATUAAF IS NULL'||
            '                             AND AUTOFORNE.IDAFFORALIM = '''||K_N||''''||
            '                             AND AUTOFORNE.IDAUTOFORNEX = '''||K_N||''''||
            '                             AND NVL(AUTOFORNE.IDBAIXAAF, '''||'0'||''') <> '''||'5'||'''';

        IF P_CDPRODINI IS NOT NULL AND P_CDPRODFIN IS NOT NULL THEN
            V_SQL := V_SQL || 
                '                         AND PRODUTO.CDARVPROD BETWEEN '''|| P_CDPRODINI ||''' AND RPAD('''|| P_CDPRODFIN ||''', 20, '''|| K_Z || ''') ';
        END IF;

        IF P_CDREGIAO IS NOT NULL THEN 
            V_SQL := V_SQL || 
                '                         AND INSTR('''||P_CDREGIAO||''', FILIAL.CDREGIAO) > 0'; 
        END IF;

        V_SQL := V_SQL ||
            '                           GROUP BY FILIAL.CDREGIAO, PRODUTO.CDPRODESTO) JACOMP'||
            '                 ON COMP.CDREGIAO = JACOMP.CDREGIAO'||
            '                AND COMP.CDPRODESTO = JACOMP.CDPRODESTO'||
            '              WHERE (COMP.QTDECOMP-NVL(JACOMP.QTDECOMP,0))/COMP.VRFATOCONV > 0) PRODACOMPRAR'||
            '         ON PRODCOMPRA.CDPRODUTO = PRODACOMPRAR.CDPRODUTO';

        IF NVL(P_FILIAL.IDFUNCAOFILI, K_O) = K_C THEN 
            V_SQL := V_SQL ||
                '   JOIN (SELECT PARAMPRODSUP.CDREGIAO, PARAMPRODSUP.CDPRODUTO'||
                '           FROM PARAMPRODSUP'||
                '           JOIN FILIAL ON PARAMPRODSUP.CDFILICTRL = FILIAL.CDFILIAL'||
                '          WHERE FILIAL.CDFILIAL = '''|| P_CDFILIPROC ||''''||
                '            AND PARAMPRODSUP.IDFILINEGCOR = '''|| K_S ||''')'||
                '     ON PRODACOMPRAR.CDPRODUTO = PARAMPRODSUP.CDPRODUTO'||
                '    AND PRODACOMPRAR.CDREGIAO = PARAMPRODSUP.CDREGIAO';
        END IF;

        IF NVL(P_FILIAL.IDFUNCAOFILI, K_O) = K_R THEN 
            V_SQL := V_SQL ||
                '   JOIN (SELECT PARAMPRODSUP.CDREGIAO, PARAMPRODSUP.CDPRODUTO'||
                '           FROM PARAMPRODSUP'||
                '           JOIN FILIAL ON PARAMPRODSUP.CDFILICTRL = FILIAL.CDFILIAL'||
                '          WHERE FILIAL.CDFILIAL = '''|| P_CDFILIPROC ||''''||
                '            AND PARAMPRODSUP.IDFILINEGREG = '''|| K_S ||''')'||
                '     ON PRODACOMPRAR.CDPRODUTO = PARAMPRODSUP.CDPRODUTO'||
                '    AND PRODACOMPRAR.CDREGIAO = PARAMPRODSUP.CDREGIAO';
        END IF;

        V_SQL := V_SQL ||
            '      WHERE COMPRA.NRCOMPRA = '''||P_NRCOMPRA||'''';

        IF P_CDPRODINI IS NOT NULL AND P_CDPRODFIN IS NOT NULL THEN
            V_SQL := V_SQL || 
                '    AND PRODUTO.CDARVPROD BETWEEN '''|| P_CDPRODINI ||''' AND RPAD('''|| P_CDPRODFIN ||''', 20, '''|| K_Z || ''') ';
        END IF;

        IF P_CDREGIAO IS NOT NULL THEN 
            V_SQL := V_SQL || 
                '    AND INSTR('''||P_CDREGIAO||''', FILIAL.CDREGIAO) > 0'; 
        END IF;

        IF P_CDCOMPRADOR IS NOT NULL THEN
            V_SQL := V_SQL ||  
                '    AND INSTR('''|| P_CDCOMPRADOR ||''', COMPRA.CDCOMPRADOR) > 0 ';
        END IF;

        IF P_CDFORNECED IS NOT NULL THEN
            V_SQL := V_SQL || 
                '    AND INSTR('''|| P_CDFORNECED ||''', FORPRCOMPRA.CDFORNECED) > 0 ';
        END IF;

        RETURN V_SQL;

    END MONTA_NRCOMPRA;
    
    PROCEDURE GETDATAPEDIDOCOLETA(P_CDFILIAL     IN FILIAL.CDFILIAL%TYPE,
                                  P_CDFILIPROC   IN FILIAL.CDFILIAL%TYPE,
                                  P_CDCOMPRADOR  IN VARCHAR2,
                                  P_CDPRODINI    IN VARCHAR2,
                                  P_CDPRODFIN    IN VARCHAR2,
                                  P_CDFORNECED   IN VARCHAR2,
                                  P_CDREGIAO     IN VARCHAR2,
                                  P_CDMARCA      IN VARCHAR2,
                                  P_DTINI        IN DATE,
                                  P_DTFIN        IN DATE,
                                  P_TIPOPEDIDO   IN VARCHAR2,
                                  P_NRCOLEPRECO  IN ITEMCOLE.NRCOLEPRECO%TYPE,
                                  P_DESCFORNCOT  IN VARCHAR2,
                                  P_NRCOMPRA     IN ITEMCOLE.NRCOLEPRECO%TYPE,
                                  P_CDLEILAO     IN PEDCOLETA.CDLEILAO%TYPE,
                                  P_NRSEQPRELIST IN ITEMCOLE.NRSEQPRELIST%TYPE,
                                  P_CDOPERLANC   IN OPERADOR.CDOPERADOR%TYPE,
                                  P_NRORG        IN FILIAL.NRORG%TYPE,
                                  P_NRPEDCOL     IN OUT PEDIDOCOLETA_TMP.NRPEDCOL%TYPE,
                                  P_ERROR       OUT VARCHAR2) IS
        
        TYPE CURTYPE IS REF CURSOR;
        C_PEDIDOS     CURTYPE;
        C_PARASUPRI   S_RECORD_PARASUPRI;
        C_FILIAL      S_RECORD_FILIAL;
        R_ITEMS       S_RECORD_PEDIDOCOLETA_TMP;
        V_NRPEDCOL    PEDIDOCOLETA_TMP.NRPEDCOL%TYPE;
        V_CDREGIAO    REGIAO.CDREGIAO%TYPE;
        V_CDOPERADOR  OPERADOR.CDOPERADOR%TYPE;
        V_CDFORNECED  FORNECEDOR.CDFORNECED%TYPE;
        V_CDPRODUTO   PRODUTO.CDPRODUTO%TYPE;
        V_CDMARCA     MARCA.CDMARCA%TYPE;
        V_NRCOLEPRECO ITEMCOLE.NRCOLEPRECO%TYPE;
        V_QTACOMPRAR  FLOAT;
        V_SQLPEDIDOS  VARCHAR2(32000);
        V_IDSISDOS    VARCHAR2(1);
        V_MARCA       VARCHAR2(4000);
        V_CDPRODINI   VARCHAR2(20);
        V_CDPRODFIN   VARCHAR2(20);
    BEGIN
        IF P_NRPEDCOL IS NULL THEN
            V_NRPEDCOL := SEQ_PEDCOLTMP_NRPEDCOL.NEXTVAL;
        ELSE
            V_NRPEDCOL := P_NRPEDCOL;
        END IF;
        
        IF P_CDMARCA = ' ' OR P_CDMARCA = 'T' THEN
            V_MARCA := NULL;
        ELSE
            V_MARCA := P_CDMARCA;
        END IF;
        
        IF P_CDPRODINI = '0' AND P_CDPRODFIN = 'ZZZZZZZZZZZZZZZZZZZZ' THEN
            V_CDPRODINI := NULL;
            V_CDPRODFIN := NULL;
        ELSE
            V_CDPRODINI := P_CDPRODINI;
            V_CDPRODFIN := P_CDPRODFIN;
        END IF;

        GET_PARASUPRI(P_CDFILIAL  => P_CDFILIAL,
                      P_PARASUPRI => C_PARASUPRI);

        GET_DADOSFILIAL(P_CDFILIAL => P_CDFILIPROC,
                        P_FILIAL   => C_FILIAL);

        IF P_NRCOMPRA IS NOT NULL THEN
            V_SQLPEDIDOS := MONTA_NRCOMPRA(P_PARASUPRI   => C_PARASUPRI,
                                           P_FILIAL      => C_FILIAL, 
                                           P_CDFILIPROC  => P_CDFILIPROC,
                                           P_CDFILIAL    => P_CDFILIAL,
                                           P_CDMARCA     => V_MARCA,
                                           P_CDCOMPRADOR => P_CDCOMPRADOR,
                                           P_CDFORNECED  => P_CDFORNECED,
                                           P_CDREGIAO    => P_CDREGIAO,
                                           P_CDPRODINI   => V_CDPRODINI,
                                           P_CDPRODFIN   => V_CDPRODFIN,
                                           P_NRCOMPRA    => P_NRCOMPRA,
                                           P_DTINI       => P_DTINI,
                                           P_DTFIN       => P_DTFIN);
        ELSIF P_NRSEQPRELIST IS NOT NULL THEN
            SELECT IDSISDOS
              INTO V_IDSISDOS
              FROM PARAMGERAL;
            IF V_IDSISDOS = '3' THEN
                V_SQLPEDIDOS := MONTA_LISTPREC_IDSISDOS_3(P_PARASUPRI    => C_PARASUPRI,
                                                          P_FILIAL       => C_FILIAL, 
                                                          P_CDFILIPROC   => P_CDFILIPROC,
                                                          P_CDFILIAL     => P_CDFILIAL,
                                                          P_CDMARCA      => V_MARCA,
                                                          P_CDCOMPRADOR  => P_CDCOMPRADOR,
                                                          P_CDFORNECED   => P_CDFORNECED,
                                                          P_CDREGIAO     => P_CDREGIAO,
                                                          P_CDPRODINI    => V_CDPRODINI,
                                                          P_CDPRODFIN    => V_CDPRODFIN,
                                                          P_NRSEQPRELIST => P_NRSEQPRELIST,
                                                          P_DTINI        => P_DTINI,
                                                          P_DTFIN        => P_DTFIN);
            ELSE
                V_SQLPEDIDOS := MONTA_LISTPREC_IDSISDOS_1(P_PARASUPRI    => C_PARASUPRI,
                                                          P_FILIAL       => C_FILIAL, 
                                                          P_CDFILIPROC   => P_CDFILIPROC,
                                                          P_CDFILIAL     => P_CDFILIAL,
                                                          P_CDMARCA      => V_MARCA,
                                                          P_CDCOMPRADOR  => P_CDCOMPRADOR,
                                                          P_CDFORNECED   => P_CDFORNECED,
                                                          P_CDREGIAO     => P_CDREGIAO,
                                                          P_CDPRODINI    => V_CDPRODINI,
                                                          P_CDPRODFIN    => V_CDPRODFIN,
                                                          P_NRSEQPRELIST => P_NRSEQPRELIST);
            END IF;
        ELSIF P_NRCOLEPRECO IS NOT NULL THEN
            V_SQLPEDIDOS := MONTA_COTACAO(P_PARASUPRI   => C_PARASUPRI,
                                          P_FILIAL      => C_FILIAL, 
                                          P_CDFILIPROC  => P_CDFILIPROC,
                                          P_CDFILIAL    => P_CDFILIAL,
                                          P_CDMARCA     => V_MARCA,
                                          P_CDCOMPRADOR => P_CDCOMPRADOR,
                                          P_CDFORNECED  => P_CDFORNECED,
                                          P_CDREGIAO    => P_CDREGIAO,
                                          P_CDPRODINI   => V_CDPRODINI,
                                          P_CDPRODFIN   => V_CDPRODFIN,
                                          P_NRCOLEPRECO => P_NRCOLEPRECO,
                                          P_DESCFORNCOT => P_DESCFORNCOT);
        ELSE
            V_SQLPEDIDOS := MONTA_TODOS_ACOMPRAR(P_PARASUPRI   => C_PARASUPRI,
                                                 P_FILIAL      => C_FILIAL,
                                                 P_CDFILIPROC  => P_CDFILIPROC,
                                                 P_CDFILIAL    => P_CDFILIAL,
                                                 P_CDMARCA     => V_MARCA,
                                                 P_CDCOMPRADOR => P_CDCOMPRADOR,
                                                 P_CDFORNECED  => P_CDFORNECED,
                                                 P_CDREGIAO    => P_CDREGIAO,
                                                 P_CDPRODINI   => V_CDPRODINI,
                                                 P_CDPRODFIN   => V_CDPRODFIN,
                                                 P_DTINI       => P_DTINI,
                                                 P_DTFIN       => P_DTFIN,
                                                 P_TIPOPEDIDO  => P_TIPOPEDIDO); 
        END IF;
        
        IF C_PARASUPRI.CDFILIAL IS NOT NULL AND C_FILIAL.CDFILIAL IS NOT NULL THEN
            OPEN C_PEDIDOS FOR V_SQLPEDIDOS;
            LOOP
                FETCH C_PEDIDOS INTO V_CDREGIAO, V_CDOPERADOR, V_CDFORNECED, V_CDPRODUTO, V_CDMARCA, V_QTACOMPRAR, V_NRCOLEPRECO;
                EXIT WHEN C_PEDIDOS%NOTFOUND;

                R_ITEMS.NRPEDCOL     := V_NRPEDCOL;
                R_ITEMS.CDFILIAL     := P_CDFILIAL;
                R_ITEMS.CDREGIAO     := V_CDREGIAO; 
                R_ITEMS.CDOPERADOR   := V_CDOPERADOR; 
                R_ITEMS.CDFORNECED   := RETIRA_CARACTER_ESPECIAL(V_CDFORNECED, 'S'); 
                R_ITEMS.CDPRODUTO    := V_CDPRODUTO; 
                R_ITEMS.CDMARCA      := V_CDMARCA; 
                R_ITEMS.CDMARCAPADR  := C_PARASUPRI.CDMARCA;
                R_ITEMS.QTACOMPRAR   := V_QTACOMPRAR;
                R_ITEMS.NRCOLEPRECO  := NVL(P_NRCOLEPRECO, V_NRCOLEPRECO);
                R_ITEMS.NRCOMPRA     := P_NRCOMPRA;
                R_ITEMS.NRSEQPRELIST := P_NRSEQPRELIST;
                R_ITEMS.CDLEILAO     := P_CDLEILAO;
                R_ITEMS.CDOPERLANC   := P_CDOPERLANC;
                R_ITEMS.DTPERIODOINI := P_DTINI;
                R_ITEMS.DTPERIODOFIM := P_DTFIN;
                R_ITEMS.CDPRODINI    := V_CDPRODINI;
                R_ITEMS.CDPRODFIN    := V_CDPRODFIN;
                R_ITEMS.NRORG        := P_NRORG;

                INSERT_PEDIDOCOLETATMP(P_ITEMS => R_ITEMS);
            END LOOP;
            CLOSE C_PEDIDOS;
            
            P_NRPEDCOL := V_NRPEDCOL;
        ELSIF C_PARASUPRI.CDFILIAL IS NULL THEN
            P_ERROR := 'PARASUPRI_NAO_CADASTRADO';
        ELSIF C_FILIAL.CDFILIAL IS NULL THEN
            P_ERROR := 'FILIAL_NAO_CADASTRADA';
        END IF;
    END GETDATAPEDIDOCOLETA;

    PROCEDURE SAVEPEDCOL_PREVCONS(P_CDFILIAL    IN VARCHAR2,
                                  P_CDPRODINI   IN VARCHAR2,
                                  P_CDPRODFIN   IN VARCHAR2,
                                  P_CDMARCA     IN VARCHAR2,
                                  P_CDCOMPRADOR IN VARCHAR2,
                                  P_CDREGIAO    IN VARCHAR2,
                                  P_CDFORNECED  IN VARCHAR2,
                                  P_DTINI       IN DATE,
                                  P_DTFIN       IN DATE,
                                  P_NRORG       IN FILIAL.NRORG%TYPE,
                                  P_NRPEDCOL    IN PEDIDOCOLETA_TMP.NRPEDCOL%TYPE DEFAULT NULL) IS
   
        TYPE CURTYPE IS REF CURSOR;
        C_PREVCONS   CURTYPE;
        C_ITEMS      CURTYPE;
        C_PARASUPRI  S_RECORD_PARASUPRI;
        C_FILIAL     S_RECORD_FILIAL;
        R_ITEMS      S_RECORD_PEDIDOCOLETA_TMP;
        V_PREVCONS   VARCHAR2(32000);
        V_ITEMS      VARCHAR2(32000);
        V_COUNTER    FLOAT;
        V_CDPRODUTO  PRODUTO.CDPRODUTO%TYPE;
        V_CDFILIAL   FILIAL.CDFILIAL%TYPE;
        V_QTPREVCONS PREVCONS.QTPREVCONS%TYPE;
        V_QTSOLIPROD ITEMSOLI.QTSOLIPROD%TYPE;
        V_CDMARCA    MARCA.CDMARCA%TYPE;
        V_CDREGIAO   REGIAO.CDREGIAO%TYPE;
        V_CDFORNECED FORNECEDOR.CDFORNECED%TYPE;
        V_CDOPERADOR OPERADOR.CDOPERADOR%TYPE;
    BEGIN
        IF P_CDFILIAL IS NULL THEN 
            V_PREVCONS := 'SELECT PREVCONS.CDPRODUTO, PREVCONS.CDFILIAL, SUM(PREVCONS.QTPREVCONS) QTPREVCONS'||
                          '  FROM PREVCONS'||
                          '  JOIN PRODUTO ON PREVCONS.CDPRODUTO = PRODUTO.CDPRODUTO'||
                          ' WHERE PRODUTO.CDARVPROD BETWEEN '''|| P_CDPRODINI || ''' AND RPAD('''|| P_CDPRODFIN ||''', 20, '''|| K_Z || ''') '||
                          '   AND PREVCONS.DTPREVCONS BETWEEN ''' || P_DTINI || ''' AND ''' || P_DTFIN || ''''||
                          '   AND NOT EXISTS (SELECT 1'||
                          '                     FROM TMP_PEDCOLETA' ||
                          '                    WHERE TMP_PEDCOLETA.CDPRODUTO = PREVCONS.CDPRODUTO)' ||
                          ' GROUP BY PREVCONS.CDPRODUTO, PREVCONS.CDFILIAL';
        ELSE
            V_PREVCONS := 'SELECT PREVCONS.CDPRODUTO, PREVCONS.CDFILIAL, SUM(PREVCONS.QTPREVCONS) QTPREVCONS'||
                          '  FROM PREVCONS'||
                          '  JOIN PRODUTO ON PREVCONS.CDPRODUTO = PRODUTO.CDPRODUTO'||
                          ' WHERE INSTR(''' || P_CDFILIAL || ''', PREVCONS.CDFILIAL) > 0'||
                          '   AND PRODUTO.CDARVPROD BETWEEN '''|| P_CDPRODINI || ''' AND RPAD('''|| P_CDPRODFIN ||''', 20, '''|| K_Z || ''') '||
                          '   AND PREVCONS.DTPREVCONS BETWEEN ''' || P_DTINI || ''' AND ''' || P_DTFIN || ''''||
                          '   AND NOT EXISTS (SELECT 1'||
                          '                     FROM TMP_PEDCOLETA' ||
                          '                    WHERE TMP_PEDCOLETA.CDPRODUTO = PREVCONS.CDPRODUTO)' ||
                          ' GROUP BY PREVCONS.CDPRODUTO, PREVCONS.CDFILIAL';
        END IF;

        OPEN C_PREVCONS FOR V_PREVCONS;
        LOOP
            FETCH C_PREVCONS INTO V_CDPRODUTO, V_CDFILIAL, V_QTPREVCONS;
            EXIT WHEN C_PREVCONS%NOTFOUND;
               
            V_COUNTER := 0;

            GET_DADOSFILIAL(P_CDFILIAL => V_CDFILIAL,
                            P_FILIAL   => C_FILIAL);

            GET_PARASUPRI(P_CDFILIAL  => NVL(C_FILIAL.CDFILCENTCMP, C_FILIAL.CDFILIAL),
                          P_PARASUPRI => C_PARASUPRI);

            IF C_PARASUPRI.CDFILIAL IS NULL THEN
              CONTINUE;
            END IF;

            SELECT NVL(SUM(QTSOLIPROD), 0) QTACOMPRAR
              INTO V_QTSOLIPROD
              FROM ITEMSOLI
             WHERE DTPROGENTR BETWEEN P_DTINI AND P_DTFIN
               AND CDPRODUTO = V_CDPRODUTO
               AND CDFILSOLI = V_CDFILIAL;

            IF V_QTSOLIPROD = 0 THEN
                V_QTSOLIPROD := V_QTPREVCONS;
            END IF;
            
            FOR C_ITEMS IN (SELECT ITEMPEDCOL.CDMARCA, ITEMPEDCOL.CDREGIAO, ITEMPEDCOL.CDFORNECED,
                                   PEDCOLETA.CDOPERADOR, ITEMPEDCOL.CDPRODUTO, MAX(PEDCOLETA.DTPEDCOLETA) DTPEDCOLETA
                              FROM PEDCOLETA 
                              JOIN ITEMPEDCOL ON PEDCOLETA.CDFILIAL    = ITEMPEDCOL.CDFILIAL
                                             AND PEDCOLETA.NRPEDCOLETA = ITEMPEDCOL.NRPEDCOLETA
                                             AND PEDCOLETA.CDREGIAO    = ITEMPEDCOL.CDREGIAO
                                             AND PEDCOLETA.CDFORNECED  = ITEMPEDCOL.CDFORNECED                                  
                             WHERE PEDCOLETA.CDFILIAL   = V_CDFILIAL
                               AND ITEMPEDCOL.CDPRODUTO = V_CDPRODUTO
                             GROUP BY ITEMPEDCOL.CDMARCA, ITEMPEDCOL.CDREGIAO, ITEMPEDCOL.CDFORNECED, 
                                      PEDCOLETA.CDOPERADOR, ITEMPEDCOL.CDPRODUTO)
            LOOP
                V_COUNTER := V_COUNTER + 1;

                R_ITEMS.NRPEDCOL    := P_NRPEDCOL; 
                R_ITEMS.CDREGIAO    := C_ITEMS.CDREGIAO; 
                R_ITEMS.CDOPERADOR  := C_ITEMS.CDOPERADOR; 
                R_ITEMS.CDFORNECED  := RETIRA_CARACTER_ESPECIAL(C_ITEMS.CDFORNECED, 'S'); 
                R_ITEMS.CDPRODUTO   := C_ITEMS.CDPRODUTO; 
                R_ITEMS.CDMARCA     := C_ITEMS.CDMARCA; 
                R_ITEMS.CDMARCAPADR := C_PARASUPRI.CDMARCA;
                R_ITEMS.QTACOMPRAR  := V_QTSOLIPROD;
                R_ITEMS.NRORG       := P_NRORG;

                INSERT_PEDIDOCOLETATMP(P_ITEMS => R_ITEMS);
            END LOOP;
            
            IF V_COUNTER = 0 THEN
                V_ITEMS := 'SELECT MARCA.CDMARCA, REGIAO.CDREGIAO, FORNECEDOR.CDFORNECED, OPERADOR.CDOPERADOR'||
                           '  FROM OPERADOR, REGIAO, PRODFORNCOMP'||
                           '  JOIN FORNECEDOR ON PRODFORNCOMP.CDFORNECED = FORNECEDOR.CDFORNECED'||
                           '  JOIN PRODUTO ON PRODFORNCOMP.CDPRODCOMPL = PRODUTO.CDPRODUTO'||				
                           '  LEFT JOIN (SELECT MA.CDMARCA, MP.CDPRMARCOMPL,'||
                           '                    NVL(MP.CDMARCA, '''|| C_PARASUPRI.CDMARCA ||''') CDMARCACOMPL'|| 
                           '               FROM MARCA MA'||
                           '               LEFT JOIN MARCPRODCOMP MP ON MA.CDMARCA = MP.CDMARCA'||
                           '              WHERE MA.IDMARCAATIVA = ''' || K_A ||'''';

                V_ITEMS := V_ITEMS || 
                           '      AND NVL(MP.CDMARCA, '''|| C_PARASUPRI.CDFILIAL ||''') IS NOT NULL) MARCA'||
                           '       ON PRODFORNCOMP.CDPRODCOMPL = MARCA.CDPRMARCOMPL'||
                           ' WHERE PRODUTO.CDPRODUTO = '''|| V_CDPRODUTO ||'''';

                IF P_CDCOMPRADOR IS NOT NULL THEN
                    V_ITEMS := V_ITEMS || ' AND INSTR('''|| P_CDCOMPRADOR ||''', OPERADOR.CDOPERADOR) > 0 ';
                END IF;
                IF P_CDREGIAO IS NOT NULL THEN
                    V_ITEMS := V_ITEMS || ' AND INSTR('''|| P_CDREGIAO ||''', REGIAO.CDREGIAO) > 0 ';
                END IF;
                IF P_CDFORNECED IS NOT NULL THEN
                    V_ITEMS := V_ITEMS || ' AND INSTR('''|| P_CDFORNECED ||''', FORNECEDOR.CDFORNECED) > 0 ';
                END IF;

                V_ITEMS := V_ITEMS || 
                    ' AND EXISTS (SELECT 1'||
                    '               FROM PRODCOMP, PRODUTO PR'||
                    '              WHERE PRODCOMP.CDPRODUTO = PR.CDPRODUTO'||
                    '                AND PRODUTO.CDARVPROD LIKE PR.CDARVPROD || '''|| K_CP ||''''||
                    '                AND OPERADOR.CDOPERADOR = PRODCOMP.CDOPERADOR) ';

                V_ITEMS := V_ITEMS || 
                    ' AND NOT EXISTS (SELECT 1'|| 
                    '                   FROM REFOREG'||
                    '                  WHERE REFOREG.CDREGIAO = REGIAO.CDREGIAO'||
                    '               AND REFOREG.CDFORNECED = FORNECEDOR.CDFORNECED)';
                
                V_ITEMS := V_ITEMS || 
                    ' AND NOT EXISTS (SELECT 1'||
                    '                   FROM REFORFIL'|| 
                    '                  WHERE REFORFIL.CDFORNECED = FORNECEDOR.CDFORNECED'||
                    '                    AND REFORFIL.CDFILIAL = '''|| V_CDFILIAL|| ''''||
                    '                    AND REFORFIL.CDPERIENTR IS NULL)';

                V_ITEMS := V_ITEMS || 
                    ' AND EXISTS (SELECT 1'||
                    '               FROM MARCPRODCOMP'||
                    '              WHERE MARCPRODCOMP.CDMARCA = MARCA.CDMARCA'||
                    '                AND MARCPRODCOMP.CDPRMARCOMPL = PRODUTO.CDPRODUTO)';

                V_ITEMS := V_ITEMS || 
                    ' AND EXISTS (SELECT 1'||
                    '               FROM MARCFORNPEDCOL'||
                    '              WHERE MARCFORNPEDCOL.CDMARCA = MARCA.CDMARCA'||
                    '                AND MARCFORNPEDCOL.CDFORNECED = FORNECEDOR.CDFORNECED)';

                IF C_PARASUPRI.IDULTIDTVALQ = K_D THEN
                    V_ITEMS := V_ITEMS ||
                        ' AND NOT EXISTS (SELECT 1'|| 
                        '                   FROM QUALIFICACAO QF'||
                        '                  WHERE FORNECEDOR.CDQUALIF = QF.CDQUALIF'||
                        '                    AND FORNECEDOR.IDFORNAUTO = '''|| K_N ||''''||
                        '                    AND (QF.IDPERCOTCMP = 2 OR'||  
                        '                         TO_DATE(SYSDATE) > FORNECEDOR.DTVALQUALIF))'||
                        ' AND NOT EXISTS (SELECT 1'||
                        '                   FROM QFOMARPROD QF'||
                        '                  WHERE QF.CDPRODUTO = PRODUTO.CDPRODUTO'||
                        '                    AND QF.CDMARCA = MARCA.CDMARCACOMPL'|| 
                        '                    AND ((QF.IDAPRMARPRO = '''|| K_N ||''' AND'||
                        '                          QF.IDAUTMARPRO = '''|| K_N ||''') OR (QF.IDAPRMARPRO = '''|| K_S ||''' AND'||
                        '                                                                TO_DATE(SYSDATE) > QF.DTVALAPROVA)))'||
                        ' AND NOT EXISTS (SELECT 1'||
                        '                   FROM QFOPRODFORN'|| 
                        '                  WHERE QFOPRODFORN.CDPRODUTO = PRODFORNCOMP.CDPRODCOMPL'||
                        '                    AND QFOPRODFORN.CDFORNECED= PRODFORNCOMP.CDFORNECED'||
                        '                    AND ((QFOPRODFORN.IDFORNAPROV = '''|| K_N ||''' AND'||
                        '                          QFOPRODFORN.IDFORNAUTOR = '''|| K_N ||''') OR'||
                        '                         (QFOPRODFORN.IDFORNAPROV = '''|| K_S ||''' AND'|| 
                        '                          TO_DATE(SYSDATE) > QFOPRODFORN.DTVALPRFORN))) ';
                END IF;
        
                IF C_PARASUPRI.IDULTIDTVALQ = K_M THEN
                    V_ITEMS := V_ITEMS ||
                        ' AND NOT EXISTS (SELECT 1'|| 
                        '                   FROM QUALIFICACAO QF'||
                        '                  WHERE FORNECEDOR.CDQUALIF = QF.CDQUALIF'||
                        '                    AND FORNECEDOR.IDFORNAUTO = '''|| K_N ||''''||
                        '                    AND (QF.IDPERCOTCMP = 2 OR'||  
                        '                         TO_DATE(SYSDATE) > LAST_DAY(FORNECEDOR.DTVALQUALIF)))'||
                        ' AND NOT EXISTS (SELECT 1'||
                        '                   FROM QFOMARPROD QF'||
                        '                  WHERE QF.CDPRODUTO = PRODUTO.CDPRODUTO'||
                        '                    AND QF.CDMARCA = MARCA.CDMARCACOMPL'|| 
                        '                    AND ((QF.IDAPRMARPRO = '''|| K_N ||''' AND'||
                        '                          QF.IDAUTMARPRO = '''|| K_N ||''') OR (QF.IDAPRMARPRO = '''|| K_S ||''' AND'|| 
                        '                                                                TO_DATE(SYSDATE) > LAST_DAY(QF.DTVALAPROVA))))'||
                        ' AND NOT EXISTS (SELECT 1'||
                        '                   FROM QFOPRODFORN'|| 
                        '                  WHERE QFOPRODFORN.CDPRODUTO = PRODFORNCOMP.CDPRODCOMPL'||
                        '                    AND QFOPRODFORN.CDFORNECED = PRODFORNCOMP.CDFORNECED'||
                        '                    AND ((QFOPRODFORN.IDFORNAPROV = '''|| K_N ||''' AND'||
                        '                          QFOPRODFORN.IDFORNAUTOR = '''|| K_N ||''') OR'||
                        '                         (QFOPRODFORN.IDFORNAPROV = '''|| K_S ||''' AND'|| 
                        '                          TO_DATE(SYSDATE) > LAST_DAY(QFOPRODFORN.DTVALPRFORN)))) ';
                END IF;

                IF NVL(C_PARASUPRI.IDMARSEMQUA, K_N) = K_S THEN
                    V_ITEMS := V_ITEMS ||
                        ' AND EXISTS (SELECT 1'||
                        '               FROM QFOMARPROD'||
                        '              WHERE QFOMARPROD.CDPRODUTO = PRODUTO.CDPRODUTO'||
                        '                AND QFOMARPROD.CDMARCA = MARCA.CDMARCACOMPL) ';
                END IF;

                OPEN C_ITEMS FOR V_ITEMS;
                LOOP
                    FETCH C_ITEMS INTO V_CDMARCA, V_CDREGIAO, V_CDFORNECED, V_CDOPERADOR;
                    EXIT WHEN C_ITEMS%NOTFOUND;

                    R_ITEMS.NRPEDCOL    := P_NRPEDCOL; 
                    R_ITEMS.CDREGIAO    := V_CDREGIAO; 
                    R_ITEMS.CDOPERADOR  := V_CDOPERADOR; 
                    R_ITEMS.CDFORNECED  := RETIRA_CARACTER_ESPECIAL(V_CDFORNECED, 'S'); 
                    R_ITEMS.CDPRODUTO   := V_CDPRODUTO; 
                    R_ITEMS.CDMARCA     := V_CDMARCA; 
                    R_ITEMS.CDMARCAPADR := C_PARASUPRI.CDMARCA;
                    R_ITEMS.QTACOMPRAR  := V_QTPREVCONS;
                    R_ITEMS.NRORG       := P_NRORG;

                    INSERT_PEDIDOCOLETATMP(P_ITEMS => R_ITEMS);
                END LOOP;
                CLOSE C_ITEMS;
            END IF;
        END LOOP;
        CLOSE C_PREVCONS;
    END SAVEPEDCOL_PREVCONS;

    PROCEDURE SAVEPEDIDOCOLETA(P_NRPEDCOL       IN PEDIDOCOLETA_TMP.NRPEDCOL%TYPE, 
                               P_CDFILIAL       IN FILIAL.CDFILIAL%TYPE,
                               P_CDFILIPROC     IN FILIAL.CDFILIAL%TYPE,
                               P_QTMESES        IN FLOAT,
                               P_DTEXPIRAPEDCOL IN DATE,
                               P_IDPEDGERALREG  IN VARCHAR2,
                               P_IDPEDGERALFORN IN VARCHAR2,
                               P_IDCURVAABCAF   IN VARCHAR2,
                               P_IDCONSFORNAF   IN VARCHAR2,
                               P_ERROR         OUT VARCHAR2) IS
        V_DTINIABCAF      DATE;
        V_DTFINABCAF      DATE;
        V_IDSISDOS        PARAMGERAL.IDSISDOS%TYPE;
        V_NRPEDCOLETA     VARCHAR2(20);
        V_NRPEDIDOCOL     VARCHAR2(20);
        V_COMPFORN        VARCHAR2(200) := ' ';
        V_COMPCONSREG     VARCHAR2(200) := ' ';
        V_COMPCONSFORN    VARCHAR2(200) := ' ';
        V_COMPCONSCOMP    VARCHAR2(200) := ' ';
        V_COMPCOTACAO     VARCHAR2(200) := ' ';
        V_QTPRODPEDCOL    ITEMPEDCOL.QTPRODPEDCOL%TYPE;
        V_VRPRECOANT      FLOAT;
    BEGIN
        BEGIN
            SELECT TO_DATE('01/'||TO_CHAR(ADD_MONTHS(SYSDATE, - NVL(P_QTMESES, 1)), 'MM/YYYY'), 'DD/MM/YYYY') AS DTINICIAL,
                   LAST_DAY(ADD_MONTHS(SYSDATE, -1)) AS DTFINAL,
                   NVL(IDSISDOS, '1') IDSISDOS
              INTO V_DTINIABCAF, V_DTFINABCAF, V_IDSISDOS
              FROM PARAMGERAL;
        EXCEPTION
            WHEN NO_DATA_FOUND THEN
                P_ERROR := 'PARAMGERAL_NOTFOUND';
        END;

        FOR C_ITEMS IN (SELECT PEDIDOCOLETA_TMP.NRPEDCOL, PEDIDOCOLETA_TMP.CDREGIAO, PEDIDOCOLETA_TMP.CDOPERADOR, 
                               PEDIDOCOLETA_TMP.CDFORNECED, PRODUTO.CDPRODUTO, PRODUTO.CDPRODESTO, PEDIDOCOLETA_TMP.CDMARCA, 
                               PEDIDOCOLETA_TMP.CDMARCAPADR, PEDIDOCOLETA_TMP.QTACOMPRAR, PEDIDOCOLETA_TMP.NRCOLEPRECO,
                               PEDIDOCOLETA_TMP.NRSEQPRELIST, PEDIDOCOLETA_TMP.DTPERIODOINI, PEDIDOCOLETA_TMP.DTPERIODOFIM,
                               PEDIDOCOLETA_TMP.CDOPERLANC, PEDIDOCOLETA_TMP.CDLEILAO,
                               DECODE(FORNECEDOR.IDTPDESCFORN, K_C, NVL(FORNECEDOR.VRPEDESCFORN, 0), 0) VRPEDESCFORN
                          FROM PEDIDOCOLETA_TMP
                          JOIN PRODUTO ON PEDIDOCOLETA_TMP.CDPRODUTO = PRODUTO.CDPRODUTO
                          JOIN FORNECEDOR ON PEDIDOCOLETA_TMP.CDFORNECED = FORNECEDOR.CDFORNECED
                         WHERE PEDIDOCOLETA_TMP.NRPEDCOL = P_NRPEDCOL
                         ORDER BY CDOPERADOR, NRCOLEPRECO, CDFORNECED, CDREGIAO, NMPRODUTO)
        LOOP
            IF V_COMPFORN <> C_ITEMS.CDREGIAO||C_ITEMS.CDOPERADOR||C_ITEMS.CDFORNECED THEN 
                NOVO_CODIGO_SC('PEDCOLETA'||P_CDFILIAL||C_ITEMS.CDFORNECED||C_ITEMS.CDREGIAO, V_NRPEDCOLETA, 1);
                V_NRPEDCOLETA := SUBSTR(V_NRPEDCOLETA, 11, 10);
                
                IF ((P_IDPEDGERALREG  <> 'S' AND V_COMPCONSREG  <> C_ITEMS.CDOPERADOR||C_ITEMS.CDREGIAO AND (C_ITEMS.NRSEQPRELIST IS NULL OR V_IDSISDOS <> '3')) OR
                    (P_IDPEDGERALFORN <> 'S' AND V_COMPCONSFORN <> C_ITEMS.CDOPERADOR||C_ITEMS.CDFORNECED AND (C_ITEMS.NRSEQPRELIST IS NULL OR V_IDSISDOS <> '3')) OR
                    (C_ITEMS.NRSEQPRELIST IS NOT NULL AND V_COMPCOTACAO  <> C_ITEMS.CDOPERADOR||C_ITEMS.NRCOLEPRECO AND V_IDSISDOS = '3') OR 
                    (V_COMPCONSCOMP   <> C_ITEMS.CDOPERADOR))
                THEN
                    NOVO_CODIGO_SC('PEDCOLGERAL'||P_CDFILIAL, V_NRPEDIDOCOL, 1);
                    V_NRPEDIDOCOL := SUBSTR(V_NRPEDIDOCOL, 11, 10);

                    INSERT INTO PEDCOLGERAL (CDFILIAL, 
                                             NRPEDIDOCOL, 
                                             DTPEDCOLGERAL, 
                                             DTINIPERGERAL, 
                                             DTFINPERGERAL, 
                                             IDPEDCOLCONS, 
                                             CDOPERADOR, 
                                             CDOPERLANC, 
                                             DTEXPIRAPEDCOL)
                                     VALUES (P_CDFILIAL, 
                                             V_NRPEDIDOCOL,
                                             SYSDATE,
                                             C_ITEMS.DTPERIODOINI,
                                             C_ITEMS.DTPERIODOFIM,
                                             'S',
                                             C_ITEMS.CDOPERADOR,
                                             C_ITEMS.CDOPERLANC,
                                             P_DTEXPIRAPEDCOL);
                END IF;
                
                INSERT INTO PEDCOLETA (CDFILIAL, 
                                       NRPEDCOLETA, 
                                       CDFORNECED, 
                                       DTPEDCOLETA, 
                                       CDOPERADOR, 
                                       DTINIPERCOT, 
                                       DTFINPERCOT, 
                                       CDREGIAO, 
                                       CDLEILAO, 
                                       NRPEDIDOCOL)
                               VALUES (P_CDFILIAL, 
                                       V_NRPEDCOLETA, 
                                       C_ITEMS.CDFORNECED, 
                                       SYSDATE, 
                                       C_ITEMS.CDOPERADOR, 
                                       C_ITEMS.DTPERIODOINI, 
                                       C_ITEMS.DTPERIODOFIM, 
                                       C_ITEMS.CDREGIAO, 
                                       C_ITEMS.CDLEILAO, 
                                       V_NRPEDIDOCOL);
            
                INSERT INTO FORNEPEDCOL (CDFILIAL, NRPEDIDOCOL, CDFORNECED)
                SELECT P_CDFILIAL, V_NRPEDIDOCOL, C_ITEMS.CDFORNECED
                  FROM DUAL
                  WHERE NOT EXISTS (SELECT 1
                                      FROM FORNEPEDCOL F
                                     WHERE F.CDFILIAL    = P_CDFILIAL
                                       AND F.NRPEDIDOCOL = V_NRPEDIDOCOL
                                       AND F.CDFORNECED  = C_ITEMS.CDFORNECED);

                INSERT INTO REGIAOPEDCOL (CDFILIAL, NRPEDIDOCOL, CDREGIAO)
                SELECT P_CDFILIAL, V_NRPEDIDOCOL, C_ITEMS.CDREGIAO
                  FROM DUAL
                 WHERE NOT EXISTS (SELECT 1
                                     FROM REGIAOPEDCOL R
                                    WHERE R.CDFILIAL    = P_CDFILIAL
                                      AND R.NRPEDIDOCOL = V_NRPEDIDOCOL
                                      AND R.CDREGIAO    = C_ITEMS.CDREGIAO);
            END IF;
        
            IF V_IDSISDOS = '3' THEN
                IF P_IDCURVAABCAF = 'S' THEN
                    BEGIN
                        SELECT SUM(ITEMAUTF.QTPROGENTAF * PRODUTO.VRFATOCONV)
                          INTO V_QTPRODPEDCOL
                          FROM AUTOFORNE
                          JOIN ITEMAUTF ON AUTOFORNE.CDFILDEST  = ITEMAUTF.CDFILDEST
                                       AND AUTOFORNE.CDFILLANC  = ITEMAUTF.CDFILLANC
                                       AND AUTOFORNE.NRAUTOFORN = ITEMAUTF.NRAUTOFORN
                          JOIN FILIAL   ON AUTOFORNE.CDFILDEST  = FILIAL.CDFILIAL
                          JOIN PRODUTO  ON ITEMAUTF.CDPRODUTO   = PRODUTO.CDPRODUTO                      
                         WHERE AUTOFORNE.IDSITUATUAAF IS NULL
                           AND AUTOFORNE.IDAFFORALIM = K_N
                           AND NVL(AUTOFORNE.IDBAIXAAF,'0') <> '6'
                           AND FILIAL.CDREGIAO    = C_ITEMS.CDREGIAO
                           AND PRODUTO.CDPRODESTO = C_ITEMS.CDPRODESTO
                           AND ITEMAUTF.DTPROGENTAF BETWEEN V_DTINIABCAF AND V_DTFINABCAF;
                    EXCEPTION
                        WHEN NO_DATA_FOUND THEN
                            V_QTPRODPEDCOL := 0;
                    END;
                ELSE
                    V_QTPRODPEDCOL := C_ITEMS.QTACOMPRAR;
                END IF;
            ELSE
                IF(P_QTMESES IS NOT NULL) THEN
                    IF (P_IDCONSFORNAF = 'S') THEN
                        BEGIN
                            SELECT SUM(NVL(AF.QTDEACOMPRAR, 0))
                              INTO V_QTPRODPEDCOL
                              FROM (SELECT (SUM(ITEMAUTF.QTEFETENTRAF * PRODUTO.VRFATOCONV) / P_QTMESES) QTDEACOMPRAR
                                      FROM ITEMAUTF 
                                      JOIN AUTOFORNE    ON AUTOFORNE.CDFILDEST     = ITEMAUTF.CDFILDEST
                                                       AND AUTOFORNE.CDFILLANC     = ITEMAUTF.CDFILLANC
                                                       AND AUTOFORNE.NRAUTOFORN    = ITEMAUTF.NRAUTOFORN
                                      JOIN RELACPRODOL  ON ITEMAUTF.CDPRODUTO      = RELACPRODOL.CDPRODARVOL
                                      JOIN PRODUTO      ON RELACPRODOL.CDPRARVORIG = PRODUTO.CDPRODUTO
                                                       AND RELACPRODOL.CDMARCA     = C_ITEMS.CDMARCA
                                      JOIN FILIAL       ON AUTOFORNE.CDFILDEST     = FILIAL.CDFILIAL
                                     WHERE AUTOFORNE.IDSITUATUAAF IS NULL
                                       AND NVL(AUTOFORNE.IDBAIXAAF,'0') <> '6'
                                       AND ITEMAUTF.IDBAIXITMAF IN ('1', '2')
                                       AND AUTOFORNE.IDAFFORALIM = K_N
                                       AND FILIAL.CDREGIAO       = C_ITEMS.CDREGIAO
                                       AND PRODUTO.CDPRODUTO     = C_ITEMS.CDPRODUTO 
                                       AND ITEMAUTF.DTPROGENTAF BETWEEN V_DTINIABCAF AND V_DTFINABCAF
                                       AND AUTOFORNE.CDFORNECED  = NVL(C_ITEMS.CDFORNECED, AUTOFORNE.CDFORNECED)
                                     UNION
                                    SELECT (SUM((ITEMAUTF.QTEFETENTRAF * PRODESTO.VRFATOCONV)/PRODUTO.VRFATOCONV) / P_QTMESES) QTDEACOMPRAR
                                      FROM ITEMAUTF 
                                      JOIN AUTOFORNE        ON AUTOFORNE.CDFILDEST  = ITEMAUTF.CDFILDEST
                                                           AND AUTOFORNE.CDFILLANC  = ITEMAUTF.CDFILLANC
                                                           AND AUTOFORNE.NRAUTOFORN = ITEMAUTF.NRAUTOFORN
                                      JOIN PRODUTO PRODESTO ON ITEMAUTF.CDPRODUTO   = PRODESTO.CDPRODUTO
                                      JOIN PRODUTO          ON ITEMAUTF.CDPRODUTO   = PRODUTO.CDPRODUTO
                                      JOIN FILIAL           ON AUTOFORNE.CDFILDEST  = FILIAL.CDFILIAL
                                     WHERE AUTOFORNE.IDSITUATUAAF IS NULL
                                       AND NVL(AUTOFORNE.IDBAIXAAF,'0') <> '6'
                                       AND ITEMAUTF.IDBAIXITMAF IN ('1', '2')
                                       AND AUTOFORNE.IDAFFORALIM = K_N
                                       AND FILIAL.CDREGIAO       = C_ITEMS.CDREGIAO
                                       AND PRODESTO.CDPRODESTO   = C_ITEMS.CDPRODESTO
                                       AND PRODUTO.CDPRODUTO     = C_ITEMS.CDPRODUTO
                                       AND ITEMAUTF.DTPROGENTAF BETWEEN V_DTINIABCAF AND V_DTFINABCAF
                                       AND AUTOFORNE.CDFORNECED  = NVL(C_ITEMS.CDFORNECED, AUTOFORNE.CDFORNECED)) AF;
                        EXCEPTION
                            WHEN NO_DATA_FOUND THEN
                                V_QTPRODPEDCOL := 0;
                        END;
                    ELSE
                        BEGIN
                            SELECT SUM(NVL(AF.QTDEACOMPRAR, 0))
                              INTO V_QTPRODPEDCOL
                              FROM (SELECT (SUM(ITEMAUTF.QTEFETENTRAF * PRODUTO.VRFATOCONV) / P_QTMESES) QTDEACOMPRAR
                                      FROM ITEMAUTF 
                                      JOIN AUTOFORNE    ON AUTOFORNE.CDFILDEST     = ITEMAUTF.CDFILDEST
                                                       AND AUTOFORNE.CDFILLANC     = ITEMAUTF.CDFILLANC
                                                       AND AUTOFORNE.NRAUTOFORN    = ITEMAUTF.NRAUTOFORN
                                      JOIN RELACPRODOL  ON ITEMAUTF.CDPRODUTO      = RELACPRODOL.CDPRODARVOL
                                      JOIN PRODUTO      ON RELACPRODOL.CDPRARVORIG = PRODUTO.CDPRODUTO
                                                       AND RELACPRODOL.CDMARCA     = C_ITEMS.CDMARCA
                                      JOIN FILIAL       ON AUTOFORNE.CDFILDEST     = FILIAL.CDFILIAL
                                     WHERE AUTOFORNE.IDSITUATUAAF IS NULL
                                       AND NVL(AUTOFORNE.IDBAIXAAF,'0') <> '6'
                                       AND ITEMAUTF.IDBAIXITMAF IN ('1', '2')
                                       AND AUTOFORNE.IDAFFORALIM = K_N
                                       AND FILIAL.CDREGIAO       = C_ITEMS.CDREGIAO
                                       AND PRODUTO.CDPRODUTO     = C_ITEMS.CDPRODUTO 
                                       AND ITEMAUTF.DTPROGENTAF BETWEEN V_DTINIABCAF AND V_DTFINABCAF 
                                     UNION
                                    SELECT (SUM((ITEMAUTF.QTEFETENTRAF * PRODESTO.VRFATOCONV)/PRODUTO.VRFATOCONV) / P_QTMESES) QTDEACOMPRAR
                                      FROM ITEMAUTF 
                                      JOIN AUTOFORNE        ON AUTOFORNE.CDFILDEST  = ITEMAUTF.CDFILDEST
                                                           AND AUTOFORNE.CDFILLANC  = ITEMAUTF.CDFILLANC
                                                           AND AUTOFORNE.NRAUTOFORN = ITEMAUTF.NRAUTOFORN
                                      JOIN PRODUTO PRODESTO ON ITEMAUTF.CDPRODUTO   = PRODESTO.CDPRODUTO
                                      JOIN PRODUTO          ON ITEMAUTF.CDPRODUTO   = PRODUTO.CDPRODUTO
                                      JOIN FILIAL           ON AUTOFORNE.CDFILDEST  = FILIAL.CDFILIAL
                                     WHERE AUTOFORNE.IDSITUATUAAF IS NULL
                                       AND NVL(AUTOFORNE.IDBAIXAAF,'0') <> '6'
                                       AND ITEMAUTF.IDBAIXITMAF IN ('1', '2')
                                       AND AUTOFORNE.IDAFFORALIM = K_N
                                       AND FILIAL.CDREGIAO       = C_ITEMS.CDREGIAO
                                      AND PRODESTO.CDPRODESTO   = C_ITEMS.CDPRODESTO
                                       AND PRODUTO.CDPRODUTO     = C_ITEMS.CDPRODUTO
                                       AND ITEMAUTF.DTPROGENTAF BETWEEN V_DTINIABCAF AND V_DTFINABCAF) AF;
                        EXCEPTION
                            WHEN NO_DATA_FOUND THEN
                                V_QTPRODPEDCOL := 0;
                        END;
                    END IF;
                ELSE
                    V_QTPRODPEDCOL := C_ITEMS.QTACOMPRAR;
                END IF;
            END IF;
        
            IF C_ITEMS.NRCOLEPRECO IS NOT NULL THEN 
                BEGIN
                    SELECT MIN(I.VRPRECUNIITM)
                      INTO V_VRPRECOANT
                      FROM ITEMCOLE I
                     WHERE I.CDFILIAL    = P_CDFILIAL
                       AND I.NRCOLEPRECO = C_ITEMS.NRCOLEPRECO
                       AND I.CDMARCA     = C_ITEMS.CDMARCA
                       AND I.CDREGIAO    = C_ITEMS.CDREGIAO
                       AND I.CDFORNECED  = C_ITEMS.CDFORNECED
                       AND I.CDPRODUTO   = C_ITEMS.CDPRODUTO
                       AND I.VRPRECUNIITM > 0;
                EXCEPTION
                    WHEN NO_DATA_FOUND THEN
                        V_VRPRECOANT := 0;
                END;
            ELSE
                IF C_ITEMS.NRSEQPRELIST IS NOT NULL THEN
                    IF V_IDSISDOS = '3' THEN
                        BEGIN
                            SELECT MIN(I.VRPRECUNIITM)
                              INTO V_VRPRECOANT
                              FROM ITEMCOLE I
                             WHERE I.CDFILIAL     = P_CDFILIAL
                               AND I.NRSEQPRELIST = C_ITEMS.NRSEQPRELIST
                               AND I.CDMARCA      = C_ITEMS.CDMARCA
                               AND I.CDREGIAO     = C_ITEMS.CDREGIAO
                               AND I.CDFORNECED   = C_ITEMS.CDFORNECED
                               AND I.CDPRODUTO    = C_ITEMS.CDPRODUTO
                               AND I.VRPRECUNIITM > 0;
                        EXCEPTION
                            WHEN NO_DATA_FOUND THEN
                                V_VRPRECOANT := 0;
                        END;
                    ELSE
                        BEGIN
                            SELECT MIN(I.VRPRECUNIITM)
                              INTO V_VRPRECOANT
                              FROM ITEMCOLE I
                             WHERE I.CDFILIAL     = P_CDFILIAL
                               AND I.NRSEQPRELIST = C_ITEMS.NRSEQPRELIST
                               AND I.CDMARCA      = C_ITEMS.CDMARCA
                               AND I.CDREGIAO     = C_ITEMS.CDREGIAO
                               AND I.CDFORNECED   = C_ITEMS.CDFORNECED
                               AND I.CDPRODUTO    = C_ITEMS.CDPRODUTO
                               AND I.VRPRECUNIITM > 0;
                        EXCEPTION
                            WHEN NO_DATA_FOUND THEN
                                V_VRPRECOANT := 0;
                        END;
                    END IF;
                ELSE
                    BEGIN
                        SELECT VRPRECOITM
                          INTO V_VRPRECOANT
                          FROM ULTIMACOTACAO
                         WHERE CDREGIAO   = C_ITEMS.CDREGIAO
                           AND CDFORNECED = C_ITEMS.CDFORNECED
                           AND CDPRODUTO  = C_ITEMS.CDPRODUTO
                           AND CDMARCA    = C_ITEMS.CDMARCA;
                    EXCEPTION
                        WHEN NO_DATA_FOUND THEN
                           FOR C_ITEM IN (SELECT ROWID 
                                            FROM (SELECT ROWID
                                                    FROM ITEMCOLE 
                                                   WHERE CDREGIAO   = C_ITEMS.CDREGIAO
                                                     AND CDFORNECED = C_ITEMS.CDFORNECED
                                                     AND CDPRODUTO  = C_ITEMS.CDPRODUTO
                                                     AND CDMARCA    = C_ITEMS.CDMARCA
                                                     AND DTINIVALITM > TRUNC(SYSDATE, 'YYYY') - INTERVAL '5' YEAR
                                                   ORDER BY NRCOLEPRECO DESC)
                                           WHERE ROWNUM = 1)

                           LOOP
                              UPDATE ITEMCOLE SET VRPRECUNIITM = VRPRECUNIITM
                               WHERE ROWID = C_ITEM.ROWID;
                           END LOOP;

                           BEGIN
                              SELECT VRPRECOITM
                                INTO V_VRPRECOANT
                                FROM ULTIMACOTACAO
                               WHERE CDREGIAO   = C_ITEMS.CDREGIAO
                                 AND CDFORNECED = C_ITEMS.CDFORNECED
                                 AND CDPRODUTO  = C_ITEMS.CDPRODUTO
                                 AND CDMARCA    = C_ITEMS.CDMARCA;
                           EXCEPTION
                              WHEN NO_DATA_FOUND THEN
                                 V_VRPRECOANT := 0;
                           END;
                    END;
                END IF;
            END IF;

            INSERT INTO ITEMPEDCOL (CDFILIAL, 
                                    CDFORNECED, 
                                    NRPEDCOLETA, 
                                    CDREGIAO, 
                                    CDPRODUTO, 
                                    CDMARCA, 
                                    QTPRODPEDCOL, 
                                    IDSELELEILAO,
                                    VRANTITPEDCOL, 
                                    VRPERDESPEDCOL)
            SELECT P_CDFILIAL,
                   C_ITEMS.CDFORNECED,
                   V_NRPEDCOLETA,
                   C_ITEMS.CDREGIAO,
                   C_ITEMS.CDPRODUTO,
                   C_ITEMS.CDMARCA,
                   V_QTPRODPEDCOL,
                   'N',
                   V_VRPRECOANT,
                   C_ITEMS.VRPEDESCFORN
              FROM DUAL
             WHERE NOT EXISTS (SELECT 1
                                 FROM ITEMPEDCOL I
                                WHERE I.CDFILIAL    = P_CDFILIAL
                                  AND I.CDFORNECED  = C_ITEMS.CDFORNECED
                                  AND I.NRPEDCOLETA = V_NRPEDCOLETA
                                  AND I.CDREGIAO    = C_ITEMS.CDREGIAO
                                  AND I.CDPRODUTO   = C_ITEMS.CDPRODUTO
                                  AND I.CDMARCA     = C_ITEMS.CDMARCA);
            
            INSERT INTO PRMARCPEDCOL (CDFILIAL, NRPEDIDOCOL, CDPRODUTO, CDMARCA, VRULTPRECPRMARC)
            SELECT P_CDFILIAL, V_NRPEDIDOCOL, C_ITEMS.CDPRODUTO, C_ITEMS.CDMARCA, V_VRPRECOANT
              FROM DUAL
             WHERE NOT EXISTS (SELECT 1
                                 FROM PRMARCPEDCOL P
                                WHERE P.CDFILIAL    = P_CDFILIAL
                                  AND P.NRPEDIDOCOL = V_NRPEDIDOCOL
                                  AND P.CDPRODUTO   = C_ITEMS.CDPRODUTO
                                  AND P.CDMARCA     = C_ITEMS.CDMARCA);

            V_COMPCONSCOMP := C_ITEMS.CDOPERADOR;
            V_COMPCONSREG  := C_ITEMS.CDOPERADOR || C_ITEMS.CDREGIAO;
            V_COMPCONSFORN := C_ITEMS.CDOPERADOR || C_ITEMS.CDFORNECED;
            V_COMPCOTACAO  := C_ITEMS.CDOPERADOR || C_ITEMS.NRCOLEPRECO;
            V_COMPFORN     := C_ITEMS.CDREGIAO   || C_ITEMS.CDOPERADOR || C_ITEMS.CDFORNECED;
        END LOOP;

        DELETE FROM PEDIDOCOLETA_TMP
         WHERE NRPEDCOL = P_NRPEDCOL;
    END SAVEPEDIDOCOLETA;

    FUNCTION GETPEDCOLETA(P_IDPEDCOL         IN VARCHAR2,
                          P_NRCOTACAO        IN VARCHAR2,
                          P_COMPRADOR        IN VARCHAR2,
                          P_MARCA            IN VARCHAR2,
                          P_FORNECED         IN VARCHAR2,
                          P_REGIAO           IN VARCHAR2,
                          P_PRODINI          IN VARCHAR2,
                          P_PRODFIN          IN VARCHAR2,
                          P_CDFILIAL         IN VARCHAR2,
                          P_CDFILIPROC       IN VARCHAR2,
                          P_NRCOMPRA         IN VARCHAR2,
                          P_CDLEILAO         IN VARCHAR2,
                          P_NRSEQPRELIST     IN VARCHAR2,
                          P_CDOPERLANC       IN VARCHAR2,
                          P_DESCFORNECEDOR   IN VARCHAR2,
                          P_LISTFORNECEDOR   IN VARCHAR2,
                          P_QTMESES          IN VARCHAR2,
                          P_DTINI            IN DATE,
                          P_DTFIN            IN DATE,
                          P_DTEXPIRAPEDCOL   IN DATE,
                          P_BOPEDEMAIL       IN VARCHAR2,
                          P_IDPEDGERALREG    IN VARCHAR2,
                          P_IDPEDGERALFORN   IN VARCHAR2,
                          P_IDCURVAABCAF     IN VARCHAR2,
                          P_IDENVMERCADUM    IN VARCHAR2,
                          P_BOACRESITEM      IN VARCHAR2,
                          P_IDCONSFORNAF     IN VARCHAR2,
                          P_NRORG         VARCHAR2 DEFAULT '1') RETURN GETPEDCOLETA_TABLE PIPELINED IS
        OUT_RECORD GETPEDCOLETA_TYPE := GETPEDCOLETA_TYPE(NULL, NULL, NULL, NULL, NULL, NULL, NULL,
                                                          NULL, NULL, NULL, NULL, NULL, NULL, NULL,
                                                          NULL, NULL, NULL, NULL, NULL, NULL);

        V_SQL          VARCHAR2(32000);
        V_SQLPEDIDOS   VARCHAR2(32000);

        TYPE CURTYPE IS REF CURSOR;
        C_PEDIDOS      CURTYPE;
        C_PARASUPRI    S_RECORD_PARASUPRI;
        C_FILIAL       S_RECORD_FILIAL;
        V_IDSISDOS     PARAMGERAL.IDSISDOS%TYPE;
        
        V_MARCA        VARCHAR2(4000);
        V_FORNECEDOR   VARCHAR2(4000);
        V_REGIAO       VARCHAR2(4000);
        V_TIPOPEDIDO   VARCHAR2(10);   

        V_CDREGIAO     REGIAO.CDREGIAO%TYPE;
        V_NMREGIAO     REGIAO.NMREGIAO%TYPE; 
        V_CDOPERADOR   OPERADOR.CDOPERADOR%TYPE;
        V_NMOPERADOR   OPERADOR.NMOPERADOR%TYPE;
        V_CDFORNECED   FORNECEDOR.CDFORNECED%TYPE;
        V_NRINSJURFORN FORNECEDOR.NRINSJURFORN%TYPE;
        V_IDTPIJURFORN FORNECEDOR.IDTPIJURFORN%TYPE;
        V_NMRAZSOCFORN FORNECEDOR.NMRAZSOCFORN%TYPE;
        V_NMFANTFORN   FORNECEDOR.NMFANTFORN%TYPE;
        V_IDTPFRETFORN FORNECEDOR.IDTPFRETFORN%TYPE;
        V_CDPRODUTO    PRODUTO.CDPRODUTO%TYPE;
        V_NMPRODUTO    PRODUTO.NMPRODUTO%TYPE;
        V_SGUNIDADE    PRODUTO.SGUNIDADE%TYPE;
        V_CDPRODESTO   PRODUTO.CDPRODESTO%TYPE;
        V_CDARVPROD    PRODUTO.CDARVPROD%TYPE;
        V_CDMARCA      MARCA.CDMARCA%TYPE;
        V_NMMARCA      MARCA.NMMARCA%TYPE; 
        V_QTACOMPRAR   FLOAT; 
        V_NRCOMPRA     VARCHAR2(10);
        V_CDPRODINI    VARCHAR2(20);
        V_CDPRODFIN    VARCHAR2(20);
    BEGIN
        GET_PARASUPRI(P_CDFILIAL  => P_CDFILIAL,
                      P_PARASUPRI => C_PARASUPRI);

        GET_DADOSFILIAL(P_CDFILIAL => P_CDFILIPROC,
                        P_FILIAL   => C_FILIAL);

        IF P_MARCA = 'T' OR P_MARCA = ' ' THEN
            V_MARCA := '';
        ELSE
            V_MARCA := P_MARCA;
        END IF;
        
        IF P_PRODINI = '0' AND P_PRODFIN = 'ZZZZZZZZZZZZZZZZZZZZ' THEN
            V_CDPRODINI := NULL;
            V_CDPRODFIN := NULL;
        ELSE
            V_CDPRODINI := P_PRODINI;
            V_CDPRODFIN := P_PRODFIN;
        END IF;

        IF P_FORNECED = 'T' OR P_FORNECED = ' ' THEN
            V_FORNECEDOR := '';
        ELSE
            V_FORNECEDOR := P_FORNECED;
        END IF;

        IF P_REGIAO = 'T' OR P_REGIAO = ' ' THEN
            V_REGIAO := '';
        ELSE
            V_REGIAO := P_REGIAO;
        END IF;

        IF P_NRCOMPRA IS NOT NULL THEN
            V_SQLPEDIDOS := MONTA_NRCOMPRA(P_PARASUPRI   => C_PARASUPRI,
                                           P_FILIAL      => C_FILIAL, 
                                           P_CDFILIPROC  => P_CDFILIPROC,
                                           P_CDFILIAL    => P_CDFILIAL,
                                           P_CDMARCA     => V_MARCA,
                                           P_CDCOMPRADOR => P_COMPRADOR,
                                           P_CDFORNECED  => V_FORNECEDOR,
                                           P_CDREGIAO    => V_REGIAO,
                                           P_CDPRODINI   => V_CDPRODINI,
                                           P_CDPRODFIN   => V_CDPRODFIN,
                                           P_NRCOMPRA    => P_NRCOMPRA,
                                           P_DTINI       => P_DTINI,
                                           P_DTFIN       => P_DTFIN);
        ELSIF P_NRSEQPRELIST IS NOT NULL THEN
            SELECT IDSISDOS
              INTO V_IDSISDOS
              FROM PARAMGERAL;
            IF V_IDSISDOS = '3' THEN
                V_SQLPEDIDOS := MONTA_LISTPREC_IDSISDOS_3(P_PARASUPRI    => C_PARASUPRI,
                                                          P_FILIAL       => C_FILIAL, 
                                                          P_CDFILIPROC   => P_CDFILIPROC,
                                                          P_CDFILIAL     => P_CDFILIAL,
                                                          P_CDMARCA      => V_MARCA,
                                                          P_CDCOMPRADOR  => P_COMPRADOR,
                                                          P_CDFORNECED   => V_FORNECEDOR,
                                                          P_CDREGIAO     => V_REGIAO,
                                                          P_CDPRODINI    => V_CDPRODINI,
                                                          P_CDPRODFIN    => V_CDPRODFIN,
                                                          P_NRSEQPRELIST => P_NRSEQPRELIST,
                                                          P_DTINI        => P_DTINI,
                                                          P_DTFIN        => P_DTFIN);
            ELSE
                V_SQLPEDIDOS := MONTA_LISTPREC_IDSISDOS_1(P_PARASUPRI    => C_PARASUPRI,
                                                          P_FILIAL       => C_FILIAL, 
                                                          P_CDFILIPROC   => P_CDFILIPROC,
                                                          P_CDFILIAL     => P_CDFILIAL,
                                                          P_CDMARCA      => V_MARCA,
                                                          P_CDCOMPRADOR  => P_COMPRADOR,
                                                          P_CDFORNECED   => V_FORNECEDOR,
                                                          P_CDREGIAO     => V_REGIAO,
                                                          P_CDPRODINI    => V_CDPRODINI,
                                                          P_CDPRODFIN    => V_CDPRODFIN,
                                                          P_NRSEQPRELIST => P_NRSEQPRELIST);
            END IF;
        ELSIF P_NRCOTACAO IS NOT NULL THEN
            V_SQLPEDIDOS := MONTA_COTACAO(P_PARASUPRI   => C_PARASUPRI,
                                          P_FILIAL      => C_FILIAL, 
                                          P_CDFILIPROC  => P_CDFILIPROC,
                                          P_CDFILIAL    => P_CDFILIAL,
                                          P_CDMARCA     => V_MARCA,
                                          P_CDCOMPRADOR => P_COMPRADOR,
                                          P_CDFORNECED  => V_FORNECEDOR,
                                          P_CDREGIAO    => V_REGIAO,
                                          P_CDPRODINI   => V_CDPRODINI,
                                          P_CDPRODFIN   => V_CDPRODFIN,
                                          P_NRCOLEPRECO => P_NRCOTACAO,
                                          P_DESCFORNCOT => P_DESCFORNECEDOR);
        ELSE
            IF P_IDPEDCOL = '0' THEN
                V_TIPOPEDIDO := 'TODOS';
            ELSE 
                V_TIPOPEDIDO := 'COMPRAR';
            END IF;

            V_SQLPEDIDOS := MONTA_TODOS_ACOMPRAR(P_PARASUPRI   => C_PARASUPRI,
                                                 P_FILIAL      => C_FILIAL,
                                                 P_CDFILIPROC  => P_CDFILIPROC,
                                                 P_CDFILIAL    => P_CDFILIAL,
                                                 P_CDMARCA     => V_MARCA,
                                                 P_CDCOMPRADOR => P_COMPRADOR,
                                                 P_CDFORNECED  => V_FORNECEDOR,
                                                 P_CDREGIAO    => V_REGIAO,
                                                 P_CDPRODINI   => V_CDPRODINI,
                                                 P_CDPRODFIN   => V_CDPRODFIN,
                                                 P_DTINI       => P_DTINI,
                                                 P_DTFIN       => P_DTFIN,
                                                 P_TIPOPEDIDO  => V_TIPOPEDIDO); 
        END IF;
        
        IF C_PARASUPRI.CDFILIAL IS NOT NULL AND C_FILIAL.CDFILIAL IS NOT NULL THEN
            V_SQL := 'SELECT REGIAO.CDREGIAO, REGIAO.NMREGIAO, OPERADOR.CDOPERADOR, OPERADOR.NMOPERADOR,'||
                     '       FORNECEDOR.CDFORNECED, FORNECEDOR.NRINSJURFORN, FORNECEDOR.IDTPIJURFORN,'||
                     '       FORNECEDOR.NMRAZSOCFORN, FORNECEDOR.NMFANTFORN, FORNECEDOR.IDTPFRETFORN,'||
                     '       PRODUTO.CDPRODUTO, PRODUTO.NMPRODUTO, PRODUTO.SGUNIDADE, PRODUTO.CDPRODESTO, PRODUTO.CDARVPROD,'||
                     '       MARCA.CDMARCA, MARCA.NMMARCA, PEDIDO.QTACOMPRAR, PEDIDO.NRCOLEPRECO'||
                     '  FROM ( '|| V_SQLPEDIDOS ||' ) PEDIDO INNER JOIN REGIAO ON PEDIDO.CDREGIAO = REGIAO.CDREGIAO'||
                     '                                       INNER JOIN OPERADOR ON PEDIDO.CDOPERADOR = OPERADOR.CDOPERADOR'||
                     '                                       INNER JOIN FORNECEDOR ON PEDIDO.CDFORNECED = FORNECEDOR.CDFORNECED'||
                     '                                       INNER JOIN PRODUTO ON PEDIDO.CDPRODUTO = PRODUTO.CDPRODUTO'||
                     '                                       INNER JOIN MARCA ON PEDIDO.CDMARCA = MARCA.CDMARCA';
            OPEN C_PEDIDOS FOR V_SQL;
            LOOP
                FETCH C_PEDIDOS INTO V_CDREGIAO, V_NMREGIAO, V_CDOPERADOR, V_NMOPERADOR, V_CDFORNECED,
                                     V_NRINSJURFORN, V_IDTPIJURFORN, V_NMRAZSOCFORN, V_NMFANTFORN,
                                     V_IDTPFRETFORN, V_CDPRODUTO, V_NMPRODUTO, V_SGUNIDADE, V_CDPRODESTO,
                                     V_CDARVPROD, V_CDMARCA, V_NMMARCA, V_QTACOMPRAR, V_NRCOMPRA;
                EXIT WHEN C_PEDIDOS%NOTFOUND;
                    
                OUT_RECORD.CDREGIAO := V_CDREGIAO; 
                OUT_RECORD.NMREGIAO := V_NMREGIAO; 
                OUT_RECORD.CDOPERADOR := V_CDOPERADOR; 
                OUT_RECORD.NMOPERADOR := V_NMOPERADOR; 
                OUT_RECORD.CDFORNECED := V_CDFORNECED;
                OUT_RECORD.NRINSJURFORN := V_NRINSJURFORN;
                OUT_RECORD.IDTPIJURFORN := V_IDTPIJURFORN; 
                OUT_RECORD.NMRAZSOCFORN := V_NMRAZSOCFORN; 
                OUT_RECORD.NMFANTFORN := V_NMFANTFORN;   
                OUT_RECORD.IDTPFRETFORN := V_IDTPFRETFORN;
                OUT_RECORD.CDPRODUTO := V_CDPRODUTO;    
                OUT_RECORD.NMPRODUTO := V_NMPRODUTO;    
                OUT_RECORD.SGUNIDADE := V_SGUNIDADE;    
                OUT_RECORD.CDPRODESTO := V_CDPRODESTO;    
                OUT_RECORD.CDARVPROD := V_CDARVPROD;    
                OUT_RECORD.CDMARCA := V_CDMARCA;      
                OUT_RECORD.NMMARCA := V_NMMARCA;      
                OUT_RECORD.QTACOMPRAR := V_QTACOMPRAR;   
                OUT_RECORD.NRCOMPRA := V_NRCOMPRA;
                OUT_RECORD.CDMARCAPADR := C_PARASUPRI.CDMARCA;
                PIPE ROW (OUT_RECORD);

            END LOOP;
            CLOSE C_PEDIDOS;
        END IF;
    END GETPEDCOLETA;  
END PEDIDO_COLETA;
/