DROP TYPE PRODNACOMP_TABLE
/

DROP TYPE PRODNACOMP_TYPE
/

CREATE TYPE PRODNACOMP_TYPE AS
OBJECT (CDREGIAO             VARCHAR2(03),
        NMREGIAO             VARCHAR2(30),
        CDOPERADOR           VARCHAR2(12),
        NMOPERADOR           VARCHAR2(40),
        CDFILIAL             VARCHAR2(04),
        NMFILIAL             VARCHAR2(30),
        DTPROGENTR           DATE,
        CDPRODESTO           VARCHAR2(10),
        CDARVPROD            VARCHAR2(20),
        NMPRODUTO            VARCHAR2(50),
        QTACOMPRAR           FLOAT,
        SGUNIDADE            VARCHAR2(10),
        DATAINI              DATE,
        DATAFIN              DATE,
        IDAFINCONS           VARCHAR2(01),
        IDPARTFILI           VARCHAR2(01),
        IDQUALIFMARCA        VARCHAR2(01),
        IDPRODNCOMP          VARCHAR2(01),
        IDREFORFIL           VARCHAR2(01),
        IDQUALIFFORN         VARCHAR2(01),
        IDPRODCMPFILI        VARCHAR2(01),
        IDCOTACAO            VARCHAR2(01),
        IDREFOREG            VARCHAR2(01),
        IDQFOPRODFORN        VARCHAR2(01),
        SISTEMA              VARCHAR2(03),
        ATENDIDA             VARCHAR2(01),
        IDPRODPREF           VARCHAR2(01),
        IDSTATCOT            VARCHAR2(01),
        IDSEMQTDEDISP        VARCHAR2(01),
        IDFUNCAOFILI         VARCHAR2(01),
        IDOPERADOROL         VARCHAR2(01),
        NRCOMPRA             VARCHAR2(10),
        DSPRODPREF           VARCHAR2(65),
        DSIDCDTIPPART        VARCHAR2(100),
        DSPARTFILIMARCA      VARCHAR2(1000),
        DSPARTIFILINRINSFORN VARCHAR2(20),
        DSPARTIFILINMFORN    VARCHAR2(1000),
        DSIDFORN             VARCHAR2(01),
        LISTA_NRSOLICMP      VARCHAR2(2000),
        IDRELACPRODOL        VARCHAR2(01),
        IDACORDO             VARCHAR2(01),
        IDPRCMPATIVO         VARCHAR2(01),
        CDMARCA              VARCHAR2(05),
        NMMARCA              VARCHAR2(20),
        IDITMCONS            VARCHAR2(01));
/

CREATE TYPE PRODNACOMP_TABLE AS
TABLE OF PRODNACOMP_TYPE
/

CREATE OR REPLACE FUNCTION CONSULTA_PRODNACOMP
(P_CDREGIAO      IN VARCHAR2,
 P_DATAINI       IN ITEMSOLI.DTPROGENTR%TYPE,
 P_DATAFIN       IN ITEMSOLI.DTPROGENTR%TYPE,
 P_PRODINI       IN PRODUTO.CDARVPROD%TYPE,
 P_PRODFIN       IN PRODUTO.CDARVPROD%TYPE,
 P_CDOPERADOR    IN VARCHAR2,
 P_SISTEMA       IN VARCHAR2,
 P_INDEXREL      IN VARCHAR2,                /*Exibe Particularidade '4'=Sim e '0'=Nao*/
 P_CDFILIAL      IN VARCHAR2,
 P_CDFILIPROC    IN FILIAL.CDFILIAL%TYPE,
 P_CDGRUPFILI    IN VARCHAR2,
 P_RELCOMPRA     IN FILIAL.IDFUNCAOFILI%TYPE,/*Exibe Observacao da Compra 'S'=Sim ou 'N'=Nao*/
 P_RELESPECIFICO IN FILIAL.IDFUNCAOFILI%TYPE DEFAULT NULL,
 P_RELSOLIEXTRA  IN FILIAL.IDFUNCAOFILI%TYPE,/*Solicitacao Extra 'S'=Sim ou 'N'=Ambas ou '2'=Nao*/
 P_CONSIDERACOMP IN VARCHAR2 DEFAULT 'S',    /*Quebrar Pagina por Comprador 'S'=Sim ou 'N'= Nao*/
 P_VD_IDITMCONS  IN VARCHAR2 DEFAULT NULL)   /*Trata exibicao de item ja consolidado*/
 RETURN PRODNACOMP_TABLE PIPELINED
IS
  V_CONSIDERACOMP        VARCHAR2(01);
  V_CDFILCENTCMP         VARCHAR2(04);
  V_IDUTISTATCOT         PARASUPRI.IDUTISTATCOT%TYPE;     /* Utiliza status de cotacao de preco            */
  V_IDUTILCONSSOLIOL     PARASUPRI.IDUTILCONSSOLIOL%TYPE; /* Utiliza consolidacao de solicitacao de compras para o OL            */
  V_IDUTLPRARVOLCMP      PARASUPRI.IDUTLPRARVOLCMP%TYPE;  /* Utiliza produto de compra na arvore do OL             */
  V_IDUTLMARPREFOL       PARASUPRI.IDUTLMARPREFOL%TYPE;   /* Utiliza Marca Preferencial no Lancamento de Pedidos OL              */
  V_IDUTLPRCMPATIVO      PARASUPRI.IDUTLPRCMPATIVO%TYPE;  /* Desconsidera embalagem utilizada para compra na geracao da AF do OL */
  V_IDUTQTDISPGERAL      PARASUPRI.IDUTQTDISPGERAL%TYPE;  /* Utiliza quantidade disponivel do fornecedor */
  V_IDAPUREFESOLEXT      PARASUPRI.IDAPUREFESOLEXT%TYPE;  /*Permite apuracao de solicitacao com status extra*/
  V_CDNVPRODUTO          VARCHAR2(01);
  V_IDEXTRA              VARCHAR2(01);
  V_IDENTIFICADOR_TMP    VARCHAR2(01);
  V_CDFILIAL             FILIAL.CDFILIAL%TYPE;
  V_DTENTRITMSOL         DATE;
  V_CDPRODESTO           PRODUTO.CDPRODESTO%TYPE;
  V_QTDECOMP             FLOAT;
  V_CDREGIAO             FILIAL.CDREGIAO%TYPE;
  V_NMREGIAO             REGIAO.NMREGIAO%TYPE;
  V_IDFUNCAOFILI         FILIAL.IDFUNCAOFILI%TYPE;
  V_CDOPERADOR           OPERADOR.CDOPERADOR%TYPE;
  V_NMOPERADOR           OPERADOR.NMOPERADOR%TYPE;
  V_NMFILIAL             FILIAL.NMFILIAL%TYPE;
  V_DTPROGENTR           ITEMSOLI.DTPROGENTR%TYPE;
  V_CDARVPROD            PRODUTO.CDARVPROD%TYPE;
  V_NMPRODUTO            PRODUTO.NMPRODUTO%TYPE;
  V_QTACOMPRAR           ITEMSOLI.QTSOLIPROD%TYPE;
  V_QTDESOLI             ITEMSOLI.QTSOLIPROD%TYPE;
  V_SGUNIDADE            PRODUTO.SGUNIDADE%TYPE;
  V_DATAINI              ITEMSOLI.DTPROGENTR%TYPE;
  V_DATAFIN              ITEMSOLI.DTPROGENTR%TYPE;
  V_IDAFINCONS           VARCHAR2(01);
  V_IDPARTFILI           VARCHAR2(01);
  V_IDQUALIFMARCA        VARCHAR2(01);
  V_IDPRODNCOMP          VARCHAR2(01);
  V_IDREFORFIL           VARCHAR2(01);
  V_IDQUALIFFORN         VARCHAR2(01);
  V_IDPRODCMPFILI        VARCHAR2(01);
  V_IDCOTACAO            VARCHAR2(01);
  V_IDREFOREG            VARCHAR2(01);
  V_IDQFOPRODFORN        VARCHAR2(01);
  V_SISTEMA              VARCHAR2(03);
  V_ATENDIDA             VARCHAR2(01);
  V_IDPRODPREF           VARCHAR2(01);
  V_IDSTATCOT            VARCHAR2(01);
  V_IDSEMQTDEDISP        VARCHAR2(01);
  V_IDOPERADOROL         VARCHAR2(01);
  V_NRCOMPRA             VARCHAR2(10);
  V_DSPRODPREF           VARCHAR2(65);
  V_DSIDCDTIPPART        VARCHAR2(100);
  V_DSPARTFILIMARCA      VARCHAR2(1000);
  V_DSPARTIFILINRINSFORN VARCHAR2(20);
  V_DSPARTIFILINMFORN    VARCHAR2(1000);
  V_DSIDFORN             VARCHAR2(01);
  V_LISTA_NRSOLICMP      VARCHAR2(2000);
  V_EXIST                VARCHAR2(01);
  V_IDACORDOPART         VARCHAR2(01);
  V_STSTATUS             VARCHAR2(07);
  V_ERRO                 VARCHAR2(01);
  V_E_IDAPRMARPRO        VARCHAR2(01);
  V_COUNTTEMP            NUMBER;
  V_NMMARCA              VARCHAR2(20);
  V_NRINSJURFORN         VARCHAR2(20);
  V_NMFANTFORN           VARCHAR2(40);
  V_CDARVPRODTMP         PRODUTO.CDARVPROD%TYPE;
  V_NMPRODUTOTMP         PRODUTO.NMPRODUTO%TYPE;
  V_IDUTQTDISPFORN       FORNECEDOR.IDUTQTDISPFORN%TYPE;
  V_PRODSOLI_CDFILSOLI   ITEMSOLI.CDFILSOLI%TYPE;
  V_PRODSOLI_DTPROGENTR  ITEMSOLI.DTPROGENTR%TYPE;
  V_PRODSOLI_CDPRODUTOX  ITEMSOLI.CDPRODUTO%TYPE;
  V_PRODSOLI_QTDECOMP    ITEMSOLI.QTSOLIPROD%TYPE;
  V_PRODSOLI_NRCOMPRA    PRODCOMPRA.NRCOMPRA%TYPE;
  V_AUX_CDREGIAO         FILIAL.CDREGIAO%TYPE;
  V_AUX_NMREGIAO         REGIAO.NMREGIAO%TYPE;
  V_AUX_IDFUNCAOFILI     FILIAL.IDFUNCAOFILI%TYPE;
  V_AUX_CDOPERADOR       OPERADOR.CDOPERADOR%TYPE;
  V_AUX_NMOPERADOR       OPERADOR.NMOPERADOR%TYPE;
  V_AUX_NMFILIAL         FILIAL.NMFILIAL%TYPE;
  V_AUX_CDARVPROD        PRODUTO.CDARVPROD%TYPE;
  V_AUX_NMPRODUTO        PRODUTO.NMPRODUTO%TYPE;
  V_AUX_SGUNIDADE        PRODUTO.SGUNIDADE%TYPE;
  V_RELACPRL             VARCHAR2(01);
  V_IDACORD              VARCHAR2(01);
  V_IDPRCMPATIVO         PRODUTO.IDPRCMPATIVO%TYPE;
  V_IDEMBALAGEMUTIL      VARCHAR2(01);
  V_PRODSOLI_CDMARCA     MARCA.CDMARCA%TYPE;
  V_CDMARCA              MARCA.CDMARCA%TYPE;
  V_PRODSOLI_IDITMCONS   VARCHAR2(01);
  C_ITEMCOLE_CDPRODUTO   ITEMCOLE.CDPRODUTO%TYPE;
  C_ITEMCOLE_CDMARCA     ITEMCOLE.CDMARCA%TYPE;
  C_ITEMCOLE_CDARVPROD   PRODUTO.CDARVPROD%TYPE;
  C_ITEMCOLE_CDFORNECED  ITEMCOLE.CDFORNECED%TYPE;
  C_ITEMCOLE_IDNQTDEDISP VARCHAR2(01);
  C_ITEMCOLE_IDMONTLIS   COLETAPR.IDDISMONTLIS%TYPE;
  C_ITEMCOLE_NRCOLEPRECO COLETAPR.NRCOLEPRECO%TYPE;
  C_ITEMCOLE_CDREGIAO    ITEMCOLE.CDREGIAO%TYPE;
  C_ITEMCOLE_CDOPERADOR  COLETAPR.CDOPERADOR%TYPE;
  TYPE CURTYPE   IS REF CURSOR;
  C_PRODSOLI     CURTYPE;
  C_AUX          CURTYPE;
  C_ITEMCOLE     CURTYPE;
OUT_RECORD PRODNACOMP_TYPE := PRODNACOMP_TYPE (NULL, NULL, NULL, NULL,
                                               NULL, NULL, NULL, NULL,
                                               NULL, NULL, NULL, NULL,
                                               NULL, NULL, NULL, NULL,
                                               NULL, NULL, NULL, NULL,
                                               NULL, NULL, NULL, NULL,
                                               NULL, NULL, NULL, NULL,
                                               NULL, NULL, NULL, NULL,
                                               NULL, NULL, NULL, NULL,
                                               NULL, NULL, NULL, NULL,
                                               NULL, NULL, NULL, NULL,
                                               NULL);
