DROP FUNCTION LISTA_ALMOXLOCAL_PRODUTO
/
DROP TYPE ALMOXLOCALPROD_TABLE
/
DROP TYPE ALMOXLOCALPROD_TYPE 
/

CREATE TYPE ALMOXLOCALPROD_TYPE AS
OBJECT (CDFILIAL        VARCHAR2(04),
        NMFILIAL        VARCHAR2(30),
        CDPRODUTO       VARCHAR2(10),
        CDARVPROD       VARCHAR2(20),
        NMPRODUTO       VARCHAR2(50),
        IDENTIFICADOR   VARCHAR2(10), 
        CDALMOXARIFADO  VARCHAR2(06),
        NMALMOXARIFADO  VARCHAR2(30),
        CDLOCALIZACAO   VARCHAR2(06),
        NMLOCALIZACAO   VARCHAR2(30));
/

CREATE TYPE ALMOXLOCALPROD_TABLE AS
TABLE OF ALMOXLOCALPROD_TYPE
/

CREATE OR REPLACE FUNCTION LISTA_ALMOXLOCAL_PRODUTO
(P_CDFILIAL      IN FILIAL.CDFILIAL%TYPE,
 P_CDPRODINICIAL IN PRODUTO.CDARVPROD%TYPE,
 P_CDPRODFINAL   IN PRODUTO.CDARVPROD%TYPE) RETURN ALMOXLOCALPROD_TABLE PIPELINED
IS
   V_NMFILIAL      VARCHAR2(30);
   V_CDALMOXARIFE  VARCHAR2(06);
   V_DSALMOXARIFE  VARCHAR2(30);
   V_CDLOCALESTOQ  VARCHAR2(06);
   V_DSLOCALESTOQ  VARCHAR2(30);
   OUT_RECORD ALMOXLOCALPROD_TYPE := ALMOXLOCALPROD_TYPE (NULL, NULL,
                                                          NULL, NULL, NULL,
                                                          NULL,
                                                          NULL,NULL,
                                                          NULL,NULL);