BEGIN
   IF P_CDOPERADOR = 'T' THEN
      V_CONSIDERACOMP := 'N';
   END IF;
      SELECT NVL(MAX(F.CDFILCENTCMP), MAX(F.CDFILIAL))
        INTO V_CDFILCENTCMP
        FROM FILIAL F
       WHERE F.CDFILIAL = P_CDFILIPROC;
   SELECT NVL(MAX(IDUTISTATCOT), 'C'), NVL(MAX(IDUTILCONSSOLIOL), 'N'),
          NVL(MAX(IDUTLPRARVOLCMP), 'N'), NVL(MAX(IDUTQTDISPGERAL), 'N'),
          NVL(MAX(IDUTLMARPREFOL), 'N'), NVL(MAX(IDUTLPRCMPATIVO), 'N'),
          NVL(MAX(IDAPUREFESOLEXT), 'N')
     INTO V_IDUTISTATCOT, V_IDUTILCONSSOLIOL,
          V_IDUTLPRARVOLCMP, V_IDUTQTDISPGERAL,
          V_IDUTLMARPREFOL, V_IDUTLPRCMPATIVO,
          V_IDAPUREFESOLEXT
     FROM PARASUPRI P
    WHERE P.CDFILIAL = V_CDFILCENTCMP;

   SELECT NVL(MAX(CDNVPRODUTO), '')
     INTO V_CDNVPRODUTO
     FROM PRODUTO;

   V_IDEXTRA := P_RELSOLIEXTRA;
   
   FOR C_LISTA IN (SELECT F.CDFILIAL, F.CDFILCENTCMP, NVL(F.IDFUNCAOFILI, 'X') IDFUNCAOFILI
                     FROM (SELECT REGEXP_SUBSTR(P_CDFILIAL, '[^_]+', 1, LEVEL) CDFILIAL
                             FROM DUAL
                            WHERE P_CDFILIAL <> 'T'
                          CONNECT BY REGEXP_SUBSTR(P_CDFILIAL, '[^_]+', 1, LEVEL) IS NOT NULL
                            UNION ALL
                           SELECT CDFILIAL
                             FROM FILIAL
                            WHERE FILIAL.IDCNTRRESC <> 'S'
                              AND FILIAL.CDREGIAO IS NOT NULL
                              AND 'T' = P_CDFILIAL) LF INNER JOIN FILIAL F ON LF.CDFILIAL = F.CDFILIAL
                    WHERE (NVL(F.CDFILCENTCMP, F.CDFILIAL) = V_CDFILCENTCMP)
                      AND (INSTR(P_CDREGIAO, F.CDREGIAO) > 0 OR (P_CDREGIAO = 'T'))
                      AND F.IDCNTRRESC <> 'S'
                      AND ((P_CDGRUPFILI IS NULL) OR EXISTS (SELECT FILGRUPFILI.CDFILIAL
                                                               FROM FILGRUPFILI
                                                              WHERE FILGRUPFILI.CDGRUPFILI = P_CDGRUPFILI
                                                                AND F.CDFILIAL = FILGRUPFILI.CDFILIAL
                                                              GROUP BY FILGRUPFILI.CDFILIAL))) LOOP
      IF C_LISTA.IDFUNCAOFILI <> 'O' THEN
         V_IDOPERADOROL := 'N';
      ELSE
         V_IDOPERADOROL := 'S';
      END IF;
      V_IDENTIFICADOR_TMP := '0';
      IF ((NVL(C_LISTA.IDFUNCAOFILI, 'X') = 'O') AND (NVL(V_IDUTILCONSSOLIOL, 'N') = 'S')) THEN
         V_IDENTIFICADOR_TMP := '2';
         IF V_IDUTLPRCMPATIVO = 'S' THEN
            V_IDENTIFICADOR_TMP := '1';
            V_IDUTLMARPREFOL    := 'N';
         END IF;
      ELSE
         V_IDENTIFICADOR_TMP := '1';
         V_IDUTLMARPREFOL    := 'N';
      END IF;
      /* PRODUTO SOLICITADOS */
      IF P_RELCOMPRA = 'N' THEN
         OPEN C_PRODSOLI FOR
            SELECT ITEMSOLI.CDFILSOLI, ITEMSOLI.DTPROGENTR, CASE V_IDENTIFICADOR_TMP WHEN '1' THEN PRODUTO.CDPRODESTO
                                                                                     WHEN '2' THEN PRODUTO.CDPRODUTO
                                                            END CDPRODUTOX,
                   CASE WHEN V_IDENTIFICADOR_TMP = '1' THEN SUM(ITEMSOLI.QTSOLIPROD * PRODUTO.VRFATOCONV)
                        WHEN V_IDENTIFICADOR_TMP = '2' THEN SUM(ITEMSOLI.QTSOLIPROD)
                   END, /*CONVERTENDO PARA A UNIDADE DE ESTOQUE*/
                   'T' NRCOMPRA,
                   CASE WHEN V_IDUTLMARPREFOL = 'S' THEN ITEMSOLI.CDMARCA ELSE 'T' END CDMARCA,
                   CASE WHEN NVL(ITEMSOLI.CDFILIOPELOG, 'N') = 'N' THEN ITEMSOLI.IDITMCONS ELSE 'S' END IDITMCONS
              FROM SOLICITA INNER JOIN ITEMSOLI ON SOLICITA.CDFILLANCA = ITEMSOLI.CDFILLAN
                                               AND SOLICITA.CDFILSOLI  = ITEMSOLI.CDFILSOLI
                                               AND SOLICITA.NRSOLICMP  = ITEMSOLI.NRSOLICMP
                            INNER JOIN PRODUTO ON PRODUTO.CDPRODUTO = ITEMSOLI.CDPRODUTO
             WHERE ((NVL(ITEMSOLI.IDITMSOLEXTRA, 'N') = V_IDEXTRA) OR (V_IDEXTRA = 'T'))
               AND ITEMSOLI.DTPROGENTR BETWEEN P_DATAINI AND P_DATAFIN
               AND ITEMSOLI.CDFILSOLI = C_LISTA.CDFILIAL
               AND ((ITEMSOLI.IDITMCONS = 'N' AND  ITEMSOLI.CDFILIOPELOG IS NULL AND NVL(P_VD_IDITMCONS, 'N') = 'N') OR (NVL(P_VD_IDITMCONS, 'N') = 'S'))
               AND PRODUTO.CDARVPROD BETWEEN P_PRODINI AND P_PRODFIN
               AND NVL(ITEMSOLI.IDSOLIAPROV,'S') = 'S'
               AND PRODUTO.CDNVPRODUTO = V_CDNVPRODUTO
               AND ((V_CONSIDERACOMP = 'N')
                OR  (EXISTS (SELECT 1
                               FROM PRODCOMP INNER JOIN PRODUTO PR ON PRODCOMP.CDPRODUTO  = PR.CDPRODUTO
                              WHERE ((INSTR(P_CDOPERADOR, PRODCOMP.CDOPERADOR) > 0) OR (P_CDOPERADOR = 'T'))
                                AND PRODUTO.CDARVPROD LIKE PR.CDARVPROD || '%')))
             GROUP BY ITEMSOLI.CDFILSOLI, ITEMSOLI.DTPROGENTR, CASE V_IDENTIFICADOR_TMP WHEN '1' THEN PRODUTO.CDPRODESTO
                                                                                        WHEN '2' THEN PRODUTO.CDPRODUTO
                                                               END,
                      CASE WHEN V_IDUTLMARPREFOL = 'S' THEN ITEMSOLI.CDMARCA ELSE 'T' END,
                      CASE WHEN NVL(ITEMSOLI.CDFILIOPELOG, 'N') = 'N' THEN ITEMSOLI.IDITMCONS ELSE 'S' END;
      ELSE
         OPEN C_PRODSOLI FOR
            SELECT ITEMSOLI.CDFILSOLI, ITEMSOLI.DTPROGENTR, CASE V_IDENTIFICADOR_TMP WHEN '1' THEN PRODUTO.CDPRODESTO
                                                                                     WHEN '2' THEN PRODUTO.CDPRODUTO
                                                            END CDPRODUTOX,
                   CASE WHEN V_IDENTIFICADOR_TMP = '1' THEN SUM(ITEMSOLI.QTSOLIPROD * PRODUTO.VRFATOCONV)
                        WHEN V_IDENTIFICADOR_TMP = '2' THEN SUM(ITEMSOLI.QTSOLIPROD)
                   END, /*CONVERTENDO PARA A UNIDADE DE ESTOQUE*/
                   PRODCOMPRA.NRCOMPRA,
                   CASE WHEN V_IDUTLMARPREFOL = 'S' THEN ITEMSOLI.CDMARCA ELSE 'T' END CDMARCA,
                   CASE WHEN NVL(ITEMSOLI.CDFILIOPELOG, 'N') = 'N' THEN ITEMSOLI.IDITMCONS ELSE 'S' END IDITMCONS
              FROM SOLICITA INNER JOIN ITEMSOLI ON SOLICITA.CDFILLANCA = ITEMSOLI.CDFILLAN
                                               AND SOLICITA.CDFILSOLI  = ITEMSOLI.CDFILSOLI
                                               AND SOLICITA.NRSOLICMP  = ITEMSOLI.NRSOLICMP
                            INNER JOIN PRODUTO ON PRODUTO.CDPRODUTO    = ITEMSOLI.CDPRODUTO
                            LEFT  JOIN (SELECT PRODCOMPRA.NRCOMPRA, PRODCOMPRA.CDFILSOLI, PRODCOMPRA.CDFILLAN,
                                               PRODCOMPRA.NRSOLICMP, PRODCOMPRA.CDPRODUTO, PRODCOMPRA.DTPROGENTR
                                          FROM PRODCOMPRA, COMPRA
                                         WHERE PRODCOMPRA.NRCOMPRA = COMPRA.NRCOMPRA
                                           AND NVL(COMPRA.IDSITUCOMPRA, '1') <> '9') PRODCOMPRA   ON ITEMSOLI.CDFILSOLI   = PRODCOMPRA.CDFILSOLI
                                                                                                 AND ITEMSOLI.CDFILLAN    = PRODCOMPRA.CDFILLAN
                                                                                                 AND ITEMSOLI.NRSOLICMP   = PRODCOMPRA.NRSOLICMP
                                                                                                 AND ITEMSOLI.CDPRODUTO   = PRODCOMPRA.CDPRODUTO
                                                                                                 AND ITEMSOLI.DTPROGENTR  = PRODCOMPRA.DTPROGENTR
             WHERE ((NVL(ITEMSOLI.IDITMSOLEXTRA, 'N') = V_IDEXTRA) OR (V_IDEXTRA = 'T'))
               AND ITEMSOLI.DTPROGENTR BETWEEN P_DATAINI AND P_DATAFIN
               AND ITEMSOLI.CDFILSOLI = C_LISTA.CDFILIAL
               AND ((ITEMSOLI.IDITMCONS = 'N' AND  ITEMSOLI.CDFILIOPELOG IS NULL AND NVL(P_VD_IDITMCONS, 'N') = 'N') OR (NVL(P_VD_IDITMCONS, 'N') = 'S'))
               AND PRODUTO.CDARVPROD BETWEEN P_PRODINI AND P_PRODFIN
               AND NVL(ITEMSOLI.IDSOLIAPROV,'S') = 'S'
               AND PRODUTO.CDNVPRODUTO = V_CDNVPRODUTO
               AND NOT EXISTS (SELECT 1
                                 FROM COLETAPR, ITEMCOLE, PRODUTO P
                                WHERE COLETAPR.CDFILIAL = ITEMCOLE.CDFILIAL
                                  AND COLETAPR.NRCOLEPRECO = ITEMCOLE.NRCOLEPRECO
                                  AND ITEMCOLE.CDPRODUTO   = P.CDPRODUTO
                                  AND PRODUTO.CDPRODESTO   = P.CDPRODESTO
                                  AND ITEMSOLI.DTPROGENTR BETWEEN COLETAPR.DTINIVALCOL AND COLETAPR.DTFINVALCOL
                                  AND ITEMCOLE.CDREGIAO = (SELECT CDREGIAO FROM FILIAL WHERE CDFILIAL = ITEMSOLI.CDFILSOLI)
                                  AND COLETAPR.NRCOMPRA IS NULL)
               AND ((V_CONSIDERACOMP = 'N')
                OR  (EXISTS (SELECT 1
                               FROM PRODCOMP INNER JOIN PRODUTO PR ON PRODCOMP.CDPRODUTO  = PR.CDPRODUTO
                              WHERE ((INSTR(P_CDOPERADOR, PRODCOMP.CDOPERADOR) > 0) OR (P_CDOPERADOR = 'T'))
                                AND PRODUTO.CDARVPROD LIKE PR.CDARVPROD || '%')))
             GROUP BY ITEMSOLI.CDFILSOLI, ITEMSOLI.DTPROGENTR, CASE V_IDENTIFICADOR_TMP WHEN '1' THEN PRODUTO.CDPRODESTO
                                                                                        WHEN '2' THEN PRODUTO.CDPRODUTO
                                                               END, PRODCOMPRA.NRCOMPRA,
                      CASE WHEN V_IDUTLMARPREFOL = 'S' THEN ITEMSOLI.CDMARCA ELSE 'T' END,
                      CASE WHEN NVL(ITEMSOLI.CDFILIOPELOG, 'N') = 'N' THEN ITEMSOLI.IDITMCONS ELSE 'S' END;
      END IF;
      LOOP
      FETCH C_PRODSOLI INTO V_PRODSOLI_CDFILSOLI, V_PRODSOLI_DTPROGENTR, V_PRODSOLI_CDPRODUTOX,
                            V_PRODSOLI_QTDECOMP, V_PRODSOLI_NRCOMPRA, V_PRODSOLI_CDMARCA,
                            V_PRODSOLI_IDITMCONS;
         EXIT WHEN C_PRODSOLI%NOTFOUND;
         BEGIN
            /* PRODUTOS JA COMPRADOS */
            IF V_IDENTIFICADOR_TMP = '1' AND V_PRODSOLI_IDITMCONS = 'N' THEN
               SELECT ITEMAUTF.CDFILDEST AS CDFILIAL, ITEMAUTF.DTENTRITMSOL, PRODUTO.CDPRODESTO,
                      NVL(SUM(ITEMAUTF.QTPROGENTAF * PRODUTO.VRFATOCONV),0) AS QTDECOMP /*CONVERTENDO PARA A UNIDADE DE ESTOQUE*/
                 INTO V_CDFILIAL, V_DTENTRITMSOL, V_CDPRODESTO, V_QTDECOMP
                 FROM AUTOFORNE INNER JOIN ITEMAUTF ON AUTOFORNE.CDFILDEST  = ITEMAUTF.CDFILDEST
                                                   AND AUTOFORNE.CDFILLANC  = ITEMAUTF.CDFILLANC
                                                   AND AUTOFORNE.NRAUTOFORN = ITEMAUTF.NRAUTOFORN
                                INNER JOIN PARASUPRI ON PARASUPRI.CDFILIAL = NVL(C_LISTA.CDFILCENTCMP, C_LISTA.CDFILIAL)
                                INNER JOIN PRODUTO ON PRODUTO.CDPRODUTO = ITEMAUTF.CDPRODUTO
                WHERE ((NVL(AUTOFORNE.IDAUTOFORNEX, 'N') = V_IDEXTRA) OR (V_IDEXTRA = 'T'))
                  AND ((PARASUPRI.IDAPUREFESOLEXT = 'S') OR (NVL(AUTOFORNE.IDAUTOFORNEX, 'N') = 'N'))
                  AND ITEMAUTF.DTENTRITMSOL = V_PRODSOLI_DTPROGENTR /*.,.*/
                  AND ITEMAUTF.CDFILDEST    = C_LISTA.CDFILIAL
                  AND ITEMAUTF.CDPRODUTO    = PRODUTO.CDPRODUTO
                  AND PRODUTO.CDARVPROD BETWEEN P_PRODINI AND P_PRODFIN
                  AND PRODUTO.CDPRODESTO = V_PRODSOLI_CDPRODUTOX
                  AND NVL(AUTOFORNE.IDBAIXAAF, '0') <> '5'
                  AND NVL(AUTOFORNE.NRCOMPRAF, 'T') = V_PRODSOLI_NRCOMPRA
                  AND ITEMAUTF.CDMARCA  = CASE V_PRODSOLI_CDMARCA WHEN 'T' THEN ITEMAUTF.CDMARCA ELSE V_PRODSOLI_CDMARCA END
                  AND ((V_CONSIDERACOMP = 'N')
                   OR  (EXISTS (SELECT 1
                                  FROM PRODCOMP INNER JOIN PRODUTO PR ON PRODCOMP.CDPRODUTO  = PR.CDPRODUTO
                                 WHERE ((INSTR(P_CDOPERADOR, PRODCOMP.CDOPERADOR) > 0) OR (P_CDOPERADOR = 'T'))
                                   AND PRODUTO.CDARVPROD LIKE PR.CDARVPROD || '%')))
                GROUP BY ITEMAUTF.CDFILDEST, ITEMAUTF.DTENTRITMSOL, PRODUTO.CDPRODESTO;
            ELSE
               /*PARMETRO SE UTILIZA PRODUTO DE COMPRA NA ARVORE DO OL(SIMULA QUERY SOPCMPOL E NOPCMPOL)*/
               IF V_IDUTLPRARVOLCMP = 'N' THEN
                  SELECT ITEMAUTF.CDFILDEST AS CDFILIAL, ITEMAUTF.DTENTRITMSOL,
                         ITEMAUTF.CDPRODUTO, SUM(ITEMAUTF.QTPROGENTAF) AS QTDECOMP /*CONVERTENDO PARA A UNIDADE DE ESTOQUE*/
                    INTO V_CDFILIAL, V_DTENTRITMSOL, V_CDPRODESTO, V_QTDECOMP
                    FROM AUTOFORNE INNER JOIN ITEMAUTF ON AUTOFORNE.CDFILDEST  = ITEMAUTF.CDFILDEST
                                                      AND AUTOFORNE.CDFILLANC  = ITEMAUTF.CDFILLANC
                                                      AND AUTOFORNE.NRAUTOFORN = ITEMAUTF.NRAUTOFORN
                                   INNER JOIN RELACPRODOL ON RELACPRODOL.CDPRODARVOL = ITEMAUTF.CDPRODUTO
                                   INNER JOIN PRODUTO     ON RELACPRODOL.CDPRARVORIG = PRODUTO.CDPRODUTO
                   WHERE ((NVL(AUTOFORNE.IDAUTOFORNEX, 'N') = V_IDEXTRA) OR (V_IDEXTRA = 'T'))
                     AND ITEMAUTF.CDFILDEST    = C_LISTA.CDFILIAL
                     AND ITEMAUTF.DTENTRITMSOL = V_PRODSOLI_DTPROGENTR
                     AND PRODUTO.CDPRODUTO     = V_PRODSOLI_CDPRODUTOX
                     AND NVL(AUTOFORNE.IDBAIXAAF, '0') <> '5'
                     AND NVL(AUTOFORNE.NRCOMPRAF, 'T') = V_PRODSOLI_NRCOMPRA
                     AND ITEMAUTF.CDMARCA  = CASE V_PRODSOLI_CDMARCA WHEN 'T' THEN ITEMAUTF.CDMARCA ELSE V_PRODSOLI_CDMARCA END
                     AND ((V_CONSIDERACOMP = 'N')
                      OR  (EXISTS (SELECT 1
                                     FROM PRODCOMP INNER JOIN PRODUTO PR ON PRODCOMP.CDPRODUTO  = PR.CDPRODUTO
                                    WHERE ((INSTR(P_CDOPERADOR, PRODCOMP.CDOPERADOR) > 0) OR (P_CDOPERADOR = 'T'))
                                      AND PRODUTO.CDARVPROD LIKE PR.CDARVPROD || '%')))
                   GROUP BY ITEMAUTF.CDFILDEST, ITEMAUTF.DTENTRITMSOL, ITEMAUTF.CDPRODUTO;
               ELSE
                  SELECT ITEMAUTF.CDFILDEST AS CDFILIAL, ITEMAUTF.DTENTRITMSOL, CASE PRODUTO.CDPRODUTO
                                                                                   WHEN RELACPRODOLEST.CDPRARVORIG
                                                                                   THEN PRODUTO.CDPRODUTO
                                                                                   ELSE RELACPRODOLEST.CDPRARVORIG
                                                                                END CDPRODUTO,
                      SUM(ITEMAUTF.QTPROGENTAF* (CASE PRODUTO.CDPRODUTO
                                                    WHEN RELACPRODOLEST.CDPRARVORIG
                                                    THEN 1
                                                    ELSE PRODUTO.VRFATOCONV
                                                 END)) AS QTDECOMP /*CONVERTENDO PARA A UNIDADE DE ESTOQUE*/
                 INTO V_CDFILIAL, V_DTENTRITMSOL, V_CDPRODESTO, V_QTDECOMP
                 FROM AUTOFORNE INNER JOIN ITEMAUTF ON AUTOFORNE.CDFILDEST  = ITEMAUTF.CDFILDEST
                                                   AND AUTOFORNE.CDFILLANC  = ITEMAUTF.CDFILLANC
                                                   AND AUTOFORNE.NRAUTOFORN = ITEMAUTF.NRAUTOFORN
                                INNER JOIN RELACPRODOL ON RELACPRODOL.CDPRODARVOL = ITEMAUTF.CDPRODUTO
                                INNER JOIN PRODUTO ON PRODUTO.CDPRODUTO = RELACPRODOL.CDPRARVORIG
                                INNER JOIN PRODUTO PRODUTOOL ON PRODUTOOL.CDPRODUTO = RELACPRODOL.CDPRODARVOL
                                INNER JOIN RELACPRODOL RELACPRODOLEST ON RELACPRODOLEST.CDPRODARVOL = PRODUTOOL.CDPRODESTO
                                INNER JOIN PRODUTO PRODUTORIG ON RELACPRODOLEST.CDPRARVORIG = PRODUTORIG.CDPRODUTO
                                CROSS JOIN PARASUPRI
                WHERE ((NVL(AUTOFORNE.IDAUTOFORNEX, 'N') = V_IDEXTRA) OR (V_IDEXTRA = 'T'))
                  AND ITEMAUTF.CDFILDEST    = C_LISTA.CDFILIAL
                  AND ITEMAUTF.DTENTRITMSOL = V_PRODSOLI_DTPROGENTR
                  AND PRODUTO.CDPRODUTO     = V_PRODSOLI_CDPRODUTOX
                  AND NVL(AUTOFORNE.IDBAIXAAF, '0') <> '5'
                  AND NVL(AUTOFORNE.NRCOMPRAF, 'T') = V_PRODSOLI_NRCOMPRA
                  AND ITEMAUTF.CDMARCA  = CASE V_PRODSOLI_CDMARCA WHEN 'T' THEN ITEMAUTF.CDMARCA ELSE V_PRODSOLI_CDMARCA END
                  AND ((V_CONSIDERACOMP = 'N')
                   OR  (EXISTS (SELECT 1
                                  FROM PRODCOMP INNER JOIN PRODUTO PR ON PRODCOMP.CDPRODUTO  = PR.CDPRODUTO
                                 WHERE ((INSTR(P_CDOPERADOR, PRODCOMP.CDOPERADOR) > 0) OR (P_CDOPERADOR = 'T'))
                                   AND PRODUTO.CDARVPROD LIKE PR.CDARVPROD || '%')));
               END IF;
            END IF;
         EXCEPTION
            WHEN NO_DATA_FOUND THEN BEGIN
               V_CDFILIAL     := NULL;
               V_DTENTRITMSOL := NULL;
               V_CDPRODESTO   := NULL;
               V_QTDECOMP     := 0;
            END;
         END;
         /*INICIALIZA TODAS AS VARIAVEIS*/
         V_CDREGIAO             := NULL;
         V_NMREGIAO             := NULL;
         V_IDFUNCAOFILI         := NULL;
         V_CDOPERADOR           := NULL;
         V_NMOPERADOR           := NULL;
         V_CDFILIAL             := NULL;
         V_NMFILIAL             := NULL;
         V_DTPROGENTR           := NULL;
         V_CDPRODESTO           := NULL;
         V_CDARVPROD            := NULL;
         V_NMPRODUTO            := NULL;
         V_QTACOMPRAR           := NULL;
         V_SGUNIDADE            := NULL;
         V_DATAINI              := NULL;
         V_DATAFIN              := NULL;
         V_IDAFINCONS           := NULL;
         V_IDPARTFILI           := NULL;
         V_IDQUALIFMARCA        := NULL;
         V_IDPRODNCOMP          := NULL;
         V_IDREFORFIL           := NULL;
         V_IDQUALIFFORN         := NULL;
         V_IDPRODCMPFILI        := NULL;
         V_IDCOTACAO            := NULL;
         V_IDREFOREG            := NULL;
         V_IDQFOPRODFORN        := NULL;
         V_SISTEMA              := NULL;
         V_ATENDIDA             := NULL;
         V_IDPRODPREF           := NULL;
         V_IDSTATCOT            := NULL;
         V_IDSEMQTDEDISP        := NULL;
         V_NRCOMPRA             := NULL;
         V_DSPRODPREF           := NULL;
         V_DSIDCDTIPPART        := NULL;
         V_DSPARTFILIMARCA      := NULL;
         V_DSPARTIFILINRINSFORN := NULL;
         V_DSPARTIFILINMFORN    := NULL;
         V_DSIDFORN             := NULL;
         V_LISTA_NRSOLICMP      := NULL;
         V_RELACPRL             := NULL;
         V_IDACORD              := NULL;
         V_IDEMBALAGEMUTIL      := NULL;
         V_CDMARCA              := NULL;
         V_IDPRCMPATIVO         := NULL;

         /*EXECUTA PROCEDIMENTO APENAS PARA ITENS COM QUANTIDADE A COMPRAR*/
         IF TRUNC(V_PRODSOLI_QTDECOMP-NVL(V_QTDECOMP,0), 5) > 0 THEN
            /*LISTA DE SOLICITACAO*/
            SELECT LISTAGG(SOLICITA.NRSOLICMP,'-')
            WITHIN GROUP (ORDER BY SOLICITA.NRSOLICMP)
              INTO V_LISTA_NRSOLICMP
              FROM SOLICITA
             WHERE CDFILSOLI  = C_LISTA.CDFILIAL
              AND EXISTS(SELECT 1
                           FROM ITEMSOLI INNER JOIN PRODUTO ON ITEMSOLI.CDPRODUTO = PRODUTO.CDPRODUTO
                          WHERE ITEMSOLI.CDFILLAN = SOLICITA.CDFILLANCA
                            AND ITEMSOLI.CDFILSOLI = SOLICITA.CDFILSOLI
                            AND ITEMSOLI.NRSOLICMP = SOLICITA.NRSOLICMP
                            AND ITEMSOLI.CDFILSOLI  = C_LISTA.CDFILIAL
                            AND ITEMSOLI.DTPROGENTR = V_PRODSOLI_DTPROGENTR
                            AND ((NVL(ITEMSOLI.IDITMSOLEXTRA, 'N') = V_IDEXTRA) OR (V_IDEXTRA = 'T'))
                            AND CASE WHEN V_IDENTIFICADOR_TMP = '1' THEN PRODUTO.CDPRODESTO
                                     WHEN V_IDENTIFICADOR_TMP = '2' THEN PRODUTO.CDPRODUTO
                                END = V_PRODSOLI_CDPRODUTOX
                            AND NVL(ITEMSOLI.IDSOLIAPROV,'S') = 'S'
                            AND ((V_PRODSOLI_NRCOMPRA = 'T')
                             OR  (EXISTS(SELECT 1
                                           FROM PRODCOMPRA
                                          WHERE ITEMSOLI.CDFILSOLI   = PRODCOMPRA.CDFILSOLI
                                            AND ITEMSOLI.CDFILLAN    = PRODCOMPRA.CDFILLAN
                                            AND ITEMSOLI.NRSOLICMP   = PRODCOMPRA.NRSOLICMP
                                            AND ITEMSOLI.CDPRODUTO   = PRODCOMPRA.CDPRODUTO
                                            AND ITEMSOLI.DTPROGENTR  = PRODCOMPRA.DTPROGENTR
                                            AND PRODCOMPRA.NRCOMPRA  = V_PRODSOLI_NRCOMPRA))));
            /* SEPARA POR REGIAO E OPERADOR */
            IF P_CONSIDERACOMP = 'S' THEN
               /*GERA RELATORIO CONSIDERANDO COMPRADOR (SIMULA QUERYS SOP DELPHI) P_INDEXREL <> 2*/
               OPEN C_AUX FOR
                  SELECT FILSOL.CDREGIAO, REGIAO.NMREGIAO, NVL(FILSOL.IDFUNCAOFILI, 'Z') IDFUNCAOFILI,
                         OPERADOR.CDOPERADOR, OPERADOR.NMOPERADOR, FILSOL.NMFILIAL,
                         PRODUTO.CDARVPROD, PRODUTO.NMPRODUTO, PRODUTO.SGUNIDADE,
                         NVL(PRODUTO.IDPRCMPATIVO, 'N')
                    FROM FILIAL FILSOL INNER JOIN REGIAO ON FILSOL.CDREGIAO = REGIAO.CDREGIAO
                                       CROSS JOIN OPERADOR
                                       CROSS JOIN PRODUTO
                   WHERE FILSOL.CDFILIAL   = C_LISTA.CDFILIAL
                     AND PRODUTO.CDPRODUTO = V_PRODSOLI_CDPRODUTOX
                     AND ((INSTR(P_CDOPERADOR, OPERADOR.CDOPERADOR) > 0) OR (P_CDOPERADOR = 'T'))
                     AND EXISTS (SELECT PRODCOMP.CDPRODUTO
                                   FROM PRODCOMP INNER JOIN PRODUTO PR ON PRODCOMP.CDPRODUTO  = PR.CDPRODUTO
                                  WHERE PRODCOMP.CDOPERADOR = OPERADOR.CDOPERADOR
                                    AND PRODUTO.CDARVPROD LIKE PR.CDARVPROD || '%')
                  UNION
                  SELECT FILSOL.CDREGIAO, REGIAO.NMREGIAO, NVL(FILSOL.IDFUNCAOFILI, 'Z') IDFUNCAOFILI,
                              'COMP_N_CADAS', '', FILSOL.NMFILIAL,
                              PRODUTO.CDARVPROD, PRODUTO.NMPRODUTO, PRODUTO.SGUNIDADE,
                              NVL(PRODUTO.IDPRCMPATIVO, 'N')
                         FROM FILIAL FILSOL INNER JOIN REGIAO ON FILSOL.CDREGIAO = REGIAO.CDREGIAO
                                            CROSS JOIN PRODUTO
                        WHERE FILSOL.CDFILIAL   = C_LISTA.CDFILIAL
                          AND PRODUTO.CDPRODUTO = V_PRODSOLI_CDPRODUTOX
                          AND (P_CDOPERADOR = 'T')
                          AND (((NVL(FILSOL.IDFUNCAOFILI, 'X') <> 'O') OR (NVL(V_IDUTILCONSSOLIOL, 'N') = 'N')) OR
                              ((NVL(FILSOL.IDFUNCAOFILI, 'X') = 'O') AND (NVL(V_IDUTILCONSSOLIOL, 'N') = 'S')))
                          AND NOT EXISTS (SELECT PRODCOMP.CDPRODUTO
                                        FROM PRODCOMP INNER JOIN PRODUTO PR ON PRODCOMP.CDPRODUTO  = PR.CDPRODUTO
                                       WHERE PRODUTO.CDARVPROD LIKE PR.CDARVPROD || '%');
            ELSE
               /*GERA RELATORIO NAO CONSIDERANDO COMPRADOR (SIMULA QUERYS NOP DELPHI) P_INDEXREL = 2*/
               OPEN C_AUX FOR
                  SELECT FILSOL.CDREGIAO, REGIAO.NMREGIAO, NVL(FILSOL.IDFUNCAOFILI, 'Z') IDFUNCAOFILI,
                         '' CDOPERADOR, '' NMOPERADOR, FILSOL.NMFILIAL,
                         PRODUTO.CDARVPROD, PRODUTO.NMPRODUTO, PRODUTO.SGUNIDADE,
                         NVL(PRODUTO.IDPRCMPATIVO, 'N')
                    FROM FILIAL FILSOL INNER JOIN REGIAO ON FILSOL.CDREGIAO = REGIAO.CDREGIAO
                                       CROSS JOIN PRODUTO
                   WHERE FILSOL.CDFILIAL   = C_LISTA.CDFILIAL
                     AND PRODUTO.CDPRODUTO = V_PRODSOLI_CDPRODUTOX;
            END IF;
            LOOP
            FETCH C_AUX INTO V_AUX_CDREGIAO, V_AUX_NMREGIAO, V_AUX_IDFUNCAOFILI,
                             V_AUX_CDOPERADOR, V_AUX_NMOPERADOR, V_AUX_NMFILIAL,
                             V_AUX_CDARVPROD, V_AUX_NMPRODUTO, V_AUX_SGUNIDADE,
                             V_IDPRCMPATIVO;
            EXIT WHEN C_AUX%NOTFOUND;
               /*DADOS PRINCIPAIS*/
               V_CDREGIAO             := V_AUX_CDREGIAO;
               V_NMREGIAO             := V_AUX_NMREGIAO;
               V_IDFUNCAOFILI         := V_AUX_IDFUNCAOFILI;
               V_CDOPERADOR           := V_AUX_CDOPERADOR;
               V_NMOPERADOR           := V_AUX_NMOPERADOR;
               V_CDFILIAL             := C_LISTA.CDFILIAL;
               V_NMFILIAL             := V_AUX_NMFILIAL;
               V_DTPROGENTR           := V_PRODSOLI_DTPROGENTR;
               V_CDPRODESTO           := V_PRODSOLI_CDPRODUTOX;
               V_CDARVPROD            := V_AUX_CDARVPROD;
               V_NMPRODUTO            := V_AUX_NMPRODUTO;
               V_QTACOMPRAR           := V_PRODSOLI_QTDECOMP-V_QTDECOMP;
               V_SGUNIDADE            := V_AUX_SGUNIDADE;
               V_DATAINI              := P_DATAINI;
               V_DATAFIN              := P_DATAFIN;
               V_NRCOMPRA             := '';
               V_DSIDFORN             := '';
               V_DSPARTIFILINRINSFORN := '';
               V_SISTEMA              := P_SISTEMA;
               IF V_PRODSOLI_CDMARCA = 'T' THEN
                  V_CDMARCA              := '';
               ELSE
                  V_CDMARCA              := V_PRODSOLI_CDMARCA;
               END IF;

               /*INCONSISTENCIAS NAO VALIDADAS*/
               V_IDAFINCONS           := 'N';
               V_IDPARTFILI           := 'N';
               V_IDQUALIFMARCA        := 'N';
               V_IDPRODNCOMP          := 'N';
               V_IDREFORFIL           := 'N';
               V_IDQUALIFFORN         := 'N';
               V_IDPRODCMPFILI        := 'N';
               V_IDCOTACAO            := 'N';
               V_IDREFOREG            := 'N';
               V_IDQFOPRODFORN        := 'N';
               V_ATENDIDA             := 'N';
               V_IDPRODPREF           := 'N';
               V_IDSTATCOT            := 'N';
               V_IDSEMQTDEDISP        := 'N';
               V_DSIDCDTIPPART        := '';
               V_DSIDFORN             := '';
               V_DSPRODPREF           := '';
               V_RELACPRL             := 'N';
               V_IDACORD              := 'N';
               V_IDEMBALAGEMUTIL      := 'N';

               IF (NVL(V_AUX_CDOPERADOR, 'W') <> 'COMP_N_CADAS') THEN
                  IF V_PRODSOLI_IDITMCONS = 'N' THEN
                     /*INICIO DO C_ITEMCOLE QUE BUSCA DADOS DE ITENS DE COTACAO*/
                     IF V_IDUTLPRARVOLCMP = 'S' AND V_IDENTIFICADOR_TMP = '2' THEN
                        OPEN C_ITEMCOLE FOR
                           SELECT ITEMCOLE.CDPRODUTO, ITEMCOLE.CDMARCA, PRODUTO.CDARVPROD,
                                  ITEMCOLE.CDFORNECED, CASE NVL(PRMARCPEDCOL.QTDISPPRODMARC,0) WHEN 0 THEN 'S' ELSE 'N' END IDSEMQTDEDISP,
                                  ITEMCOLE.CDREGIAO, NVL(COLETAPR.IDDISMONTLIS, 'S') IDDISMONTLIS, ITEMCOLE.NRCOLEPRECO, COLETAPR.CDOPERADOR
                             FROM COLETAPR, ITEMCOLE, PRODUTO, PRMARCPEDCOL,
                                  (SELECT RELACPRODORIG.CDPRARVORIG, RELACPRODORIG.CDMARCA
                                     FROM RELACPRODOL, PRODUTO PRODUTOEST, PRODUTO, RELACPRODOL RELACPRODORIG
                                    WHERE RELACPRODOL.CDPRARVORIG   = V_PRODSOLI_CDPRODUTOX
                                      AND RELACPRODOL.CDPRODARVOL   = PRODUTOEST.CDPRODUTO
                                      AND PRODUTOEST.CDPRODESTO     = PRODUTO.CDPRODESTO
                                      AND RELACPRODORIG.CDPRODARVOL = PRODUTO.CDPRODUTO
                                      AND RELACPRODORIG.CDMARCA     = CASE V_PRODSOLI_CDMARCA WHEN 'T' THEN RELACPRODORIG.CDMARCA ELSE V_PRODSOLI_CDMARCA END) PRODUTOOL
                            WHERE COLETAPR.CDFILIAL     = ITEMCOLE.CDFILIAL
                              AND COLETAPR.NRCOLEPRECO  = ITEMCOLE.NRCOLEPRECO
                              AND ITEMCOLE.CDFILIAL     = V_CDFILCENTCMP
                              AND ITEMCOLE.CDPRODUTO    = PRODUTO.CDPRODUTO
                              AND ITEMCOLE.CDREGIAO     = V_AUX_CDREGIAO
                              AND COLETAPR.CDOPERADOR   = CASE NVL(V_AUX_CDOPERADOR, 'T') WHEN 'T' THEN COLETAPR.CDOPERADOR ELSE V_AUX_CDOPERADOR END
                              AND ((INSTR(P_CDOPERADOR, COLETAPR.CDOPERADOR) > 0) OR (P_CDOPERADOR = 'T'))
                              AND PRODUTO.CDPRODUTO     = PRODUTOOL.CDPRARVORIG
                              AND ITEMCOLE.CDMARCA      = PRODUTOOL.CDMARCA
                              AND ITEMCOLE.VRPRECUNIITM <> 0
                              AND PRMARCPEDCOL.CDFILIAL(+) = ITEMCOLE.CDFILIAL
                              AND PRMARCPEDCOL.NRPEDIDOCOL(+) = ITEMCOLE.NRPEDIDOCOL
                              AND PRMARCPEDCOL.CDPRODUTO(+) = ITEMCOLE.CDPRODUTO
                              AND PRMARCPEDCOL.CDMARCA(+) = ITEMCOLE.CDMARCA
                              AND V_PRODSOLI_DTPROGENTR BETWEEN ITEMCOLE.DTINIVALITM AND ITEMCOLE.DTFINVALITM
                              AND NVL(COLETAPR.NRCOMPRA, 'T') = V_PRODSOLI_NRCOMPRA
                              AND ITEMCOLE.CDMARCA            = CASE V_PRODSOLI_CDMARCA WHEN 'T' THEN ITEMCOLE.CDMARCA ELSE V_PRODSOLI_CDMARCA END
                              AND (((V_IDEXTRA = 'T') OR (V_IDEXTRA = 'N')) OR (EXISTS (SELECT 1
                                                                                          FROM FORNECMPEXTRA
                                                                                         WHERE CDFORNECED = ITEMCOLE.CDFORNECED
                                                                                           AND V_IDEXTRA = 'S')))
                            ORDER BY ITEMCOLE.CDREGIAO;
                     ELSE
                        OPEN C_ITEMCOLE FOR
                           SELECT ITEMCOLE.CDPRODUTO, ITEMCOLE.CDMARCA, PRODUTO.CDARVPROD,
                                  ITEMCOLE.CDFORNECED, CASE NVL(PRMARCPEDCOL.QTDISPPRODMARC,0) WHEN 0 THEN 'S' ELSE 'N' END IDSEMQTDEDISP,
                                  ITEMCOLE.CDREGIAO, NVL(COLETAPR.IDDISMONTLIS, 'S') IDDISMONTLIS, ITEMCOLE.NRCOLEPRECO, COLETAPR.CDOPERADOR
                             FROM COLETAPR, ITEMCOLE, PRODUTO, PRMARCPEDCOL
                            WHERE COLETAPR.CDFILIAL     = ITEMCOLE.CDFILIAL
                              AND COLETAPR.NRCOLEPRECO  = ITEMCOLE.NRCOLEPRECO
                              AND ITEMCOLE.CDFILIAL     = V_CDFILCENTCMP
                              AND ITEMCOLE.CDPRODUTO    = PRODUTO.CDPRODUTO
                              AND ITEMCOLE.CDREGIAO     = V_AUX_CDREGIAO
                              AND COLETAPR.CDOPERADOR   = CASE NVL(V_AUX_CDOPERADOR, 'T') WHEN 'T' THEN COLETAPR.CDOPERADOR ELSE V_AUX_CDOPERADOR END
                              AND ((INSTR(P_CDOPERADOR, COLETAPR.CDOPERADOR) > 0) OR (P_CDOPERADOR = 'T'))
                              AND CASE WHEN V_IDENTIFICADOR_TMP = '1' THEN PRODUTO.CDPRODESTO
                                       WHEN V_IDENTIFICADOR_TMP = '2' THEN PRODUTO.CDPRODUTO
                                  END = V_PRODSOLI_CDPRODUTOX
                              AND ITEMCOLE.VRPRECUNIITM <> 0
                              AND PRMARCPEDCOL.CDFILIAL(+) = ITEMCOLE.CDFILIAL
                              AND PRMARCPEDCOL.NRPEDIDOCOL(+) = ITEMCOLE.NRPEDIDOCOL
                              AND PRMARCPEDCOL.CDPRODUTO(+) = ITEMCOLE.CDPRODUTO
                              AND PRMARCPEDCOL.CDMARCA(+) = ITEMCOLE.CDMARCA
                              AND V_PRODSOLI_DTPROGENTR BETWEEN ITEMCOLE.DTINIVALITM AND ITEMCOLE.DTFINVALITM
                              AND NVL(COLETAPR.NRCOMPRA, 'T') = V_PRODSOLI_NRCOMPRA
                              AND ITEMCOLE.CDMARCA            = CASE V_PRODSOLI_CDMARCA WHEN 'T' THEN ITEMCOLE.CDMARCA ELSE V_PRODSOLI_CDMARCA END
                              AND (((V_IDEXTRA = 'T') OR (V_IDEXTRA = 'N')) OR (EXISTS (SELECT 1
                                                                                          FROM FORNECMPEXTRA
                                                                                         WHERE CDFORNECED = ITEMCOLE.CDFORNECED
                                                                                           AND V_IDEXTRA = 'S')))
                            ORDER BY ITEMCOLE.CDREGIAO;
                     END IF;
                     LOOP
                     FETCH C_ITEMCOLE INTO C_ITEMCOLE_CDPRODUTO, C_ITEMCOLE_CDMARCA, C_ITEMCOLE_CDARVPROD,
                                           C_ITEMCOLE_CDFORNECED, C_ITEMCOLE_IDNQTDEDISP, C_ITEMCOLE_CDREGIAO,
                                           C_ITEMCOLE_IDMONTLIS, C_ITEMCOLE_NRCOLEPRECO, C_ITEMCOLE_CDOPERADOR;
                        EXIT WHEN C_ITEMCOLE%NOTFOUND;
                        /* Inicializa variaveis */
                        V_ERRO       := 'N';
                        V_IDPARTFILI := 'N';
                        V_COUNTTEMP := 0;
                        V_IDPRODNCOMP := 'N';
                        V_NMMARCA     := NULL;
                        /*ITEM COTADO*/
                        V_IDCOTACAO := 'S';
                        /* BLOCO DE VALIDACOES */
                        /*AF INCONSISTENTE*/
                        SELECT COUNT(1)
                          INTO V_COUNTTEMP
                          FROM AUTOFORNE INNER JOIN ITEMAUTF ON AUTOFORNE.CDFILDEST  = ITEMAUTF.CDFILDEST
                                                            AND AUTOFORNE.CDFILLANC  = ITEMAUTF.CDFILLANC
                                                            AND AUTOFORNE.NRAUTOFORN = ITEMAUTF.NRAUTOFORN
                                         INNER JOIN FILIAL ON AUTOFORNE.CDFILDEST = FILIAL.CDFILIAL
                                         INNER JOIN PRODUTO ON PRODUTO.CDPRODUTO = ITEMAUTF.CDPRODUTO
                                         INNER JOIN PARASUPRI ON PARASUPRI.CDFILIAL = NVL(FILIAL.CDFILCENTCMP, FILIAL.CDFILIAL)
                         WHERE FILIAL.CDREGIAO       = C_ITEMCOLE_CDREGIAO
                           AND AUTOFORNE.CDFILDEST   = C_LISTA.CDFILIAL
                           AND ITEMAUTF.DTENTRITMSOL = V_PRODSOLI_DTPROGENTR
                           AND CASE WHEN V_IDENTIFICADOR_TMP = '1' THEN PRODUTO.CDPRODESTO
                                    WHEN V_IDENTIFICADOR_TMP = '2' THEN PRODUTO.CDPRODUTO
                               END = V_PRODSOLI_CDPRODUTOX
                           AND ((V_IDOPERADOROL = 'N') OR ((V_IDOPERADOROL = 'S') AND (V_IDUTLPRARVOLCMP = 'N')))
                           AND (AUTOFORNE.IDSITUATUAAF IS NOT NULL OR AUTOFORNE.IDAFFORALIM = 'S')
                           AND ((NVL(AUTOFORNE.IDAUTOFORNEX, 'N') = V_IDEXTRA) OR (V_IDEXTRA = 'T'))
                           AND ((PARASUPRI.IDAPUREFESOLEXT = 'S') OR (NVL(AUTOFORNE.IDAUTOFORNEX, 'N') = 'N'))
                           AND AUTOFORNE.CDOPERADOR = C_ITEMCOLE_CDOPERADOR
                           AND AUTOFORNE.CDFORNECED     = C_ITEMCOLE_CDFORNECED
                           AND ITEMAUTF.CDPRODUTO       = C_ITEMCOLE_CDPRODUTO
                           AND ITEMAUTF.CDMARCA         = C_ITEMCOLE_CDMARCA;
                        IF V_COUNTTEMP > 0 THEN
                           V_IDAFINCONS := 'S';
                           V_ERRO       := 'S';
                        END IF;
                        /*CONSULTA QTDE DISPONIVEL*/
                        IF C_ITEMCOLE_IDNQTDEDISP = 'S' AND V_IDUTQTDISPGERAL = 'S'THEN
                           SELECT NVL(MAX(IDUTQTDISPFORN), 'N')
                             INTO V_IDUTQTDISPFORN
                             FROM FORNECEDOR
                            WHERE CDFORNECED  = C_ITEMCOLE_CDFORNECED;
                           /*GRAVA IDENTIFICADOR DE QTDE NAO DISPONIVEL NO FORNECEDOR*/
                           V_IDSEMQTDEDISP   := V_IDUTQTDISPFORN;
                           V_ERRO            := V_IDUTQTDISPFORN;
                        END IF;

                        /*GRAVA PRODUTO PREFERENCIAL*/
                        SELECT COUNT(1)
                          INTO V_COUNTTEMP
                          FROM (SELECT NVL(PARCMPSUP.IDUTPRODPREF, 'N') IDUTPRODPREF, PRODPREFMED.CDPRODPREF
                                  FROM PRODPREFMED, PARCMPSUP
                                 WHERE PARCMPSUP.CDFILIAL = C_LISTA.CDFILIAL
                                   AND PRODPREFMED.CDFILIAL = PARCMPSUP.CDFILIAL
                                   AND PRODPREFMED.CDPRODUTO = V_PRODSOLI_CDPRODUTOX
                                   AND V_IDENTIFICADOR_TMP = '1'
                                 UNION ALL
                                SELECT NVL(PARCMPSUP.IDUTPRODPREF, 'N') IDUTPRODPREF, PRODPREFMED.CDPRODPREF
                                  FROM PRODPREFMED, PARCMPSUP, FILIAL
                                 WHERE PARCMPSUP.CDFILIAL = C_LISTA.CDFILIAL
                                   AND PRODPREFMED.CDFILIAL = PARCMPSUP.CDFILIAL
                                   AND PRODPREFMED.CDPRODPREF = V_PRODSOLI_CDPRODUTOX
                                   AND PRODPREFMED.CDFILIAL = FILIAL.CDFILIAL
                                   AND V_IDENTIFICADOR_TMP = '2') A
                         WHERE A.IDUTPRODPREF = 'S'
                           AND TRIM(NVL(CDPRODPREF, ' ')) <> ' ';
                        IF V_COUNTTEMP > 0 THEN
                           SELECT COUNT(1)
                             INTO V_COUNTTEMP
                             FROM COLETAPR, ITEMCOLE, FILIAL, PRODUTO
                            WHERE ITEMCOLE.CDFILIAL       = V_CDFILCENTCMP
                              AND ITEMCOLE.NRCOLEPRECO    = C_ITEMCOLE_NRCOLEPRECO
                              AND ITEMCOLE.CDFORNECED     = C_ITEMCOLE_CDFORNECED
                              AND ITEMCOLE.CDREGIAO       = C_ITEMCOLE_CDREGIAO
                              AND ITEMCOLE.CDPRODUTO      = C_ITEMCOLE_CDPRODUTO
                              AND ITEMCOLE.CDMARCA        = C_ITEMCOLE_CDMARCA
                              AND ITEMCOLE.CDPRODUTO      = PRODUTO.CDPRODUTO
                              AND ITEMCOLE.CDREGIAO       = FILIAL.CDREGIAO
                              AND FILIAL.CDFILIAL         = C_LISTA.CDFILIAL
                              AND ITEMCOLE.VRPRECUNIITM  <> 0
                              AND COLETAPR.CDFILIAL       = ITEMCOLE.CDFILIAL
                              AND COLETAPR.NRCOLEPRECO    = ITEMCOLE.NRCOLEPRECO
                              AND EXISTS (SELECT '1'
                                            FROM PRODPREFMED, PRODUTO
                                           WHERE DECODE (NVL(V_IDENTIFICADOR_TMP , '1'), '1', PRODPREFMED.CDPRODUTO, PRODPREFMED.CDPRODPREF) = V_PRODSOLI_CDPRODUTOX
                                             AND PRODPREFMED.CDFILIAL  = C_LISTA.CDFILIAL
                                             AND PRODPREFMED.CDPRODPREF  = ITEMCOLE.CDPRODUTO);
                           IF V_COUNTTEMP = 0 THEN
                              V_IDPRODPREF := 'S';
                              V_ERRO := 'S';
                              SELECT PRODUTO.CDARVPROD, PRODUTO.NMPRODUTO
                                INTO V_CDARVPRODTMP, V_NMPRODUTOTMP
                                FROM PRODPREFMED, PRODUTO
                               WHERE PRODPREFMED.CDPRODUTO  = V_PRODSOLI_CDPRODUTOX
                                 AND PRODPREFMED.CDFILIAL   = C_LISTA.CDFILIAL
                                 AND PRODPREFMED.CDPRODPREF = PRODUTO.CDPRODUTO;
                              V_DSPRODPREF := V_CDARVPRODTMP || ' - ' || V_NMPRODUTOTMP;
                           END IF;
                        END IF;
                        /*CONSULTA QUALIFICACAO DE MARCA*/
                        SELECT COUNT(1)
                          INTO V_COUNTTEMP
                          FROM (SELECT PARASUPRI.CDFILIAL
                                  FROM COLETAPR, ITEMCOLE, QFOMARPROD, PARASUPRI
                                 WHERE ITEMCOLE.CDFILIAL        = V_CDFILCENTCMP
                                   AND ITEMCOLE.NRCOLEPRECO     = C_ITEMCOLE_NRCOLEPRECO
                                   AND ITEMCOLE.CDFORNECED      = C_ITEMCOLE_CDFORNECED
                                   AND ITEMCOLE.CDREGIAO        = C_ITEMCOLE_CDREGIAO
                                   AND ITEMCOLE.CDPRODUTO       = C_ITEMCOLE_CDPRODUTO
                                   AND ITEMCOLE.CDMARCA         = C_ITEMCOLE_CDMARCA
                                   AND ITEMCOLE.VRPRECUNIITM   <> 0
                                   AND COLETAPR.CDFILIAL        = ITEMCOLE.CDFILIAL
                                   AND COLETAPR.NRCOLEPRECO     = ITEMCOLE.NRCOLEPRECO
                                   AND (PARASUPRI.CDFILIAL      = ITEMCOLE.CDFILIAL)
                                   AND (QFOMARPROD.CDPRODUTO    = ITEMCOLE.CDPRODUTO)
                                   AND (QFOMARPROD.CDMARCA      = ITEMCOLE.CDMARCA)
                                   AND ((QFOMARPROD.IDAPRMARPRO = 'N'  AND QFOMARPROD.IDAUTMARPRO = 'S')
                                   OR  ((QFOMARPROD.IDAPRMARPRO = 'S') AND ((PARASUPRI.IDULTIDTVALQ = 'M'
                                   AND COLETAPR.DTCOLEPREC     <= LAST_DAY(QFOMARPROD.DTVALAPROVA))
                                   OR  (PARASUPRI.IDULTIDTVALQ  = 'D'
                                   AND COLETAPR.DTCOLEPREC     <= QFOMARPROD.DTVALAPROVA)) ) )
                                 UNION ALL
                                SELECT PARASUPRI.CDFILIAL
                                  FROM COLETAPR, ITEMCOLE, PARASUPRI
                                 WHERE ITEMCOLE.CDFILIAL       = V_CDFILCENTCMP
                                   AND ITEMCOLE.NRCOLEPRECO    = C_ITEMCOLE_NRCOLEPRECO
                                   AND ITEMCOLE.CDFORNECED     = C_ITEMCOLE_CDFORNECED
                                   AND ITEMCOLE.CDREGIAO       = C_ITEMCOLE_CDREGIAO
                                   AND ITEMCOLE.CDPRODUTO      = C_ITEMCOLE_CDPRODUTO
                                   AND ITEMCOLE.CDMARCA        = C_ITEMCOLE_CDMARCA
                                   AND (V_PRODSOLI_DTPROGENTR BETWEEN ITEMCOLE.DTINIVALITM AND DTFINVALITM)
                                   AND ITEMCOLE.VRPRECUNIITM  <> 0
                                   AND COLETAPR.CDFILIAL       = ITEMCOLE.CDFILIAL
                                   AND COLETAPR.NRCOLEPRECO    = ITEMCOLE.NRCOLEPRECO
                                   AND (PARASUPRI.CDFILIAL     = V_CDFILCENTCMP
                                   AND PARASUPRI.IDMARSEMQUA  <> 'S'
                                   AND NOT EXISTS (SELECT QFOMARPROD.CDMARCA
                                                     FROM QFOMARPROD
                                                    WHERE (QFOMARPROD.CDPRODUTO = ITEMCOLE.CDPRODUTO)
                                                      AND (QFOMARPROD.CDMARCA   = ITEMCOLE.CDMARCA))));
                        /*GRAVA IDENTIFICADOR DE QUALIFICACAO DE MARCA - QM*/
                        IF V_COUNTTEMP = 0 THEN
                           V_IDQUALIFMARCA := 'S';
                           V_ERRO          := 'S';
                        END IF;
                        /*CONSULTA QUALIFICACAO DE FORNECEDOR*/
                        SELECT COUNT(1)
                          INTO V_COUNTTEMP
                          FROM (SELECT ITEMCOLE.CDFILIAL
                                  FROM QUALIFICACAO, PARASUPRI, FORNECEDOR, COLETAPR, ITEMCOLE
                                 WHERE ITEMCOLE.CDFILIAL      = V_CDFILCENTCMP
                                   AND ITEMCOLE.NRCOLEPRECO   = C_ITEMCOLE_NRCOLEPRECO
                                   AND ITEMCOLE.CDFORNECED    = C_ITEMCOLE_CDFORNECED
                                   AND ITEMCOLE.CDREGIAO      = C_ITEMCOLE_CDREGIAO
                                   AND ITEMCOLE.CDPRODUTO     = C_ITEMCOLE_CDPRODUTO
                                   AND ITEMCOLE.CDMARCA       = C_ITEMCOLE_CDMARCA
                                   AND (V_PRODSOLI_DTPROGENTR BETWEEN ITEMCOLE.DTINIVALITM AND DTFINVALITM)
                                   AND ITEMCOLE.VRPRECUNIITM  <> 0
                                   AND COLETAPR.CDFILIAL      = ITEMCOLE.CDFILIAL
                                   AND COLETAPR.NRCOLEPRECO   = ITEMCOLE.NRCOLEPRECO
                                   AND FORNECEDOR.CDFORNECED  = ITEMCOLE.CDFORNECED
                                   AND PARASUPRI.CDFILIAL     = V_CDFILCENTCMP
                                   AND FORNECEDOR.CDQUALIF    = QUALIFICACAO.CDQUALIF
                                   AND (QUALIFICACAO.IDPERCOTCMP <> '2' AND (FORNECEDOR.IDFORNAUTO = 'S'
                                   OR  ((PARASUPRI.IDULTIDTVALQ = 'D'   AND COLETAPR.DTCOLEPREC < FORNECEDOR.DTVALQUALIF)
                                   OR  (PARASUPRI.IDULTIDTVALQ = 'M'    AND COLETAPR.DTCOLEPREC < LAST_DAY(FORNECEDOR.DTVALQUALIF)))))
                                 UNION ALL
                                SELECT ITEMCOLE.CDFILIAL
                                  FROM PARASUPRI, FORNECEDOR, COLETAPR, ITEMCOLE
                                 WHERE ITEMCOLE.CDFILIAL      = V_CDFILCENTCMP
                                   AND ITEMCOLE.NRCOLEPRECO   = C_ITEMCOLE_NRCOLEPRECO
                                   AND ITEMCOLE.CDFORNECED    = C_ITEMCOLE_CDFORNECED
                                   AND ITEMCOLE.CDREGIAO      = C_ITEMCOLE_CDREGIAO
                                   AND ITEMCOLE.CDPRODUTO     = C_ITEMCOLE_CDPRODUTO
                                   AND ITEMCOLE.CDMARCA       = C_ITEMCOLE_CDMARCA
                                   AND (V_PRODSOLI_DTPROGENTR BETWEEN ITEMCOLE.DTINIVALITM AND DTFINVALITM)
                                   AND ITEMCOLE.VRPRECUNIITM  <> 0
                                   AND COLETAPR.CDFILIAL      = ITEMCOLE.CDFILIAL
                                   AND COLETAPR.NRCOLEPRECO   = ITEMCOLE.NRCOLEPRECO
                                   AND FORNECEDOR.CDFORNECED  = ITEMCOLE.CDFORNECED
                                   AND PARASUPRI.CDFILIAL     = ITEMCOLE.CDFILIAL
                                   AND FORNECEDOR.CDQUALIF    IS NULL);
                        /*GRAVA IDENTIFICADOR DE QUALIFICACAO DE FORNECEDOR - QF*/
                        IF V_COUNTTEMP = 0 THEN
                           V_IDQUALIFFORN := 'S';
                           V_ERRO         := 'S';
                        END IF;
                        /*CONSULTA QUALIFICACAO DE PRDOUTO POR FORNECEDOR*/
                        SELECT COUNT(ITEMCOLE.CDFILIAL)
                          INTO V_COUNTTEMP
                          FROM COLETAPR, ITEMCOLE
                         WHERE ITEMCOLE.CDFILIAL       = V_CDFILCENTCMP
                           AND ITEMCOLE.NRCOLEPRECO    = C_ITEMCOLE_NRCOLEPRECO
                           AND ITEMCOLE.CDFORNECED     = C_ITEMCOLE_CDFORNECED
                           AND ITEMCOLE.CDREGIAO       = C_ITEMCOLE_CDREGIAO
                           AND ITEMCOLE.CDPRODUTO      = C_ITEMCOLE_CDPRODUTO
                           AND ITEMCOLE.CDMARCA        = C_ITEMCOLE_CDMARCA
                           AND (V_PRODSOLI_DTPROGENTR BETWEEN ITEMCOLE.DTINIVALITM AND DTFINVALITM)
                           AND ITEMCOLE.VRPRECUNIITM  <> 0
                           AND COLETAPR.CDFILIAL       = ITEMCOLE.CDFILIAL
                           AND COLETAPR.NRCOLEPRECO    = ITEMCOLE.NRCOLEPRECO
                           AND NOT EXISTS (SELECT QFOPRODFORN.CDPRODUTO
                                             FROM QFOPRODFORN, PARASUPRI
                                            WHERE PARASUPRI.CDFILIAL = ITEMCOLE.CDFILIAL
                                              AND (QFOPRODFORN.CDPRODUTO  = ITEMCOLE.CDPRODUTO)
                                              AND (QFOPRODFORN.CDFORNECED = ITEMCOLE.CDFORNECED)
                                              AND ((QFOPRODFORN.IDFORNAPROV = 'N'  AND QFOPRODFORN.IDFORNAUTOR = 'N')
                                              OR  ((QFOPRODFORN.IDFORNAPROV = 'S') AND ((PARASUPRI.IDULTIDTVALQ = 'M'
                                              AND COLETAPR.DTCOLEPREC > LAST_DAY(QFOPRODFORN.DTVALPRFORN)) OR (PARASUPRI.IDULTIDTVALQ = 'D'
                                              AND COLETAPR.DTCOLEPREC > QFOPRODFORN.DTVALPRFORN)) ) ));
                        /*GRAVA IDENTIFICADOR DE QUALIFICACAO DE PRODUTO PO FORNECEDOR - QPF*/
                        IF V_COUNTTEMP = 0 THEN
                           V_IDQFOPRODFORN := 'S';
                           V_ERRO          := 'S';
                        END IF;
                        /*CONSULTA FORNECEDOR NAO ATENDE FILIAL **/
                        SELECT COUNT(1)
                          INTO V_COUNTTEMP
                          FROM (SELECT COLETAPR.IDSITUCOLETA
                                  FROM COLETAPR, ITEMCOLE, REFORFIL
                                 WHERE ITEMCOLE.CDFILIAL       = V_CDFILCENTCMP
                                   AND ITEMCOLE.NRCOLEPRECO    = C_ITEMCOLE_NRCOLEPRECO
                                   AND ITEMCOLE.CDFORNECED     = C_ITEMCOLE_CDFORNECED
                                   AND ITEMCOLE.CDREGIAO       = C_ITEMCOLE_CDREGIAO
                                   AND ITEMCOLE.CDPRODUTO      = C_ITEMCOLE_CDPRODUTO
                                   AND ITEMCOLE.CDMARCA        = C_ITEMCOLE_CDMARCA
                                   AND ITEMCOLE.VRPRECUNIITM  <> 0
                                   AND (V_PRODSOLI_DTPROGENTR BETWEEN ITEMCOLE.DTINIVALITM AND DTFINVALITM)
                                   AND COLETAPR.CDFILIAL       = ITEMCOLE.CDFILIAL
                                   AND COLETAPR.NRCOLEPRECO    = ITEMCOLE.NRCOLEPRECO
                                   AND REFORFIL.CDFILIAL       = C_LISTA.CDFILIAL
                                   AND REFORFIL.CDFORNECED     = ITEMCOLE.CDFORNECED
                                   AND REFORFIL.CDPERIENTR     IS NULL);
                        /*GRAVA IDENTIFICADOR DE FORNECEDOR NAO ATENDE A FILIAL - FNF*/
                        IF V_COUNTTEMP <> 0 THEN
                           V_IDREFORFIL := 'S';
                           V_ERRO       := 'S';
                        END IF;
                        /*CONSULTA FORNECEDOR NAO ATENDE A REGIAO*/
                        SELECT COUNT(1)
                          INTO V_COUNTTEMP
                          FROM (SELECT COLETAPR.IDSITUCOLETA
                                  FROM COLETAPR, ITEMCOLE, REFOREG
                                 WHERE ITEMCOLE.CDFILIAL       = V_CDFILCENTCMP
                                   AND ITEMCOLE.NRCOLEPRECO    = C_ITEMCOLE_NRCOLEPRECO
                                   AND ITEMCOLE.CDFORNECED     = C_ITEMCOLE_CDFORNECED
                                   AND ITEMCOLE.CDREGIAO       = C_ITEMCOLE_CDREGIAO
                                   AND ITEMCOLE.CDPRODUTO      = C_ITEMCOLE_CDPRODUTO
                                   AND ITEMCOLE.CDMARCA        = C_ITEMCOLE_CDMARCA
                                   AND ITEMCOLE.VRPRECUNIITM  <> 0
                                   AND (V_PRODSOLI_DTPROGENTR BETWEEN ITEMCOLE.DTINIVALITM AND DTFINVALITM)
                                   AND COLETAPR.CDFILIAL       = ITEMCOLE.CDFILIAL
                                   AND COLETAPR.NRCOLEPRECO    = ITEMCOLE.NRCOLEPRECO
                                   AND REFOREG.CDREGIAO        = C_ITEMCOLE_CDREGIAO
                                   AND REFOREG.CDFORNECED      = ITEMCOLE.CDFORNECED);
                        /*GRAVA IDENTIFICADOR DE FORNECEDOR NAO ATENDE A  FILIAL - FNR*/
                        IF V_COUNTTEMP <> 0 THEN
                           V_IDREFOREG := 'S';
                           V_ERRO      := 'S';
                        END IF;
                        /*CONSULTA PRODUTO COMRPADO NA FILIAL*/
                        SELECT COUNT(1)
                          INTO V_COUNTTEMP
                          FROM (SELECT 'S' AS PRCMPFILI
                                  FROM PRODCMPFILI, PRODUTO P
                                 WHERE P_SISTEMA  = 'CMP'
                                   AND PRODCMPFILI.CDPRODUTO = P.CDPRODUTO
                                   AND PRODCMPFILI.CDFILIAL = C_LISTA.CDFILIAL
                                   AND C_ITEMCOLE_CDARVPROD LIKE P.CDARVPROD||'%'
                                   AND P.CDARVPROD > (SELECT NVL(MAX(PR.CDARVPROD), 0)
                                                        FROM PRODNCMP, PRODUTO PR
                                                       WHERE PRODNCMP.CDPRODUTO = PR.CDPRODUTO
                                                         AND C_ITEMCOLE_CDARVPROD LIKE PR.CDARVPROD||'%'
                                                         AND PRODNCMP.CDFILIAL = C_LISTA.CDFILIAL)
                                 UNION ALL
                                SELECT 'S' AS PRCMPFILI
                                  FROM PARAMGERAL
                                 WHERE P_SISTEMA = 'SUP'
                                   AND NOT EXISTS (SELECT 'S' AS PRCMPFILI
                                                     FROM PRODCMPFILI, PRODUTO P
                                                    WHERE PRODCMPFILI.CDPRODUTO = P.CDPRODUTO
                                                      AND PRODCMPFILI.CDFILIAL = C_LISTA.CDFILIAL
                                                      AND C_ITEMCOLE_CDARVPROD LIKE P.CDARVPROD||'%'
                                                      AND P.CDARVPROD > (SELECT NVL(MAX(PR.CDARVPROD), 0)
                                                                           FROM PRODNCMP, PRODUTO PR
                                                                          WHERE PRODNCMP.CDPRODUTO = PR.CDPRODUTO
                                                                            AND C_ITEMCOLE_CDARVPROD LIKE PR.CDARVPROD||'%'
                                                                            AND PRODNCMP.CDFILIAL = C_LISTA.CDFILIAL)));
                        /*GRAVA IDENTIFICADOR DE PRODUTO COMPRADO NA FILIAL - PCF*/
                        IF V_COUNTTEMP = 0 THEN
                           V_IDPRODCMPFILI := 'S';
                           V_ERRO          := 'S';
                        END IF;
                        /*CONSULTA PRODUTO NAO COMRPADO NA FILIAL*/
                        SELECT COUNT(1)
                          INTO V_COUNTTEMP
                          FROM PRODNCMP, PRODUTO P
                         WHERE PRODNCMP.CDPRODUTO = P.CDPRODUTO
                           AND PRODNCMP.CDFILIAL = C_LISTA.CDFILIAL
                           AND C_ITEMCOLE_CDARVPROD LIKE P.CDARVPROD||'%'
                           AND P.CDARVPROD > (SELECT NVL(MAX(PR.CDARVPROD), '0')
                                                FROM PRODCMPFILI, PRODUTO PR
                                               WHERE PRODCMPFILI.CDPRODUTO = PR.CDPRODUTO
                                                 AND C_ITEMCOLE_CDARVPROD LIKE PR.CDARVPROD||'%'
                                                 AND PRODCMPFILI.CDFILIAL = C_LISTA.CDFILIAL);
                        /*GRAVA IDENTIFICADOR DE PRODUTO NAO COMPRADO NA FILIAL - PNF*/
                        IF V_COUNTTEMP > 0 THEN
                           V_IDPRODNCOMP := 'S';
                           V_ERRO        := 'S';
                        END IF;
                        IF V_IDUTISTATCOT = 'S' THEN
                           /*CONSULTA SITUACAO DA COTACAO*/
                           SELECT COUNT(1)
                             INTO V_COUNTTEMP
                             FROM COLETAPR, ITEMCOLE, REFORFIL
                            WHERE ITEMCOLE.CDFILIAL      = V_CDFILCENTCMP
                              AND ITEMCOLE.NRCOLEPRECO   = C_ITEMCOLE_NRCOLEPRECO
                              AND ITEMCOLE.CDFORNECED    = C_ITEMCOLE_CDFORNECED
                              AND ITEMCOLE.CDREGIAO      = C_ITEMCOLE_CDREGIAO
                              AND ITEMCOLE.CDPRODUTO     = C_ITEMCOLE_CDPRODUTO
                              AND ITEMCOLE.CDMARCA       = C_ITEMCOLE_CDMARCA
                              AND ITEMCOLE.VRPRECUNIITM  <> 0
                              AND (V_PRODSOLI_DTPROGENTR BETWEEN ITEMCOLE.DTINIVALITM AND DTFINVALITM)
                              AND COLETAPR.CDFILIAL      = ITEMCOLE.CDFILIAL
                              AND COLETAPR.NRCOLEPRECO   = ITEMCOLE.NRCOLEPRECO
                              AND COLETAPR.IDSITUCOLETA  = 'C';
                           /*GRAVA IDENTIFICADOR DE PRODUTO NAO COMPRADO NA FILIAL - AND*/
                           IF V_COUNTTEMP = 0 THEN
                              V_IDSTATCOT := 'S';
                              V_ERRO      := 'S';
                           END IF;
                        END IF;
                        /*CONSULTA RELACIONAMENTO DE PRODUTO DO OL*/
                        IF V_IDENTIFICADOR_TMP = '2' THEN
                           SELECT COUNT(1)
                             INTO V_COUNTTEMP
                             FROM RELACPRODOL
                            WHERE CDPRARVORIG = C_ITEMCOLE_CDPRODUTO
                              AND CDMARCA     = CASE V_PRODSOLI_CDMARCA WHEN 'T' THEN CDMARCA ELSE V_PRODSOLI_CDMARCA END;
                           /*GRAVA IDENTIFICADOR DE AUSENCIA DE RELACIONAMENTO DE PRODUTO DO OL*/
                           IF V_COUNTTEMP = 0 THEN
                              V_RELACPRL  := 'S';
                              V_ERRO      := 'S';
                           END IF;
                        END IF;

                        /*CONSULTA ACORDO PARA FILIAL*/
                        IF C_ITEMCOLE_IDMONTLIS <> 'S' THEN
                           SELECT COUNT(1)
                             INTO V_COUNTTEMP
                             FROM PARTFILI
                            WHERE NRCOLEPRECO  = C_ITEMCOLE_NRCOLEPRECO
                              AND CDTIPPART    = '4'
                              AND CDPRODUTO    = C_ITEMCOLE_CDPRODUTO
                              AND CDFORNECED   = C_ITEMCOLE_CDFORNECED
                              AND CDFILCOTA    = V_CDFILCENTCMP
                              AND CDFILIAL     <> C_LISTA.CDFILIAL;
                           /*GRAVA IDENTIFICADOR DE AUSENCIA DE RELACIONAMENTO DE PRODUTO DO OL*/
                           IF V_COUNTTEMP >  0 THEN
                              SELECT COUNT(1)
                                INTO V_COUNTTEMP
                                FROM PARTFILI
                               WHERE NRCOLEPRECO  = C_ITEMCOLE_NRCOLEPRECO
                                 AND CDTIPPART    = '4'
                                 AND CDPRODUTO    = C_ITEMCOLE_CDPRODUTO
                                 AND CDFORNECED   = C_ITEMCOLE_CDFORNECED
                                 AND CDFILCOTA    = V_CDFILCENTCMP
                                 AND CDFILIAL     = C_LISTA.CDFILIAL;
                              IF V_COUNTTEMP =  0 THEN
                                 V_IDACORD   := 'S';
                                 V_ERRO      := 'S';
                              END IF;
                           END IF;
                        END IF;

                        /*GRAVA IDENTIFICADOR DE EMBALAGEM NAO UTILIZADA PARA COMPRA*/
                        IF V_IDENTIFICADOR_TMP = '2' THEN
                           IF V_IDPRCMPATIVO = 'N' THEN
                              V_IDEMBALAGEMUTIL   := 'S';
                              V_ERRO              := 'S';
                           END IF;
                           IF V_PRODSOLI_CDMARCA <> 'T' THEN
                              SELECT NVL(MAX(NMMARCA), ' ')
                                INTO V_NMMARCA
                                FROM MARCA
                               WHERE CDMARCA = V_PRODSOLI_CDMARCA;
                           END IF;
                        END IF;

                        V_DSIDCDTIPPART   := ''; /* V_DSIDCDTIPPART 100*/
                        V_DSPARTFILIMARCA := ''; /*V_DSPARTFILIMARCA 1000*/
                        V_DSPARTIFILINMFORN := ''/*V_DSPARTIFILINMFORN 1000*/;
                        /*INICIO DE CONSULTA DE PARTICULARIDADE*/
                        V_IDPARTFILI    := 'N';
                        V_DSIDCDTIPPART := '';
                        /*SIMULAR SITUACAO NO DELPHI EM QUE A PARTICULARIDADE E EXIBIDA APENAS PARA 4 OU 5*/
                        IF P_INDEXREL > '3' THEN
                           FOR C_PARTFILI IN (SELECT LISTAGG(PARTFILI.CDTIPPART, ',') WITHIN GROUP (ORDER BY PARTFILI.CDTIPPART) CDTIPPART,
                                                     LISTAGG(CASE WHEN PARTFILI.CDTIPPART = '1' THEN 'MO'
                                                                  WHEN PARTFILI.CDTIPPART = '2' THEN 'MP'
                                                                  WHEN PARTFILI.CDTIPPART = '3' THEN 'RM'
                                                                  WHEN PARTFILI.CDTIPPART = '4' THEN 'FO'
                                                                  WHEN PARTFILI.CDTIPPART = '5' THEN 'FM'
                                                                  WHEN PARTFILI.CDTIPPART = '6' THEN 'RF'
                                                                  WHEN PARTFILI.CDTIPPART = '7' THEN 'MFO'
                                                                  WHEN PARTFILI.CDTIPPART = '8' THEN 'MFP'
                                                                  WHEN PARTFILI.CDTIPPART = '9' THEN 'RMF'
                                                             END, ' ') WITHIN GROUP (ORDER BY PARTFILI.CDTIPPART) DSTIPPART,
                                                     LISTAGG(PARTFILI.CDMARCA, ',') WITHIN GROUP (ORDER BY PARTFILI.CDMARCA) CDMARCA,
                                                     LISTAGG(PARTFILI.CDMARCA||CASE NVL(PARTFILI.CDMARCA, 'X')
                                                                        WHEN 'X'
                                                                        THEN ''
                                                                        ELSE PARTFILI.CDTIPPART
                                                                      END, ',') WITHIN GROUP (ORDER BY PARTFILI.CDMARCA) LCDMARCA,
                                                     LISTAGG(PARTFILI.CDFORNECED, ',') WITHIN GROUP (ORDER BY PARTFILI.CDFORNECED)  CDFORNECED,
                                                     LISTAGG(PARTFILI.CDFORNECED||CASE NVL(PARTFILI.CDFORNECED, 'X')
                                                                            WHEN 'X'
                                                                            THEN ''
                                                                            ELSE PARTFILI.CDTIPPART
                                                                         END, ',') WITHIN GROUP (ORDER BY PARTFILI.CDFORNECED)  LCDFORNECED
                                                FROM PARTFILI
                                               WHERE PARTFILI.NRCOLEPRECO IS NULL
                                                 AND PARTFILI.CDFILIAL  = C_LISTA.CDFILIAL
                                                 AND PARTFILI.CDPRODUTO = C_ITEMCOLE_CDPRODUTO) LOOP
                              V_DSIDCDTIPPART := '('||SUBSTR(C_PARTFILI.DSTIPPART, 1, 100)||')';
                              IF INSTR(C_PARTFILI.CDTIPPART, '1') > 0  THEN
                                 /*GRAVA IDENTIFICADOR DE MARCA OBRIGATORIA - MO*/
                                 IF INSTR(C_PARTFILI.LCDMARCA, C_ITEMCOLE_CDMARCA||'1') = 0 THEN
                                    V_DSPARTFILIMARCA := C_PARTFILI.CDMARCA;
                                    V_IDPARTFILI := 'S';
                                 END IF;
                              END IF;
                              IF INSTR(C_PARTFILI.CDTIPPART, '2') > 0  THEN
                                 /*GRAVA IDENTIFICADOR DE MARCA PREFERENCIAL - MP*/
                                 IF INSTR(C_PARTFILI.LCDMARCA, C_ITEMCOLE_CDMARCA||'2') = 0 THEN
                                    V_DSPARTFILIMARCA := C_PARTFILI.CDMARCA;
                                    V_IDPARTFILI := 'S';
                                 END IF;
                              END IF;
                              IF INSTR(C_PARTFILI.CDTIPPART, '3') > 0  THEN
                                 /*GRAVA IDENTIFICADOR DE RESTICAO A MARCA - RM*/
                                 IF INSTR(C_PARTFILI.LCDMARCA, C_ITEMCOLE_CDMARCA||'3') > 0 THEN
                                    V_DSPARTFILIMARCA := C_PARTFILI.CDMARCA;
                                    V_IDPARTFILI := 'S';
                                 END IF;
                              END IF;
                              IF INSTR(C_PARTFILI.CDTIPPART, '4') > 0  THEN
                                 /*GRAVA IDENTIFICADOR DE FORNECEDOR OBRIGATORIO - FO*/
                                 IF INSTR(C_PARTFILI.LCDFORNECED, C_ITEMCOLE_CDFORNECED||'4') = 0 THEN
                                    V_DSPARTIFILINMFORN := C_PARTFILI.CDFORNECED;
                                    V_IDPARTFILI := 'S';
                                 END IF;
                              END IF;
                              IF INSTR(C_PARTFILI.CDTIPPART, '5') > 0  THEN
                                 /*GRAVA IDENTIFICADOR DE FORNECEDOR PREFERENCIAO - FP*/
                                 IF INSTR(C_PARTFILI.LCDFORNECED, C_ITEMCOLE_CDFORNECED||'5') = 0 THEN
                                    V_DSPARTIFILINMFORN := C_PARTFILI.CDFORNECED;
                                    V_IDPARTFILI := 'S';
                                 END IF;
                              END IF;
                              IF INSTR(C_PARTFILI.CDTIPPART, '6') > 0 THEN
                                 /*GRAVA IDENTIFICADOR DE RESTICAO AO FORNECEDOR - RF*/
                                 IF INSTR(C_PARTFILI.LCDFORNECED, C_ITEMCOLE_CDFORNECED||'6') > 0 THEN
                                    V_DSPARTIFILINMFORN := C_PARTFILI.CDFORNECED;
                                    V_IDPARTFILI := 'S';
                                 END IF;
                              END IF;
                              IF INSTR(C_PARTFILI.CDTIPPART, '7') > 0  THEN
                                 /*GRAVA IDENTIFICADOR DE MARCA/FORNECEDOR OBRIGATORIO - MFO*/
                                 IF ((INSTR(C_PARTFILI.LCDFORNECED, C_ITEMCOLE_CDFORNECED||'7') = 0) OR
                                     (INSTR(C_PARTFILI.LCDMARCA, C_ITEMCOLE_CDMARCA||'7') = 0)) THEN
                                    V_DSPARTFILIMARCA    := C_PARTFILI.CDMARCA;
                                    V_DSPARTIFILINMFORN  := C_PARTFILI.CDFORNECED;
                                    V_IDPARTFILI := 'S';
                                 END IF;
                              END IF;
                              IF INSTR(C_PARTFILI.CDTIPPART, '8') > 0  THEN
                                 /*GRAVA IDENTIFICADOR DE MARCA/FORNECEDOR PREFERENCIAL - MFP*/
                                 IF ((INSTR(C_PARTFILI.LCDFORNECED, C_ITEMCOLE_CDFORNECED||'8') = 0) OR
                                     (INSTR(C_PARTFILI.LCDMARCA, C_ITEMCOLE_CDMARCA||'8') = 0)) THEN
                                    V_DSPARTFILIMARCA    := C_PARTFILI.CDMARCA;
                                    V_DSPARTIFILINMFORN  := C_PARTFILI.CDFORNECED;
                                    V_IDPARTFILI := 'S';
                                 END IF;
                              END IF;
                              IF INSTR(C_PARTFILI.CDTIPPART, '9') > 0  THEN
                                 /*GRAVA IDENTIFICADOR DE RETICAO A MARCA/FORNECEDOR RMF*/
                                 IF ((INSTR(C_PARTFILI.LCDFORNECED, C_ITEMCOLE_CDFORNECED||'9') > 0) OR
                                     (INSTR(C_PARTFILI.LCDMARCA, C_ITEMCOLE_CDMARCA||'9') > 0)) THEN
                                    V_DSPARTFILIMARCA    := C_PARTFILI.CDMARCA;
                                    V_DSPARTIFILINMFORN  := C_PARTFILI.CDFORNECED;
                                    V_IDPARTFILI := 'S';
                                 END IF;
                              END IF;
                              IF ((V_ERRO = 'N') AND (V_IDPARTFILI = 'N')) THEN
                                 V_DSIDCDTIPPART   := '';
                                 V_DSPARTFILIMARCA    := '';
                                 V_DSPARTIFILINMFORN := '';
                                 EXIT;
                              ELSIF V_IDPARTFILI = 'S' THEN
                                 IF V_DSPARTFILIMARCA IS NOT NULL THEN
                                    SELECT SUBSTR(LISTAGG(CDMARCA||' - '||NMMARCA, ',') WITHIN GROUP (ORDER BY CDMARCA), 1, 1000)
                                      INTO V_DSPARTFILIMARCA
                                      FROM MARCA
                                     WHERE INSTR(C_PARTFILI.CDMARCA, CDMARCA) > 0;
                                 END IF;
                                 IF V_DSPARTIFILINMFORN IS NOT NULL THEN
                                    SELECT SUBSTR(LISTAGG(NRINSJURFORN||' - '||NMFANTFORN, ',') WITHIN GROUP (ORDER BY NRINSJURFORN), 1, 1000)
                                      INTO V_DSPARTIFILINMFORN
                                      FROM FORNECEDOR
                                     WHERE INSTR(C_PARTFILI.CDFORNECED, CDFORNECED) > 0;
                                 END IF;
                              END IF;
                           END LOOP; /*FIM DE CONSULTA DE PARTICULARIDADE*/
                        END IF;
                        IF ((V_ERRO = 'N') AND (V_IDPARTFILI = 'N')) THEN
                           V_IDAFINCONS           := 'N';
                           V_IDPARTFILI           := 'N';
                           V_IDQUALIFMARCA        := 'N';
                           V_IDPRODNCOMP          := 'N';
                           V_IDREFORFIL           := 'N';
                           V_IDQUALIFFORN         := 'N';
                           V_IDPRODCMPFILI        := 'N';
                           V_IDREFOREG            := 'N';
                           V_IDQFOPRODFORN        := 'N';
                           V_ATENDIDA             := 'S';
                           V_IDPRODPREF           := 'N';
                           V_IDSTATCOT            := 'N';
                           V_IDSEMQTDEDISP        := 'N';
                           V_RELACPRL             := 'N';
                           V_IDACORD              := 'N';
                           V_IDEMBALAGEMUTIL      := 'N';
                           EXIT;
                        END IF;
                     END LOOP;
                     CLOSE C_ITEMCOLE;
                  END IF;
               END IF;
               OUT_RECORD.CDREGIAO             := V_CDREGIAO;
               OUT_RECORD.NMREGIAO             := V_NMREGIAO;
               OUT_RECORD.IDFUNCAOFILI         := V_IDFUNCAOFILI;
               OUT_RECORD.CDOPERADOR           := V_CDOPERADOR;
               OUT_RECORD.NMOPERADOR           := V_NMOPERADOR;
               OUT_RECORD.CDFILIAL             := V_CDFILIAL;
               OUT_RECORD.NMFILIAL             := V_NMFILIAL;
               OUT_RECORD.DTPROGENTR           := V_DTPROGENTR;
               OUT_RECORD.CDPRODESTO           := V_CDPRODESTO;
               OUT_RECORD.CDARVPROD            := V_CDARVPROD;
               OUT_RECORD.NMPRODUTO            := V_NMPRODUTO;
               OUT_RECORD.QTACOMPRAR           := V_QTACOMPRAR;
               OUT_RECORD.SGUNIDADE            := V_SGUNIDADE;
               OUT_RECORD.DATAINI              := V_DATAINI;
               OUT_RECORD.DATAFIN              := V_DATAFIN;
               OUT_RECORD.IDAFINCONS           := V_IDAFINCONS;
               OUT_RECORD.IDPARTFILI           := V_IDPARTFILI;
               OUT_RECORD.IDQUALIFMARCA        := V_IDQUALIFMARCA;
               OUT_RECORD.IDPRODNCOMP          := V_IDPRODNCOMP;
               OUT_RECORD.IDREFORFIL           := V_IDREFORFIL;
               OUT_RECORD.IDQUALIFFORN         := V_IDQUALIFFORN;
               OUT_RECORD.IDPRODCMPFILI        := V_IDPRODCMPFILI;
               IF (V_PRODSOLI_IDITMCONS = 'S') AND (P_VD_IDITMCONS = 'S') THEN
                  OUT_RECORD.IDCOTACAO         := 'S';
               ELSE
                  OUT_RECORD.IDCOTACAO         := V_IDCOTACAO;
               END IF;
               OUT_RECORD.IDREFOREG            := V_IDREFOREG;
               OUT_RECORD.IDQFOPRODFORN        := V_IDQFOPRODFORN;
               OUT_RECORD.SISTEMA              := V_SISTEMA;
               OUT_RECORD.ATENDIDA             := V_ATENDIDA;
               OUT_RECORD.IDPRODPREF           := V_IDPRODPREF;
               OUT_RECORD.IDSTATCOT            := V_IDSTATCOT;
               OUT_RECORD.IDSEMQTDEDISP        := V_IDSEMQTDEDISP;
               OUT_RECORD.IDOPERADOROL         := V_IDOPERADOROL;
               OUT_RECORD.NRCOMPRA             := V_NRCOMPRA;
               OUT_RECORD.DSPRODPREF           := V_DSPRODPREF;
               OUT_RECORD.DSIDCDTIPPART        := V_DSIDCDTIPPART;
               OUT_RECORD.DSPARTFILIMARCA      := V_DSPARTFILIMARCA;
               OUT_RECORD.DSPARTIFILINRINSFORN := V_DSPARTIFILINRINSFORN;
               OUT_RECORD.DSPARTIFILINMFORN    := V_DSPARTIFILINMFORN;
               OUT_RECORD.DSIDFORN             := V_DSIDFORN;
               OUT_RECORD.LISTA_NRSOLICMP      := V_LISTA_NRSOLICMP;
               OUT_RECORD.IDRELACPRODOL        := V_RELACPRL;
               OUT_RECORD.IDACORDO             := V_IDACORD;
               OUT_RECORD.IDPRCMPATIVO         := V_IDEMBALAGEMUTIL;
               OUT_RECORD.CDMARCA              := V_CDMARCA;
               OUT_RECORD.NMMARCA              := V_NMMARCA;
               OUT_RECORD.IDITMCONS            := V_PRODSOLI_IDITMCONS;
               PIPE ROW (OUT_RECORD);
            END LOOP;
            CLOSE C_AUX;
         END IF;
      END LOOP;
      CLOSE C_PRODSOLI;
   END LOOP;
END;
/