BEGIN
   SELECT MAX(NMFILIAL)
     INTO V_NMFILIAL
     FROM FILIAL
    WHERE CDFILIAL = P_CDFILIAL;

   FOR C_PRODUTOS IN (SELECT CDPRODUTO, CDARVPROD, NMPRODUTO
                        FROM PRODUTO
                       WHERE CDARVPROD BETWEEN P_CDPRODINICIAL AND P_CDPRODFINAL
                         AND CDNVPRODUTO = (SELECT MAX(CDNVPRODUTO)
                                              FROM PRODUTO)
                      ) LOOP
      -- Almoxarifado/Localizacao Materia-Prima / Insumos para Producao
      SELECT MAX(PF.CDALMOXINSPR), MAX(A.DSALMOXARIFE), MAX(PF.CDLOCALINSPR), MAX(L.DSLOCALESTOQ)
        INTO V_CDALMOXARIFE, V_DSALMOXARIFE, V_CDLOCALESTOQ, V_DSLOCALESTOQ
        FROM PRODFILI PF, ALMOXARIFADO A, LOCALESTOQUE L
       WHERE PF.CDALMOXINSPR IS NOT NULL
         AND PF.CDFILIAL = P_CDFILIAL
         AND PF.CDPRODUTO = C_PRODUTOS.CDPRODUTO
         AND PF.CDFILIAL = A.CDFILIAL
         AND PF.CDALMOXINSPR = A.CDALMOXARIFE
         AND PF.CDFILIAL = L.CDFILIAL(+)
         AND PF.CDALMOXINSPR = L.CDALMOXARIFE(+)
         AND PF.CDLOCALINSPR = L.CDLOCALESTOQ(+);
      IF (V_CDALMOXARIFE IS NOT NULL) THEN
         OUT_RECORD.CDFILIAL       := P_CDFILIAL;
         OUT_RECORD.NMFILIAL       := V_NMFILIAL;
         OUT_RECORD.CDPRODUTO      := C_PRODUTOS.CDPRODUTO;
         OUT_RECORD.CDARVPROD      := C_PRODUTOS.CDARVPROD;
         OUT_RECORD.NMPRODUTO      := C_PRODUTOS.NMPRODUTO;
         OUT_RECORD.IDENTIFICADOR  := 'INSPR';
         OUT_RECORD.CDALMOXARIFADO := V_CDALMOXARIFE;
         OUT_RECORD.NMALMOXARIFADO := V_DSALMOXARIFE;
         OUT_RECORD.CDLOCALIZACAO  := V_CDLOCALESTOQ;
         OUT_RECORD.NMLOCALIZACAO  := V_DSLOCALESTOQ;
         PIPE ROW (OUT_RECORD);
      END IF;

      -- Almoxarifado/Localizacao Produto Semiacabado
      SELECT MAX(PF.CDALMOXPRSEMACA) , MAX(A.DSALMOXARIFE), MAX(PF.CDLOCALPRSEMACA)  , MAX(L.DSLOCALESTOQ)
        INTO V_CDALMOXARIFE, V_DSALMOXARIFE, V_CDLOCALESTOQ, V_DSLOCALESTOQ
        FROM PRODFILI PF, ALMOXARIFADO A, LOCALESTOQUE L
       WHERE PF.CDALMOXPRSEMACA  IS NOT NULL
         AND PF.CDFILIAL = P_CDFILIAL
         AND PF.CDPRODUTO = C_PRODUTOS.CDPRODUTO
         AND PF.CDFILIAL = A.CDFILIAL
         AND PF.CDALMOXPRSEMACA  = A.CDALMOXARIFE
         AND PF.CDFILIAL = L.CDFILIAL(+)
         AND PF.CDALMOXPRSEMACA  = L.CDALMOXARIFE(+)
         AND PF.CDLOCALPRSEMACA   = L.CDLOCALESTOQ(+);
      IF (V_CDALMOXARIFE IS NOT NULL) THEN
         OUT_RECORD.CDFILIAL       := P_CDFILIAL;
         OUT_RECORD.NMFILIAL       := V_NMFILIAL;
         OUT_RECORD.CDPRODUTO      := C_PRODUTOS.CDPRODUTO;
         OUT_RECORD.CDARVPROD      := C_PRODUTOS.CDARVPROD;
         OUT_RECORD.NMPRODUTO      := C_PRODUTOS.NMPRODUTO;
         OUT_RECORD.IDENTIFICADOR  := 'SEMACA';
         OUT_RECORD.CDALMOXARIFADO := V_CDALMOXARIFE;
         OUT_RECORD.NMALMOXARIFADO := V_DSALMOXARIFE;
         OUT_RECORD.CDLOCALIZACAO  := V_CDLOCALESTOQ;
         OUT_RECORD.NMLOCALIZACAO  := V_DSLOCALESTOQ;
         PIPE ROW (OUT_RECORD);
      END IF;

      -- Almoxarifado/Localizacao Materia-Prima Piloto / Insumos para a Producao
      SELECT MAX(PF.CDALMOXINSPRPIL)  , MAX(A.DSALMOXARIFE), MAX(PF.CDLOCALINSPRPIL)  , MAX(L.DSLOCALESTOQ)
        INTO V_CDALMOXARIFE, V_DSALMOXARIFE, V_CDLOCALESTOQ, V_DSLOCALESTOQ
        FROM PRODFILI PF, ALMOXARIFADO A, LOCALESTOQUE L
       WHERE PF.CDALMOXINSPRPIL   IS NOT NULL
         AND PF.CDFILIAL = P_CDFILIAL
         AND PF.CDPRODUTO = C_PRODUTOS.CDPRODUTO
         AND PF.CDFILIAL = A.CDFILIAL
         AND PF.CDALMOXINSPRPIL   = A.CDALMOXARIFE
         AND PF.CDFILIAL = L.CDFILIAL(+)
         AND PF.CDALMOXINSPRPIL   = L.CDALMOXARIFE(+)
         AND PF.CDLOCALINSPRPIL   = L.CDLOCALESTOQ(+);
      IF (V_CDALMOXARIFE IS NOT NULL) THEN
         OUT_RECORD.CDFILIAL       := P_CDFILIAL;
         OUT_RECORD.NMFILIAL       := V_NMFILIAL;
         OUT_RECORD.CDPRODUTO      := C_PRODUTOS.CDPRODUTO;
         OUT_RECORD.CDARVPROD      := C_PRODUTOS.CDARVPROD;
         OUT_RECORD.NMPRODUTO      := C_PRODUTOS.NMPRODUTO;
         OUT_RECORD.IDENTIFICADOR  := 'PRPIL';
         OUT_RECORD.CDALMOXARIFADO := V_CDALMOXARIFE;
         OUT_RECORD.NMALMOXARIFADO := V_DSALMOXARIFE;
         OUT_RECORD.CDLOCALIZACAO  := V_CDLOCALESTOQ;
         OUT_RECORD.NMLOCALIZACAO  := V_DSLOCALESTOQ;
         PIPE ROW (OUT_RECORD);
      END IF;

      -- Almoxarifado/Localizacao Materia-Prima/ Insumos Em Producao
      SELECT MAX(PF.CDALMOXPROD)  , MAX(A.DSALMOXARIFE), MAX(PF.CDLOCPROD), MAX(L.DSLOCALESTOQ)
        INTO V_CDALMOXARIFE, V_DSALMOXARIFE, V_CDLOCALESTOQ, V_DSLOCALESTOQ
        FROM PRODFILI PF, ALMOXARIFADO A, LOCALESTOQUE L
       WHERE PF.CDALMOXPROD        IS NOT NULL
         AND PF.CDFILIAL = P_CDFILIAL
         AND PF.CDPRODUTO = C_PRODUTOS.CDPRODUTO
         AND PF.CDFILIAL = A.CDFILIAL
         AND PF.CDALMOXPROD        = A.CDALMOXARIFE
         AND PF.CDFILIAL = L.CDFILIAL(+)
         AND PF.CDALMOXPROD        = L.CDALMOXARIFE(+)
         AND PF.CDLOCPROD           = L.CDLOCALESTOQ(+);
      IF (V_CDALMOXARIFE IS NOT NULL) THEN
         OUT_RECORD.CDFILIAL       := P_CDFILIAL;
         OUT_RECORD.NMFILIAL       := V_NMFILIAL;
         OUT_RECORD.CDPRODUTO      := C_PRODUTOS.CDPRODUTO;
         OUT_RECORD.CDARVPROD      := C_PRODUTOS.CDARVPROD;
         OUT_RECORD.NMPRODUTO      := C_PRODUTOS.NMPRODUTO;
         OUT_RECORD.IDENTIFICADOR  := 'PROD';
         OUT_RECORD.CDALMOXARIFADO := V_CDALMOXARIFE;
         OUT_RECORD.NMALMOXARIFADO := V_DSALMOXARIFE;
         OUT_RECORD.CDLOCALIZACAO  := V_CDLOCALESTOQ;
         OUT_RECORD.NMLOCALIZACAO  := V_DSLOCALESTOQ;
         PIPE ROW (OUT_RECORD);
      END IF;

      -- Almoxarifado/Localizacao Materia-Prima Piloto / Insumos Em Producao
      SELECT MAX(PF.CDALMOXPRODPL) , MAX(A.DSALMOXARIFE), MAX(PF.CDLOCPRODPL) , MAX(L.DSLOCALESTOQ)
        INTO V_CDALMOXARIFE, V_DSALMOXARIFE, V_CDLOCALESTOQ, V_DSLOCALESTOQ
        FROM PRODFILI PF, ALMOXARIFADO A, LOCALESTOQUE L
       WHERE PF.CDALMOXPRODPL           IS NOT NULL
         AND PF.CDFILIAL = P_CDFILIAL
         AND PF.CDPRODUTO = C_PRODUTOS.CDPRODUTO
         AND PF.CDFILIAL = A.CDFILIAL
         AND PF.CDALMOXPRODPL           = A.CDALMOXARIFE
         AND PF.CDFILIAL = L.CDFILIAL(+)
         AND PF.CDALMOXPRODPL           = L.CDALMOXARIFE(+)
         AND PF.CDLOCPRODPL             = L.CDLOCALESTOQ(+);
      IF (V_CDALMOXARIFE IS NOT NULL) THEN
         OUT_RECORD.CDFILIAL       := P_CDFILIAL;
         OUT_RECORD.NMFILIAL       := V_NMFILIAL;
         OUT_RECORD.CDPRODUTO      := C_PRODUTOS.CDPRODUTO;
         OUT_RECORD.CDARVPROD      := C_PRODUTOS.CDARVPROD;
         OUT_RECORD.NMPRODUTO      := C_PRODUTOS.NMPRODUTO;
         OUT_RECORD.IDENTIFICADOR  := 'PRODPL';
         OUT_RECORD.CDALMOXARIFADO := V_CDALMOXARIFE;
         OUT_RECORD.NMALMOXARIFADO := V_DSALMOXARIFE;
         OUT_RECORD.CDLOCALIZACAO  := V_CDLOCALESTOQ;
         OUT_RECORD.NMLOCALIZACAO  := V_DSLOCALESTOQ;
         PIPE ROW (OUT_RECORD);
      END IF;

      -- Almoxarifado/Localizacao Produto Acabado
      SELECT MAX(PF.CDALMOXPRACA) , MAX(A.DSALMOXARIFE), MAX(PF.CDLOCALPRACA) , MAX(L.DSLOCALESTOQ)
        INTO V_CDALMOXARIFE, V_DSALMOXARIFE, V_CDLOCALESTOQ, V_DSLOCALESTOQ
        FROM PRODFILI PF, ALMOXARIFADO A, LOCALESTOQUE L
       WHERE PF.CDALMOXPRACA    IS NOT NULL
         AND PF.CDFILIAL = P_CDFILIAL
         AND PF.CDPRODUTO = C_PRODUTOS.CDPRODUTO
         AND PF.CDFILIAL = A.CDFILIAL
         AND PF.CDALMOXPRACA          = A.CDALMOXARIFE
         AND PF.CDFILIAL = L.CDFILIAL(+)
         AND PF.CDALMOXPRACA               = L.CDALMOXARIFE(+)
         AND PF.CDLOCALPRACA               = L.CDLOCALESTOQ(+);
      IF (V_CDALMOXARIFE IS NOT NULL) THEN
         OUT_RECORD.CDFILIAL       := P_CDFILIAL;
         OUT_RECORD.NMFILIAL       := V_NMFILIAL;
         OUT_RECORD.CDPRODUTO      := C_PRODUTOS.CDPRODUTO;
         OUT_RECORD.CDARVPROD      := C_PRODUTOS.CDARVPROD;
         OUT_RECORD.NMPRODUTO      := C_PRODUTOS.NMPRODUTO;
         OUT_RECORD.IDENTIFICADOR  := 'PRACA';
         OUT_RECORD.CDALMOXARIFADO := V_CDALMOXARIFE;
         OUT_RECORD.NMALMOXARIFADO := V_DSALMOXARIFE;
         OUT_RECORD.CDLOCALIZACAO  := V_CDLOCALESTOQ;
         OUT_RECORD.NMLOCALIZACAO  := V_DSLOCALESTOQ;
         PIPE ROW (OUT_RECORD);
      END IF;

      -- Almoxarifado/Localizacao Expedicao / Reserva de Pedidos
      SELECT MAX(PF.CDALMOXPRCLI) , MAX(A.DSALMOXARIFE), MAX(PF.CDLOCALPRCLI) , MAX(L.DSLOCALESTOQ)
        INTO V_CDALMOXARIFE, V_DSALMOXARIFE, V_CDLOCALESTOQ, V_DSLOCALESTOQ
        FROM PRODFILI PF, ALMOXARIFADO A, LOCALESTOQUE L
       WHERE PF.CDALMOXPRCLI    IS NOT NULL
         AND PF.CDFILIAL = P_CDFILIAL
         AND PF.CDPRODUTO = C_PRODUTOS.CDPRODUTO
         AND PF.CDFILIAL = A.CDFILIAL
         AND PF.CDALMOXPRCLI          = A.CDALMOXARIFE
         AND PF.CDFILIAL = L.CDFILIAL(+)
         AND PF.CDALMOXPRCLI               = L.CDALMOXARIFE(+)
         AND PF.CDLOCALPRCLI               = L.CDLOCALESTOQ(+);
      IF (V_CDALMOXARIFE IS NOT NULL) THEN
         OUT_RECORD.CDFILIAL       := P_CDFILIAL;
         OUT_RECORD.NMFILIAL       := V_NMFILIAL;
         OUT_RECORD.CDPRODUTO      := C_PRODUTOS.CDPRODUTO;
         OUT_RECORD.CDARVPROD      := C_PRODUTOS.CDARVPROD;
         OUT_RECORD.NMPRODUTO      := C_PRODUTOS.NMPRODUTO;
         OUT_RECORD.IDENTIFICADOR  := 'PRCLI';
         OUT_RECORD.CDALMOXARIFADO := V_CDALMOXARIFE;
         OUT_RECORD.NMALMOXARIFADO := V_DSALMOXARIFE;
         OUT_RECORD.CDLOCALIZACAO  := V_CDLOCALESTOQ;
         OUT_RECORD.NMLOCALIZACAO  := V_DSLOCALESTOQ;
         PIPE ROW (OUT_RECORD);
      END IF;

      -- Almoxarifado/Localizacao Quarentena - Materia-Prima / Insumos
      SELECT MAX(PF.CDALMOXARIFE) , MAX(A.DSALMOXARIFE), MAX(PF.CDLOCALESTOQ) , MAX(L.DSLOCALESTOQ)
        INTO V_CDALMOXARIFE, V_DSALMOXARIFE, V_CDLOCALESTOQ, V_DSLOCALESTOQ
        FROM PRODFILI PF, ALMOXARIFADO A, LOCALESTOQUE L
       WHERE PF.CDALMOXARIFE    IS NOT NULL
         AND PF.CDFILIAL = P_CDFILIAL
         AND PF.CDPRODUTO = C_PRODUTOS.CDPRODUTO
         AND PF.CDFILIAL = A.CDFILIAL
         AND PF.CDALMOXARIFE          = A.CDALMOXARIFE
         AND PF.CDFILIAL = L.CDFILIAL(+)
         AND PF.CDALMOXARIFE               = L.CDALMOXARIFE(+)
         AND PF.CDLOCALESTOQ               = L.CDLOCALESTOQ(+);
      IF (V_CDALMOXARIFE IS NOT NULL) THEN
         OUT_RECORD.CDFILIAL       := P_CDFILIAL;
         OUT_RECORD.NMFILIAL       := V_NMFILIAL;
         OUT_RECORD.CDPRODUTO      := C_PRODUTOS.CDPRODUTO;
         OUT_RECORD.CDARVPROD      := C_PRODUTOS.CDARVPROD;
         OUT_RECORD.NMPRODUTO      := C_PRODUTOS.NMPRODUTO;
         OUT_RECORD.IDENTIFICADOR  := 'MPQUAR';
         OUT_RECORD.CDALMOXARIFADO := V_CDALMOXARIFE;
         OUT_RECORD.NMALMOXARIFADO := V_DSALMOXARIFE;
         OUT_RECORD.CDLOCALIZACAO  := V_CDLOCALESTOQ;
         OUT_RECORD.NMLOCALIZACAO  := V_DSLOCALESTOQ;
         PIPE ROW (OUT_RECORD);
      END IF;

      -- Almoxarifado/Localizacao Quarentena - Materia-Prima Produto Piloto
      SELECT MAX(PF.CDALMOXQUAMPPIL) , MAX(A.DSALMOXARIFE), MAX(PF.CDLOCALQUAMPPIL) , MAX(L.DSLOCALESTOQ)
        INTO V_CDALMOXARIFE, V_DSALMOXARIFE, V_CDLOCALESTOQ, V_DSLOCALESTOQ
        FROM PRODFILI PF, ALMOXARIFADO A, LOCALESTOQUE L
       WHERE PF.CDALMOXQUAMPPIL     IS NOT NULL
         AND PF.CDFILIAL = P_CDFILIAL
         AND PF.CDPRODUTO = C_PRODUTOS.CDPRODUTO
         AND PF.CDFILIAL = A.CDFILIAL
         AND PF.CDALMOXQUAMPPIL           = A.CDALMOXARIFE
         AND PF.CDFILIAL = L.CDFILIAL(+)
         AND PF.CDALMOXQUAMPPIL                = L.CDALMOXARIFE(+)
         AND PF.CDLOCALQUAMPPIL                 = L.CDLOCALESTOQ(+);
      IF (V_CDALMOXARIFE IS NOT NULL) THEN
         OUT_RECORD.CDFILIAL       := P_CDFILIAL;
         OUT_RECORD.NMFILIAL       := V_NMFILIAL;
         OUT_RECORD.CDPRODUTO      := C_PRODUTOS.CDPRODUTO;
         OUT_RECORD.CDARVPROD      := C_PRODUTOS.CDARVPROD;
         OUT_RECORD.NMPRODUTO      := C_PRODUTOS.NMPRODUTO;
         OUT_RECORD.IDENTIFICADOR  := 'QUAMPPIL';
         OUT_RECORD.CDALMOXARIFADO := V_CDALMOXARIFE;
         OUT_RECORD.NMALMOXARIFADO := V_DSALMOXARIFE;
         OUT_RECORD.CDLOCALIZACAO  := V_CDLOCALESTOQ;
         OUT_RECORD.NMLOCALIZACAO  := V_DSLOCALESTOQ;
         PIPE ROW (OUT_RECORD);
      END IF;

      -- Almoxarifado/Localizacao Quarentena - Produto Acabado
      SELECT MAX(PF.CDALMOXQUAR) , MAX(A.DSALMOXARIFE), MAX(PF.CDLOCALQUAR) , MAX(L.DSLOCALESTOQ)
        INTO V_CDALMOXARIFE, V_DSALMOXARIFE, V_CDLOCALESTOQ, V_DSLOCALESTOQ
        FROM PRODFILI PF, ALMOXARIFADO A, LOCALESTOQUE L
       WHERE PF.CDALMOXQUAR     IS NOT NULL
         AND PF.CDFILIAL = P_CDFILIAL
         AND PF.CDPRODUTO = C_PRODUTOS.CDPRODUTO
         AND PF.CDFILIAL = A.CDFILIAL
         AND PF.CDALMOXQUAR           = A.CDALMOXARIFE
         AND PF.CDFILIAL = L.CDFILIAL(+)
         AND PF.CDALMOXQUAR                = L.CDALMOXARIFE(+)
         AND PF.CDLOCALQUAR                 = L.CDLOCALESTOQ(+);
      IF (V_CDALMOXARIFE IS NOT NULL) THEN
         OUT_RECORD.CDFILIAL       := P_CDFILIAL;
         OUT_RECORD.NMFILIAL       := V_NMFILIAL;
         OUT_RECORD.CDPRODUTO      := C_PRODUTOS.CDPRODUTO;
         OUT_RECORD.CDARVPROD      := C_PRODUTOS.CDARVPROD;
         OUT_RECORD.NMPRODUTO      := C_PRODUTOS.NMPRODUTO;
         OUT_RECORD.IDENTIFICADOR  := 'QUAR';
         OUT_RECORD.CDALMOXARIFADO := V_CDALMOXARIFE;
         OUT_RECORD.NMALMOXARIFADO := V_DSALMOXARIFE;
         OUT_RECORD.CDLOCALIZACAO  := V_CDLOCALESTOQ;
         OUT_RECORD.NMLOCALIZACAO  := V_DSLOCALESTOQ;
         PIPE ROW (OUT_RECORD);
      END IF;

      -- Almoxarifado/Localizacao Produtos Reprovados
      SELECT MAX(PF.CDALMOXREPROV) , MAX(A.DSALMOXARIFE), MAX(PF.CDLOCALREPROV) , MAX(L.DSLOCALESTOQ)
        INTO V_CDALMOXARIFE, V_DSALMOXARIFE, V_CDLOCALESTOQ, V_DSLOCALESTOQ
        FROM PRODFILI PF, ALMOXARIFADO A, LOCALESTOQUE L
       WHERE PF.CDALMOXREPROV     IS NOT NULL
         AND PF.CDFILIAL = P_CDFILIAL
         AND PF.CDPRODUTO = C_PRODUTOS.CDPRODUTO
         AND PF.CDFILIAL = A.CDFILIAL
         AND PF.CDALMOXREPROV           = A.CDALMOXARIFE
         AND PF.CDFILIAL = L.CDFILIAL(+)
         AND PF.CDALMOXREPROV                = L.CDALMOXARIFE(+)
         AND PF.CDLOCALREPROV                 = L.CDLOCALESTOQ(+);
      IF (V_CDALMOXARIFE IS NOT NULL) THEN
         OUT_RECORD.CDFILIAL       := P_CDFILIAL;
         OUT_RECORD.NMFILIAL       := V_NMFILIAL;
         OUT_RECORD.CDPRODUTO      := C_PRODUTOS.CDPRODUTO;
         OUT_RECORD.CDARVPROD      := C_PRODUTOS.CDARVPROD;
         OUT_RECORD.NMPRODUTO      := C_PRODUTOS.NMPRODUTO;
         OUT_RECORD.IDENTIFICADOR  := 'REPROV';
         OUT_RECORD.CDALMOXARIFADO := V_CDALMOXARIFE;
         OUT_RECORD.NMALMOXARIFADO := V_DSALMOXARIFE;
         OUT_RECORD.CDLOCALIZACAO  := V_CDLOCALESTOQ;
         OUT_RECORD.NMLOCALIZACAO  := V_DSLOCALESTOQ;
         PIPE ROW (OUT_RECORD);
      END IF;

      -- Almoxarifado/Localizacao Conferencia de Pesagem
      SELECT MAX(PF.CDALMOCONFPESMP) , MAX(A.DSALMOXARIFE), MAX(PF.CDLOCACONFPESMP) , MAX(L.DSLOCALESTOQ)
        INTO V_CDALMOXARIFE, V_DSALMOXARIFE, V_CDLOCALESTOQ, V_DSLOCALESTOQ
        FROM PRODFILI PF, ALMOXARIFADO A, LOCALESTOQUE L
       WHERE PF.CDALMOCONFPESMP     IS NOT NULL
         AND PF.CDFILIAL = P_CDFILIAL
         AND PF.CDPRODUTO = C_PRODUTOS.CDPRODUTO
         AND PF.CDFILIAL = A.CDFILIAL
         AND PF.CDALMOCONFPESMP           = A.CDALMOXARIFE
         AND PF.CDFILIAL = L.CDFILIAL(+)
         AND PF.CDALMOCONFPESMP                = L.CDALMOXARIFE(+)
         AND PF.CDLOCACONFPESMP                 = L.CDLOCALESTOQ(+);
      IF (V_CDALMOXARIFE IS NOT NULL) THEN
         OUT_RECORD.CDFILIAL       := P_CDFILIAL;
         OUT_RECORD.NMFILIAL       := V_NMFILIAL;
         OUT_RECORD.CDPRODUTO      := C_PRODUTOS.CDPRODUTO;
         OUT_RECORD.CDARVPROD      := C_PRODUTOS.CDARVPROD;
         OUT_RECORD.NMPRODUTO      := C_PRODUTOS.NMPRODUTO;
         OUT_RECORD.IDENTIFICADOR  := 'CPE';
         OUT_RECORD.CDALMOXARIFADO := V_CDALMOXARIFE;
         OUT_RECORD.NMALMOXARIFADO := V_DSALMOXARIFE;
         OUT_RECORD.CDLOCALIZACAO  := V_CDLOCALESTOQ;
         OUT_RECORD.NMLOCALIZACAO  := V_DSLOCALESTOQ;
         PIPE ROW (OUT_RECORD);
      END IF;
   END LOOP;
END;