create or replace PROCEDURE GERAR_EXP_INDUSTRIALIZACAO
(P_CDFILIAL     IN PEDIDO.CDFILIAL%TYPE,
 P_NRPEDIDO     IN PEDIDO.NRPEDIDO%TYPE,
 P_CDOPERADOR   IN OPERADOR.CDOPERADOR%TYPE DEFAULT NULL,
 P_CDEMPRESA    IN EMPRESA.CDEMPRESA%TYPE DEFAULT NULL,
 P_CDTIPOOPER   IN TIPOOPERAC.CDTIPOOPER%TYPE DEFAULT NULL,
 P_CDSERIE      IN SERIENF.CDSERIE%TYPE DEFAULT NULL,
 P_CDINSCESTA   IN NOTAFISCAL.CDINSCESTA%TYPE DEFAULT NULL,
 P_CDINSCMUNI   IN NOTAFISCAL.CDINSCESTA%TYPE DEFAULT NULL,
 P_IDTPIJURTRAN IN TRANSPORT.IDTPIJURTRAN%TYPE DEFAULT NULL,
 P_NRINSJURTRAN IN TRANSPORT.NRINSJURTRAN%TYPE DEFAULT NULL,
 P_NRPLACAVEPED IN PEDIDO.NRPLACAVEPED%TYPE DEFAULT NULL,
 P_SGUFVEICPED  IN PEDIDO.SGUFVEICPED%TYPE DEFAULT NULL,
 P_IDPGFRETTRAN IN PEDIDO.IDPGFRETTRAN%TYPE DEFAULT NULL,
 P_TIPOCUSTO    IN PAREXPEDICAO.IDCUSEXP%TYPE DEFAULT NULL,
 P_RETORNO OUT  VARCHAR2,
 P_NREXPEDICAO  IN EXPEDICAO.NREXPEDICAO%TYPE DEFAULT NULL)
AS
  V_IDPEDINDUSTRIA  PEDIDO.IDPEDINDUSTRIA%TYPE;
  V_SEQEXP          NOVOCODIGO.NRSEQUENCIAL%TYPE;
  V_NRSEQEXP        EXPEDICAO.NREXPEDICAO%TYPE;
  V_DTPROCESSA      PARAMFILIAL.DTPROCESSA%TYPE;
  V_CDCLIENTE       CLIENTE.CDCLIENTE%TYPE;
  V_IDEMPRESANFEXP  PAREXPEDICAO.IDEMPRESANFEXP%TYPE;
  V_CDEMPRESA       EMPRESA.CDEMPRESA%TYPE;
  V_IDOBRTPOPPED    PARAMPEDIDO.IDOBRTPOPPED%TYPE;
  V_CDTIPOOPER      TIPOOPERAC.CDTIPOOPER%TYPE;
  V_CDSERIE         SERIENF.CDSERIE%TYPE;
  V_CDINSCESTA      NOTAFISCAL.CDINSCESTA%TYPE; 
  V_CDINSCMUNI      NOTAFISCAL.CDINSCESTA%TYPE;
  V_IDORIGDESTOP    TIPOOPERAC.IDORIGDESTOP%TYPE;
  V_DESTINATARIO    CLIENTE.CDCLIENTE%TYPE;
  V_CDFILIALPED     PEDIDO.CDFILIALPED%TYPE;
  V_IDUTSEPPEDEXP   PAREXPEDICAO.IDUTSEPPEDEXP%TYPE;
  V_IDSISTEMA       NOTAFISCAL.IDSISTEMA%TYPE;
  V_SEQNF           NOVOCODIGO.NRSEQUENCIAL%TYPE;
  V_NRLANCTONF      NOTAFISCAL.NRLANCTONF%TYPE;
  V_SEQEST          NOVOCODIGO.NRSEQUENCIAL%TYPE;
  V_PRXLANCESTQ     LANCTOESTOQ.NRLANCESTQ%TYPE;
  V_ATUAESTOQUE     ITLANCTOEST.IDEVOLESTOQ%TYPE;
  V_IDTPIJURTRAN    TRANSPORT.IDTPIJURTRAN%TYPE;
  V_IDINFTRANSVEIC  PAREXPEDICAO.IDINFTRANSVEIC%TYPE;
  V_NRINSJURTRAN    TRANSPORT.NRINSJURTRAN%TYPE;
  V_NRPLACAVEPED    PEDIDO.NRPLACAVEPED%TYPE;
  V_SGUFVEICPED     PEDIDO.SGUFVEICPED%TYPE;
  V_IDPGFRETTRAN    PEDIDO.IDPGFRETTRAN%TYPE;
  V_IDGERPRODEST    PAREXPEDICAO.IDGERPRODEST%TYPE;
  V_CDPRODUTO       PRODUTO.CDPRODUTO%TYPE;
  V_QTITEMPROD      ITEMPEDIDO.QTITEMPED%TYPE;
  V_IDTABPRECO      PARAMPEDIDO.IDTABPRECO%TYPE;
  V_IDCALCPRECFAT   PARAMPEDIDO.IDCALCPRECFAT%TYPE;
  V_IDUTILLOTE      PARAMFILIAL.IDUTILLOTE%TYPE;
  V_IDCUSEXP        PAREXPEDICAO.IDCUSEXP%TYPE;
  V_PRECO           ITEMPEDIDO.VRPREUNITPED%TYPE;
  V_CDALMOXARIFE    ALMOXARIFADO.CDALMOXARIFE%TYPE;
  V_CDLOCALESTOQ    LOCALESTOQUE.CDLOCALESTOQ%TYPE;
  V_NRLOTEESTQ      LOTE.NRLOTEESTQ%TYPE;
  V_NRSUBLOTE       LOTE.NRSUBLOTE%TYPE;
  V_VRFATPRECO      PRODFATOR.VRFATPRECO%TYPE;
  V_IDUTILALMOXTERC PAREXPEDICAO.IDUTILALMOXTERC%TYPE;
  V_IDMATUTILEXP    PAREXPEDICAO.IDMATUTILEXP%TYPE;
  V_IDSITITEMPED    ITEMPEDIDO.IDSITITEMPED%TYPE;
  V_ITEMPA          INTEGER;
  V_IDSITPEDIDO     PEDIDO.IDSITPEDIDO%TYPE;
  V_IDLANENCARGOPED PARAMPEDIDO.IDLANENCARGOPED%TYPE;
  V_CDFILIENTR      FILIAL.CDFILIAL%TYPE;
  V_NRLANCTOENTR    NOTAFISCAL.NRLANCTONF%TYPE;
  V_NRNOTAFISC      NOTAFISCAL.NRNOTAFISC%TYPE;
  V_DTEMISSAO       NOTAFISCAL.DTEMISSAO%TYPE;
  V_DSMENSAGEM      DADOSADIC.DSDADOADIC%TYPE;
  V_CDROTATRANSPED  PEDIDO.CDROTATRANSPED%TYPE;
  V_IDBLOQUOPTERC   PAREXPEDICAO.IDBLOQUOPTERC%TYPE;
  V_NRDADOADIC      VARCHAR2(3);
  V_IDCNTRESTOQ     PRODFILI.IDCNTRESTOQ%TYPE;
  V_COUNT           INTEGER;
  V_COUNTPERDAPA    INTEGER;
  V_COUNTPERDASE    INTEGER;
  V_CDTPOPERPERDA   PAREXPEDICAO.CDTPOPERPERDA%TYPE;
  V_NRLANCTONFPE    NOTAFISCAL.NRLANCTONF%TYPE;
  V_PRXLANCESTQPE   LANCTOESTOQ.NRLANCESTQ%TYPE;
  V_CDFUNCUSTO      TIPORETI.CDFUNCUSTO%TYPE;
  V_CUSTO           ITEMPRODUTO.VRUNITITEM%TYPE;
  V_SEQRELAC        NOVOCODIGO.CDCONTADOR%TYPE;
  V_EXISTEINSUMO    INTEGER;
  V_EXISTELOTE      INTEGER;
  V_COUNTITEMPERDA  INTEGER;
BEGIN
   V_IDPEDINDUSTRIA := NULL;
   BEGIN
      SELECT NVL(P.IDPEDINDUSTRIA, 'N'), P.CDCLIENTE, P.CDTIPOOPER, P.CDFILIALPED, P.IDTPIJURTRAN, P.NRINSJURTRAN,
             P.NRPLACAVEPED, P.SGUFVEICPED, P.IDPGFRETTRAN, P.CDROTATRANSPED
        INTO V_IDPEDINDUSTRIA, V_CDCLIENTE, V_CDTIPOOPER, V_CDFILIALPED, V_IDTPIJURTRAN, V_NRINSJURTRAN,
             V_NRPLACAVEPED, V_SGUFVEICPED, V_IDPGFRETTRAN, V_CDROTATRANSPED
        FROM PEDIDO P
       WHERE P.CDFILIAL = P_CDFILIAL
         AND P.NRPEDIDO = P_NRPEDIDO;
   EXCEPTION
      WHEN NO_DATA_FOUND THEN
         V_IDPEDINDUSTRIA := 'N';
         V_CDCLIENTE      := NULL;
         V_CDTIPOOPER     := NULL;
         V_CDFILIALPED    := NULL;
         V_IDTPIJURTRAN   := NULL;
         V_NRINSJURTRAN   := NULL;
         V_NRPLACAVEPED   := NULL;
         V_SGUFVEICPED    := NULL;
         V_IDPGFRETTRAN   := '9';
         V_CDROTATRANSPED := NULL;
   END;
   IF (V_IDPEDINDUSTRIA = 'S') THEN
      IF P_NREXPEDICAO IS NULL THEN
         NOVO_CODIGO('NREXPEDICAO' || P_CDFILIAL,V_SEQEXP);
         V_NRSEQEXP := SUBSTR(V_SEQEXP,11,10);
         INSERT INTO EXPEDICAO
         (CDFILIAL, NREXPEDICAO, DTEXPEDICAO, IDSTATUSSEP)
         VALUES
         (P_CDFILIAL, V_NRSEQEXP,  V_DTPROCESSA, 'P');

      ELSE
         V_NRSEQEXP := P_NREXPEDICAO;
      END IF;

      BEGIN
         SELECT DECODE(PG.IDUTILDTPROC,'S', TRUNC(NVL(PF.DTPROCESSA,SYSDATE)), TRUNC(SYSDATE)), NVL(IDUTILLOTE, 'N')
           INTO V_DTPROCESSA, V_IDUTILLOTE
           FROM PARAMFILIAL PF,
                (SELECT IDUTILDTPROC FROM PARAMGERAL WHERE CDPARGERAL = '0001') PG
          WHERE PF.CDFILIAL = P_CDFILIAL;
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
            V_DTPROCESSA := TRUNC(SYSDATE);
            V_IDUTILLOTE := 'N';
      END;

      BEGIN
         SELECT NVL(IDEMPRESANFEXP,'EMPRESAFILIAL'), NVL(IDUTSEPPEDEXP, 'N'), NVL(IDINFTRANSVEIC,'N'), NVL(IDGERPRODEST,'1'),
                NVL(IDCUSEXP, '3'), NVL(IDUTILALMOXTERC, 'N'), NVL(IDMATUTILEXP, 'N'), NVL(IDBLOQUOPTERC, 'N'),
                CDTPOPERPERDA
           INTO V_IDEMPRESANFEXP, V_IDUTSEPPEDEXP, V_IDINFTRANSVEIC, V_IDGERPRODEST,
                V_IDCUSEXP,       V_IDUTILALMOXTERC, V_IDMATUTILEXP, V_IDBLOQUOPTERC,
                V_CDTPOPERPERDA
           FROM PAREXPEDICAO
          WHERE CDFILIAL = P_CDFILIAL;
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
            V_IDEMPRESANFEXP  := 'EMPRESAFILIAL';
            V_IDUTSEPPEDEXP   := 'N';
            V_IDINFTRANSVEIC  := 'N';
            V_IDGERPRODEST    := '1';
            V_IDCUSEXP        := '3';
            V_IDUTILALMOXTERC := 'N';
            V_IDMATUTILEXP    := 'N';
            V_IDBLOQUOPTERC   := 'N';
            V_CDTPOPERPERDA   := NULL;
      END;
      IF (V_IDEMPRESANFEXP = 'INFORMALANCEXP') THEN
         V_CDEMPRESA  := P_CDEMPRESA;
         V_CDSERIE    := P_CDSERIE;
         V_CDINSCESTA := P_CDINSCESTA;
         V_CDINSCMUNI := P_CDINSCMUNI;
      ELSIF (V_IDEMPRESANFEXP = 'EMPRESAFILIAL') THEN
         BEGIN
            SELECT CDEMPRESA, CDSERIE
              INTO V_CDEMPRESA, V_CDSERIE
              FROM FILIAL
             WHERE CDFILIAL = P_CDFILIAL;
         EXCEPTION
            WHEN NO_DATA_FOUND THEN
               V_CDEMPRESA := NULL;
               V_CDSERIE := NULL;
         END;
      ELSIF (V_IDEMPRESANFEXP = 'EMPRESACLIENTE') THEN
          BEGIN
            SELECT CDEMPRESA, CDSERIE
              INTO V_CDEMPRESA, V_CDSERIE
              FROM CLIENTE
             WHERE CDCLIENTE = V_CDCLIENTE;
          EXCEPTION
             WHEN NO_DATA_FOUND THEN
                V_CDEMPRESA := NULL;
                V_CDSERIE := NULL;
          END;
      END IF;

      BEGIN
         SELECT NVL(IDOBRTPOPPED, 'N'), NVL(IDTABPRECO, '1'), NVL(IDCALCPRECFAT,'E'), NVL(IDLANENCARGOPED, 'N')
           INTO V_IDOBRTPOPPED, V_IDTABPRECO, V_IDCALCPRECFAT, V_IDLANENCARGOPED
           FROM PARAMPEDIDO
          WHERE CDFILIAL = P_CDFILIAL;
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
            V_IDOBRTPOPPED    := 'N';
            V_IDTABPRECO      := '1';
            V_IDCALCPRECFAT   := 'E';
            V_IDLANENCARGOPED := 'N';
      END;
      IF (V_IDOBRTPOPPED = 'N') THEN
         V_CDTIPOOPER := P_CDTIPOOPER;
      END IF;
      BEGIN
         SELECT NVL(IDORIGDESTOP, 'C')
           INTO V_IDORIGDESTOP
           FROM TIPOOPERAC
          WHERE CDTIPOOPER = V_CDTIPOOPER
            AND IDENTRSAIDOP = 'S';
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
            V_IDORIGDESTOP := 'C';
      END;
      IF (V_IDORIGDESTOP = 'C') THEN
         V_DESTINATARIO := V_CDCLIENTE;
      ELSE
         V_DESTINATARIO := V_CDFILIALPED;
      END IF;

      V_IDSISTEMA   := 'EXP';
      V_ATUAESTOQUE := 'S';
      IF (V_IDUTSEPPEDEXP = 'S') THEN
         V_IDSISTEMA   := 'SEP';
         V_ATUAESTOQUE := 'N';
      END IF;

      NOVO_CODIGO('LANCNF/FILIAL' || P_CDFILIAL,V_SEQNF);
      V_NRLANCTONF := SUBSTR(V_SEQNF,11,10);

      NOVO_CODIGO('LANCTOEST'|| P_CDFILIAL,V_SEQEST);
      V_PRXLANCESTQ := SUBSTR(V_SEQEST,11,10);


      IF (V_IDINFTRANSVEIC = 'S') THEN
         V_IDTPIJURTRAN := P_IDTPIJURTRAN;
         V_NRINSJURTRAN := P_NRINSJURTRAN;
         V_NRPLACAVEPED := P_NRPLACAVEPED;
         V_SGUFVEICPED  := P_SGUFVEICPED;
         V_IDPGFRETTRAN := P_IDPGFRETTRAN;
      END IF;

      GERA_NOTAFISCAL_CORPO(P_CDFILIAL,   P_CDFILIAL,      V_CDEMPRESA,    V_CDTIPOOPER,   V_CDSERIE,  V_CDINSCESTA, V_CDINSCMUNI,   V_DESTINATARIO,
                            V_DTPROCESSA,  V_IDSISTEMA,    V_NRLANCTONF,   V_PRXLANCESTQ,  V_ATUAESTOQUE, NULL,
                            V_NRLANCTONF,  V_IDTPIJURTRAN, V_NRINSJURTRAN, V_NRPLACAVEPED, V_SGUFVEICPED, V_IDPGFRETTRAN,
                            NULL,          NULL,           NULL,           NULL,           NULL,         NULL,
                            V_PRXLANCESTQ, NULL,           V_DTPROCESSA,   NULL,           NULL,         NULL);
      IF (P_TIPOCUSTO IS NOT NULL) THEN
         V_IDCUSEXP := P_TIPOCUSTO;
      END IF;

      FOR C_ITENS IN (SELECT I.NRITEMPED, I.CDPRODUTO, I.QTITEMPED, I.VRPREUNITPED, NVL(I.IDITEMPEDTERC, 'N') IDITEMPEDTERC,
                             NVL(I.CDEMISSAOITPED, P.CDARVPROD) CDPRODEMIS, NVL(I.DSEMISSAOITPED, P.NMPRODUTO) DSPRODEMIS,
                             (QTITEMPED - QTEXPITEMPED) AS QTDEAEXP, P.VRFATOCONV, I.CDFATPRECO, I.VRDESITPED, QTEXPITEMPED,
                             P.CDPRODESTO
                        FROM ITEMPEDIDO I JOIN PRODUTO P
                                            ON I.CDPRODUTO = P.CDPRODUTO
                       WHERE I.CDFILIAL = P_CDFILIAL
                          AND I.NRPEDIDO = P_NRPEDIDO)
      LOOP
         V_CDALMOXARIFE := BUSCA_ALMOX(P_CDFILIAL, '', C_ITENS.CDPRODUTO);
         V_CDLOCALESTOQ := BUSCA_LOCAL(P_CDFILIAL, '', C_ITENS.CDPRODUTO);

         IF ((V_IDTABPRECO = '1') OR ((V_IDTABPRECO = '2') AND (V_IDCALCPRECFAT = 'L'))) THEN
            V_PRECO := C_ITENS.VRPREUNITPED;
         ELSE
            V_NRLOTEESTQ := ' ';
            V_NRSUBLOTE  := ' ';

            IF (V_IDUTILLOTE = 'S') THEN
               BEGIN
                  SELECT MIN(NRLOTEESTQ), MIN(NRSUBLOTE)
                    INTO V_NRLOTEESTQ, V_NRSUBLOTE
                    FROM POSESTDIA B
                   WHERE B.CDFILIAL = P_CDFILIAL
                     AND B.CDPRODUTO = C_ITENS.CDPRODUTO
                     AND B.CDALMOXARIFE  = V_CDALMOXARIFE
                     AND B.CDLOCALESTOQ  = V_CDLOCALESTOQ
                     AND B.QTESTOQDIA > 0.00001
                     AND B.DTPOSIESTQ = (SELECT MAX(P.DTPOSIESTQ)
                                           FROM POSESTDIA P
                                          WHERE P.CDFILIAL = P_CDFILIAL
                                            AND P.CDPRODUTO = B.CDPRODUTO
                                            AND P.CDALMOXARIFE = V_CDALMOXARIFE
                                            AND P.CDLOCALESTOQ = V_CDLOCALESTOQ
                                            AND P.NRLOTEESTQ = B.NRLOTEESTQ
                                            AND P.NRSUBLOTE = B.NRSUBLOTE
                                            AND B.QTESTOQDIA > 0.00001
                                            AND P.DTPOSIESTQ <= V_DTPROCESSA + 1);
               EXCEPTION
                  WHEN NO_DATA_FOUND THEN
                     V_NRLOTEESTQ := ' ';
                     V_NRSUBLOTE  := ' ';
               END;
            END IF;
            BEGIN
                SELECT NVL(VRFATPRECO,1)
                  INTO V_VRFATPRECO
                  FROM PRODFATOR F
                 WHERE F.CDFATPRECO = C_ITENS.CDFATPRECO
                   AND F.CDPRODUTO  = C_ITENS.CDPRODUTO;
            EXCEPTION
               WHEN NO_DATA_FOUND THEN
                  V_VRFATPRECO := 1;
            END;

            V_PRECO := ROUND(CUSTO_PRODUTO_LCEST(P_CDFILIAL, C_ITENS.CDPRODUTO, V_IDCUSEXP, V_DTPROCESSA, SYSDATE,V_CDALMOXARIFE, V_CDLOCALESTOQ, V_NRLOTEESTQ, V_NRSUBLOTE) * V_VRFATPRECO, 4);
         END IF;
         IF (V_IDGERPRODEST = '1') THEN
            V_CDPRODUTO  := C_ITENS.CDPRODUTO;
            V_QTITEMPROD := C_ITENS.QTDEAEXP;
         ELSIF (V_IDGERPRODEST = '2') THEN
            V_CDPRODUTO  := C_ITENS.CDPRODESTO;
            V_QTITEMPROD := C_ITENS.QTDEAEXP * C_ITENS.VRFATOCONV;
            V_PRECO      := V_PRECO * C_ITENS.VRFATOCONV;
         END IF;
         IF (C_ITENS.IDITEMPEDTERC = 'N') THEN
            GERA_NOTAFISCAL_PRODUTO(P_CDFILIAL, V_NRLANCTONF,       V_CDPRODUTO,    C_ITENS.CDPRODEMIS, C_ITENS.DSPRODEMIS , V_QTITEMPROD,
                                    V_PRECO,    C_ITENS.VRDESITPED, P_CDFILIAL,     P_NRPEDIDO,         C_ITENS.NRITEMPED,   NULL,
                                    NULL,       NULL,               V_CDALMOXARIFE, V_CDLOCALESTOQ,     NULL,                NULL,
                                    'S',        NULL,               NULL,           NULL,               NULL,                NULL,
                                    NULL,       'N',                V_ATUAESTOQUE,  NULL,                  NULL,                NULL,
                                    NULL);
         ELSE
           -- IF (V_IDBLOQUOPTERC = 'N') THEN
               V_NRLOTEESTQ := NULL;
               V_NRSUBLOTE  := NULL;
           -- ELSE
               BEGIN
                  SELECT P.NRLOTEESTQ, P.NRSUBLOTE
                    INTO V_NRLOTEESTQ, V_NRSUBLOTE
                    FROM ORDPRODUCAO O JOIN PRODACABADO P
                                         ON O.CDFILIAL = P.CDFILIAL
                                        AND O.NRORDPROD = P.NRORDPROD
                                        AND O.NRSUBORDPROD = P.NRSUBORDPROD
                   WHERE O.CDFILIAL = P_CDFILIAL
                     AND O.NRPEDIDO = P_NRPEDIDO
                     AND O.NRITEMPED = C_ITENS.NRITEMPED
                     AND P.CDPRODUTO = C_ITENS.CDPRODUTO;
               EXCEPTION
                  WHEN NO_DATA_FOUND THEN
                     V_NRLOTEESTQ := ' ';
                     V_NRSUBLOTE  := ' ';
               END;
            --END IF;
            GERA_NOTAFISCAL_PRODUTO(P_CDFILIAL, V_NRLANCTONF,       V_CDPRODUTO,    C_ITENS.CDPRODEMIS, C_ITENS.DSPRODEMIS , V_QTITEMPROD,
                                    V_PRECO,    C_ITENS.VRDESITPED, P_CDFILIAL,     P_NRPEDIDO,         C_ITENS.NRITEMPED,   NULL,
                                    NULL,       NULL,               V_CDALMOXARIFE, V_CDLOCALESTOQ,     V_NRLOTEESTQ,        V_NRSUBLOTE,
                                    'S',        NULL,               NULL,           NULL,               NULL,                NULL,
                                    NULL,       'N',                V_ATUAESTOQUE,  NULL,               NULL,                NULL,
                                    NULL);
            --ROTINA PARA GERAR O MATERIAL APLICADO
            IF (V_IDMATUTILEXP = 'S') THEN
               FOR C_CUSTOINSUMO IN (SELECT O.CDFILIAL, O.NRORDPROD, O.NRSUBORDPROD, L.CDPRODUTO, P.CDARVPROD, P.NMPRODUTO, L.CDALMOXARIFE, L.CDLOCALESTOQ, L.NRLOTEESTQ, L.NRSUBLOTE, I.CDTIPORETI, SUM(L.QTRETLIQPROD) QTUTILIZADA
                                       FROM TRABPRODACABPED T JOIN ORDPRODUCAO O
                                                                ON T.CDFILIAL = O.CDFILIAL
                                                               AND T.NRORDPROD = O.NRORDPROD
                                                               AND T.NRSUBORDPROD = O.NRSUBORDPROD
                                                              JOIN RETIRADAESTO R
                                                                ON O.CDFILIAL = R.CDFILIAL
                                                               AND O.NRORDPROD = R.NRORDPROD
                                                               AND O.NRSUBORDPROD = R.NRSUBORDPROD
                                                              JOIN ITEMRETIEST I
                                                                ON R.CDFILIAL = I.CDFILIAL
                                                               AND R.NRRETEST = I.NRRETEST
                                                              JOIN LOTITRETIEST L
                                                                ON I.CDFILIAL = L.CDFILIAL
                                                               AND I.NRRETEST = L.NRRETEST
                                                               AND I.NRSEQRETPROD = L.NRSEQRETPROD
                                                               AND I.CDPRODUTO = L.CDPRODUTO
                                                              JOIN PRODUTO P
                                                                ON L.CDPRODUTO = P.CDPRODUTO
                                      WHERE T.CDFILIAL = P_CDFILIAL
                                        AND T.NRPEDIDO = P_NRPEDIDO
                                        AND T.NRITEMPED = C_ITENS.NRITEMPED
                                        AND O.IDSITORDPROD = '3'
                                     GROUP BY O.CDFILIAL, O.NRORDPROD, O.NRSUBORDPROD, L.CDPRODUTO, P.CDARVPROD, P.NMPRODUTO, L.CDALMOXARIFE, L.CDLOCALESTOQ, L.NRLOTEESTQ, L.NRSUBLOTE, I.CDTIPORETI
                                     UNION ALL
                                     SELECT O.CDFILIAL, O.NRORDPROD, O.NRSUBORDPROD, L.CDPRODUTO, P.CDARVPROD, P.NMPRODUTO, L.CDALMOXARIFE, L.CDLOCALESTOQ, L.NRLOTEESTQ, L.NRSUBLOTE, I.CDTIPORETI, SUM(L.QTRETLIQPROD) QTUTILIZADA
                                       FROM TRABSEMIACABADOPED T JOIN ORDPRODUCAO O
                                                                   ON T.CDFILIAL = O.CDFILIAL
                                                                  AND T.NRORDPROD = O.NRORDPROD
                                                                  AND T.NRSUBORDPROD = O.NRSUBORDPROD
                                                                 JOIN RETIRADAESTO R
                                                                   ON O.CDFILIAL = R.CDFILIAL
                                                                  AND O.NRORDPROD = R.NRORDPROD
                                                                  AND O.NRSUBORDPROD = R.NRSUBORDPROD
                                                                 JOIN ITEMRETIEST I
                                                                   ON R.CDFILIAL = I.CDFILIAL
                                                                  AND R.NRRETEST = I.NRRETEST
                                                                 JOIN LOTITRETIEST L
                                                                   ON I.CDFILIAL = L.CDFILIAL
                                                                  AND I.NRRETEST = L.NRRETEST
                                                                  AND I.NRSEQRETPROD = L.NRSEQRETPROD
                                                                  AND I.CDPRODUTO = L.CDPRODUTO
                                                                 JOIN PRODUTO P
                                                                   ON L.CDPRODUTO = P.CDPRODUTO
                                      WHERE T.CDFILIAL = P_CDFILIAL
                                        AND T.NRPEDIDO = P_NRPEDIDO
                                        AND T.NRITEMPED = C_ITENS.NRITEMPED
                                        AND O.IDSITORDPROD = '3'
                                     GROUP BY O.CDFILIAL, O.NRORDPROD, O.NRSUBORDPROD, L.CDPRODUTO, P.CDARVPROD, P.NMPRODUTO, L.CDALMOXARIFE, L.CDLOCALESTOQ, L.NRLOTEESTQ, L.NRSUBLOTE, I.CDTIPORETI)
               LOOP
                  V_EXISTEINSUMO := 0;
                  SELECT COUNT(1)
                    INTO V_EXISTEINSUMO
                    FROM RELACITEMNFOP
                   WHERE CDFILIAL = C_CUSTOINSUMO.CDFILIAL
                     AND NRORDPROD = C_CUSTOINSUMO.NRORDPROD
                     AND NRSUBORDPROD = C_CUSTOINSUMO.NRSUBORDPROD
                     AND CDPRODINSUMO = C_CUSTOINSUMO.CDPRODUTO
                     AND NRLOTEESTQ = C_CUSTOINSUMO.NRLOTEESTQ
                     AND NRSUBLOTE = C_CUSTOINSUMO.NRSUBLOTE
                     AND NRLANCTONF = V_NRLANCTONF;
                  IF V_EXISTEINSUMO = 0 THEN
                     V_EXISTELOTE := 0;
                     SELECT COUNT(1)
                       INTO V_EXISTELOTE
                       FROM RELACITEMNFOP
                      WHERE CDFILIAL = C_CUSTOINSUMO.CDFILIAL
                        AND NRLANCTONF = V_NRLANCTONF
                        AND CDPRODINSUMO = C_CUSTOINSUMO.CDPRODUTO
                        AND NRLOTEESTQ = C_CUSTOINSUMO.NRLOTEESTQ
                        AND NRSUBLOTE = C_CUSTOINSUMO.NRSUBLOTE;
                     IF V_EXISTELOTE = 0 THEN
                        BEGIN
                           SELECT NVL(IDCNTRESTOQ, 'S')
                             INTO V_IDCNTRESTOQ
                             FROM PRODFILI
                            WHERE CDFILIAL = P_CDFILIAL
                              AND CDPRODUTO = C_CUSTOINSUMO.CDPRODUTO;
                        EXCEPTION
                           WHEN NO_DATA_FOUND THEN
                              V_IDCNTRESTOQ := 'S';
                        END;
                        IF V_IDCNTRESTOQ = 'S' THEN
                           V_COUNT := 0;
                           SELECT COUNT(1)
                             INTO V_COUNT
                             FROM TRABSEMIACABADOPED
                            WHERE CDFILIAL = P_CDFILIAL
                              AND NRPEDIDO = P_NRPEDIDO
                              AND NRITEMPED = C_ITENS.NRITEMPED
                              AND CDPRODINSUMO = C_CUSTOINSUMO.CDPRODUTO;
                           IF V_COUNT = 0 THEN
                              V_CDFUNCUSTO := NULL;
                              BEGIN
                                 SELECT CDFUNCUSTO
                                   INTO V_CDFUNCUSTO
                                   FROM TIPORETI
                                  WHERE CDTIPORETI = C_CUSTOINSUMO.CDTIPORETI;
                              EXCEPTION
                                 WHEN NO_DATA_FOUND THEN
                                    V_CDFUNCUSTO := NULL;
                              END;
                              IF (V_CDFUNCUSTO <> '099') THEN
                                 V_CUSTO := 0;
                                 BEGIN
                                    SELECT MAX(VRAPRCUSTOP)
                                      INTO V_CUSTO
                                      FROM APRCUSTOP
                                     WHERE CDFILIAL = C_CUSTOINSUMO.CDFILIAL
                                       AND NRORDPROD = C_CUSTOINSUMO.NRORDPROD
                                       AND NRSUBORDPROD = C_CUSTOINSUMO.NRSUBORDPROD
                                       AND CDAPRCUSTOP = C_CUSTOINSUMO.CDARVPROD
                                       AND CDFUNCUSTO = '001';
                                 EXCEPTION
                                    WHEN NO_DATA_FOUND THEN
                                       V_CUSTO := 0;
                                 END;
                                 IF (V_CUSTO > 0) THEN
                                    GERA_NOTAFISCAL_PRODUTO(P_CDFILIAL,                V_NRLANCTONF,  C_CUSTOINSUMO.CDPRODUTO,     C_CUSTOINSUMO.CDARVPROD,    C_CUSTOINSUMO.NMPRODUTO , C_CUSTOINSUMO.QTUTILIZADA,
                                                            V_CUSTO,                   0,             P_CDFILIAL,                  P_NRPEDIDO,                 C_ITENS.NRITEMPED,        NULL,
                                                            NULL,                      NULL,          C_CUSTOINSUMO.CDALMOXARIFE,  C_CUSTOINSUMO.CDLOCALESTOQ, C_CUSTOINSUMO.NRLOTEESTQ, C_CUSTOINSUMO.NRSUBLOTE,
                                                            'S',                       NULL,          NULL,                    NULL,                      NULL,                     NULL,
                                                            NULL,                      'N',           'N',                     NULL,                      NULL,                     NULL,
                                                            NULL);


                                    IF (C_CUSTOINSUMO.NRLOTEESTQ <> ' ') THEN
                                       BEGIN
                                          SELECT MAX(L.CDFILIAL), MAX(L.NRLANCTONF)
                                            INTO V_CDFILIENTR, V_NRLANCTOENTR
                                            FROM ITLANCTOEST IT JOIN LANCTOESTOQ L
                                                                  ON IT.CDFILIAL = L.CDFILIAL
                                                                 AND IT.NRLANCESTQ = L.NRLANCESTQ
                                           WHERE IT.CDFILIMOVI = P_CDFILIAL
                                             AND IT.CDPRODUTO  = C_CUSTOINSUMO.CDPRODUTO
                                             AND IT.NRLOTEESTQ = C_CUSTOINSUMO.NRLOTEESTQ
                                             AND IT.NRSUBLOTE  = C_CUSTOINSUMO.NRSUBLOTE
                                             AND IT.IDTIPOMOVI = '2';
                                       EXCEPTION
                                          WHEN NO_DATA_FOUND THEN
                                             V_CDFILIENTR   := NULL;
                                             V_NRLANCTOENTR := NULL;
                                       END;

                                       BEGIN
                                          SELECT NRNOTAFISC, DTEMISSAO
                                            INTO V_NRNOTAFISC, V_DTEMISSAO
                                            FROM NOTAFISCAL
                                           WHERE CDFILIAL = V_CDFILIENTR
                                             AND NRLANCTONF = V_NRLANCTOENTR;
                                       EXCEPTION
                                          WHEN NO_DATA_FOUND THEN
                                             V_NRNOTAFISC := NULL;
                                             V_DTEMISSAO  := NULL;
                                       END;
                                       IF (V_NRNOTAFISC IS NOT NULL) THEN
                                          V_DSMENSAGEM := 'Insumo : '||C_CUSTOINSUMO.CDARVPROD||' - Lote : '||C_CUSTOINSUMO.NRLOTEESTQ||' - NF Entr. : '||V_NRNOTAFISC||' - Dt. Emiss : '||V_DTEMISSAO;
                                          --BUSCA MAIOR NRDADOADIC PARA INSERIR O PROXIMO
                                         SELECT NVL(MAX(NRDADOADIC),0)
                                           INTO V_NRDADOADIC
                                           FROM DADOSADIC
                                          WHERE CDFILIAL   = P_CDFILIAL
                                            AND NRLANCTONF = V_NRLANCTONF;

                                         V_NRDADOADIC := LPAD(RTRIM(TO_CHAR(TO_NUMBER(V_NRDADOADIC) + 1)),3,0);
                                         INSERT INTO DADOSADIC (CDFILIAL,NRLANCTONF,NRDADOADIC,CDMENSAGEM, DSDADOADIC)
                                         VALUES (P_CDFILIAL, V_NRLANCTONF, V_NRDADOADIC, NULL, V_DSMENSAGEM);

                                          --GERA_NOTAFISCAL_DADOSADIC(P_CDFILIAL, V_NRLANCTONF, NULL, NULL, NULL, V_DSMENSAGEM);
                                       END IF;
                                    END IF;
                                 END IF;
                              END IF;
                           END IF;
                        END IF;
                     ELSE
                        BEGIN
                           SELECT NVL(IDCNTRESTOQ, 'S')
                             INTO V_IDCNTRESTOQ
                             FROM PRODFILI
                            WHERE CDFILIAL = P_CDFILIAL
                              AND CDPRODUTO = C_CUSTOINSUMO.CDPRODUTO;
                        EXCEPTION
                           WHEN NO_DATA_FOUND THEN
                              V_IDCNTRESTOQ := 'S';
                        END;
                        IF V_IDCNTRESTOQ = 'S' THEN
                           V_COUNT := 0;
                           SELECT COUNT(1)
                             INTO V_COUNT
                             FROM TRABSEMIACABADOPED
                            WHERE CDFILIAL = P_CDFILIAL
                              AND NRPEDIDO = P_NRPEDIDO
                              AND NRITEMPED = C_ITENS.NRITEMPED
                              AND CDPRODINSUMO = C_CUSTOINSUMO.CDPRODUTO;
                           IF V_COUNT = 0 THEN
                              V_CDFUNCUSTO := NULL;
                              BEGIN
                                 SELECT CDFUNCUSTO
                                   INTO V_CDFUNCUSTO
                                   FROM TIPORETI
                                  WHERE CDTIPORETI = C_CUSTOINSUMO.CDTIPORETI;
                              EXCEPTION
                                 WHEN NO_DATA_FOUND THEN
                                    V_CDFUNCUSTO := NULL;
                              END;
                              IF (V_CDFUNCUSTO <> '099') THEN
                                 UPDATE ITEMPRODUTO
                                     SET QTITEMPROD = QTITEMPROD + C_CUSTOINSUMO.QTUTILIZADA,
                                         VRTOTAITEM = (((QTITEMPROD + C_CUSTOINSUMO.QTUTILIZADA) * VRUNITITEM) - VRDESCITEM)
                                   WHERE CDFILIAL = C_CUSTOINSUMO.CDFILIAL
                                     AND NRLANCTONF = V_NRLANCTONF
                                     AND CDPRODUTO = C_CUSTOINSUMO.CDPRODUTO
                                     AND NRLOTEESTQ = C_CUSTOINSUMO.NRLOTEESTQ
                                     AND NRSUBLOTE = C_CUSTOINSUMO.NRSUBLOTE;

                              END IF;
                           END IF;
                        END IF;
                     END IF;
                     NOVO_CODIGO('RELACITEMNFOP' || P_CDFILIAL,V_SEQRELAC);
                     V_SEQRELAC := SUBSTR(V_SEQRELAC,11,10);
                     INSERT INTO RELACITEMNFOP
                     (NRSEQRELAC, CDFILIAL, NRORDPROD, NRSUBORDPROD, CDPRODINSUMO, NRLOTEESTQ, NRSUBLOTE,QTRETIRADA,
                      NRLANCTONF, NRPEDIDO, NRITEMPED)
                     VALUES
                     (V_SEQRELAC, P_CDFILIAL, C_CUSTOINSUMO.NRORDPROD, C_CUSTOINSUMO.NRSUBORDPROD, C_CUSTOINSUMO.CDPRODUTO, C_CUSTOINSUMO.NRLOTEESTQ, C_CUSTOINSUMO.NRSUBLOTE, C_CUSTOINSUMO.QTUTILIZADA,
                      V_NRLANCTONF, P_NRPEDIDO, C_ITENS.NRITEMPED);
                  END IF;
               END LOOP;
            END IF;
         END IF;
         IF (C_ITENS.QTEXPITEMPED + V_QTITEMPROD >= C_ITENS.QTITEMPED) THEN
            V_IDSITITEMPED := '4';
         ELSE
            V_IDSITITEMPED := '7';
         END IF;
         UPDATE ITEMPEDIDO
            SET IDSITITEMPED = V_IDSITITEMPED,
                QTEXPITEMPED = C_ITENS.QTEXPITEMPED + V_QTITEMPROD,
                CDOPERADOR   = P_CDOPERADOR
          WHERE CDFILIAL  = P_CDFILIAL
            AND NRPEDIDO  = P_NRPEDIDO
            AND NRITEMPED = C_ITENS.NRITEMPED;

      END LOOP;
      IF (V_IDUTSEPPEDEXP <> 'S') THEN
         SELECT COUNT(1)
           INTO V_ITEMPA
           FROM ITEMPEDIDO IT
          WHERE IT.CDFILIAL = P_CDFILIAL
            AND IT.NRPEDIDO = P_NRPEDIDO
            AND IT.IDSITITEMPED IN ('1','2','3','7');

         IF (V_ITEMPA > 0) THEN
            V_IDSITPEDIDO := '6';
         ELSE
            V_IDSITPEDIDO := '3';
         END IF;
         UPDATE PEDIDO
            SET IDSITPEDIDO = V_IDSITPEDIDO
          WHERE CDFILIAL = P_CDFILIAL
            AND NRPEDIDO = P_NRPEDIDO;
      END IF;
      IF (V_IDLANENCARGOPED = 'S') THEN
         FOR C_ENCARGOS IN (SELECT EP.CDENCARGO, EP.VRENCARGOPED
                              FROM ENCARGOPED EP
                             WHERE EP.CDFILIAL  = P_CDFILIAL
                               AND EP.NRPEDIDO  = P_NRPEDIDO)
         LOOP
            IF (C_ENCARGOS.VRENCARGOPED > 0) THEN
               GERA_NOTAFISCAL_ENCARGO(P_CDFILIAL, V_NRLANCTONF,C_ENCARGOS.CDENCARGO, C_ENCARGOS.VRENCARGOPED);
            END IF;
         END LOOP;
      END IF;
      FOR C_DADOSADIC IN (SELECT NRDADOADICPED, CDMENSAGEM, DSDADOADICPED
                            FROM DADOSADICPED
                           WHERE CDFILIAL = P_CDFILIAL
                             AND NRPEDIDO = P_NRPEDIDO)
      LOOP
         GERA_NOTAFISCAL_DADOSADIC (P_CDFILIAL, V_NRLANCTONF, NULL, NULL, C_DADOSADIC.DSDADOADICPED, C_DADOSADIC.CDMENSAGEM);
      END LOOP;
      GERA_NOTAFISCAL_FECHAMENTO(P_CDFILIAL, V_NRLANCTONF, V_DTPROCESSA, V_PRXLANCESTQ, 'S', P_CDOPERADOR, 'N', V_ATUAESTOQUE);
      UPDATE NOTAFISCAL
         SET NREXPEDICAO = V_NRSEQEXP,
             CDROTATRANS = V_CDROTATRANSPED
       WHERE CDFILIAL = P_CDFILIAL
         AND NRLANCTONF = V_NRLANCTONF;

      /*----------GERA PERDA---------*/
      V_COUNTPERDAPA := 0;
      V_COUNTPERDASE := 0;
      BEGIN
         SELECT COUNT(1)
           INTO V_COUNTPERDAPA
           FROM TRABPRODACABPED T JOIN PERDAOP P
                                    ON T.CDFILIAL = P.CDFILIAL
                                   AND T.NRORDPROD = P.NRORDPROD
                                   AND T.NRSUBORDPROD = P.NRSUBORDPROD
          WHERE T.CDFILIAL = P_CDFILIAL
            AND T.NRPEDIDO = P_NRPEDIDO;
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
            V_COUNTPERDAPA := 0;
      END;

      BEGIN
         SELECT COUNT(1)
           INTO V_COUNTPERDASE
           FROM TRABSEMIACABADOPED T JOIN PERDAOP P
                                       ON T.CDFILIAL = P.CDFILIAL
                                      AND T.NRORDPROD = P.NRORDPROD
                                      AND T.NRSUBORDPROD = P.NRSUBORDPROD
          WHERE T.CDFILIAL = P_CDFILIAL
            AND T.NRPEDIDO = P_NRPEDIDO;
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
            V_COUNTPERDASE := 0;
      END;

      IF ((V_COUNTPERDAPA > 0) OR (V_COUNTPERDASE > 0)) THEN
         IF (V_CDTPOPERPERDA IS NOT NULL) THEN
            NOVO_CODIGO('LANCNF/FILIAL' || P_CDFILIAL,V_SEQNF);
            V_NRLANCTONFPE := SUBSTR(V_SEQNF,11,10);

            NOVO_CODIGO('LANCTOEST'|| P_CDFILIAL,V_SEQEST);
            V_PRXLANCESTQ := SUBSTR(V_SEQEST,11,10);

            GERA_NOTAFISCAL_CORPO(P_CDFILIAL,   P_CDFILIAL,      V_CDEMPRESA,    V_CDTPOPERPERDA,   V_CDSERIE,  V_CDINSCESTA, V_CDINSCMUNI,   V_DESTINATARIO,
                                  V_DTPROCESSA,  V_IDSISTEMA,    V_NRLANCTONFPE,   V_PRXLANCESTQPE,  V_ATUAESTOQUE, NULL,
                                  V_NRLANCTONFPE,  V_IDTPIJURTRAN, V_NRINSJURTRAN, V_NRPLACAVEPED, V_SGUFVEICPED, V_IDPGFRETTRAN,
                                  NULL,          NULL,           NULL,           NULL,           NULL,         NULL,
                                  V_PRXLANCESTQPE, NULL,           V_DTPROCESSA,   NULL,           NULL,         NULL);

            FOR C_ITEMPERDA IN (SELECT O.CDFILIAL, O.NRORDPROD, O.NRSUBORDPROD, L.CDPRODUTO, P.CDARVPROD, P.NMPRODUTO, L.CDALMOXARIFE, L.CDLOCALESTOQ, L.NRLOTEESTQ, L.NRSUBLOTE, SUM(L.QTRETLIQPROD) QTUTILIZADA
                                  FROM TRABPRODACABPED T JOIN ORDPRODUCAO O
                                                           ON T.CDFILIAL = O.CDFILIAL
                                                          AND T.NRORDPROD = O.NRORDPROD
                                                          AND T.NRSUBORDPROD = O.NRSUBORDPROD
                                                         JOIN RETIRADAESTO R
                                                           ON O.CDFILIAL = R.CDFILIAL
                                                          AND O.NRORDPROD = R.NRORDPROD
                                                          AND O.NRSUBORDPROD = R.NRSUBORDPROD
                                                         JOIN ITEMRETIEST I
                                                           ON R.CDFILIAL = I.CDFILIAL
                                                          AND R.NRRETEST = I.NRRETEST
                                                         JOIN TIPORETI TR
                                                           ON I.CDTIPORETI = TR.CDTIPORETI
                                                         JOIN LOTITRETIEST L
                                                           ON I.CDFILIAL = L.CDFILIAL
                                                          AND I.NRRETEST = L.NRRETEST
                                                          AND I.NRSEQRETPROD = L.NRSEQRETPROD
                                                          AND I.CDPRODUTO = L.CDPRODUTO
                                                         JOIN PRODUTO P
                                                           ON L.CDPRODUTO = P.CDPRODUTO
                                 WHERE T.CDFILIAL = P_CDFILIAL
                                   AND T.NRPEDIDO = P_NRPEDIDO
                                   AND O.IDSITORDPROD = '3'
                                   AND TR.CDFUNCUSTO = '099'
                                GROUP BY O.CDFILIAL, O.NRORDPROD, O.NRSUBORDPROD, L.CDPRODUTO, P.CDARVPROD, P.NMPRODUTO, L.CDALMOXARIFE, L.CDLOCALESTOQ, L.NRLOTEESTQ, L.NRSUBLOTE
                                UNION ALL
                                SELECT O.CDFILIAL, O.NRORDPROD, O.NRSUBORDPROD, L.CDPRODUTO, P.CDARVPROD, P.NMPRODUTO, L.CDALMOXARIFE, L.CDLOCALESTOQ, L.NRLOTEESTQ, L.NRSUBLOTE, SUM(L.QTRETLIQPROD) QTUTILIZADA
                                  FROM TRABSEMIACABADOPED T JOIN ORDPRODUCAO O
                                                              ON T.CDFILIAL = O.CDFILIAL
                                                             AND T.NRORDPROD = O.NRORDPROD
                                                             AND T.NRSUBORDPROD = O.NRSUBORDPROD
                                                            JOIN RETIRADAESTO R
                                                              ON O.CDFILIAL = R.CDFILIAL
                                                             AND O.NRORDPROD = R.NRORDPROD
                                                             AND O.NRSUBORDPROD = R.NRSUBORDPROD
                                                            JOIN ITEMRETIEST I
                                                              ON R.CDFILIAL = I.CDFILIAL
                                                             AND R.NRRETEST = I.NRRETEST
                                                            JOIN TIPORETI TR
                                                                   ON I.CDTIPORETI = TR.CDTIPORETI
                                                            JOIN LOTITRETIEST L
                                                              ON I.CDFILIAL = L.CDFILIAL
                                                             AND I.NRRETEST = L.NRRETEST
                                                             AND I.NRSEQRETPROD = L.NRSEQRETPROD
                                                             AND I.CDPRODUTO = L.CDPRODUTO
                                                            JOIN PRODUTO P
                                                              ON L.CDPRODUTO = P.CDPRODUTO
                                 WHERE T.CDFILIAL = P_CDFILIAL
                                   AND T.NRPEDIDO = P_NRPEDIDO
                                   AND O.IDSITORDPROD = '3'
                                   AND TR.CDFUNCUSTO = '099'
                                GROUP BY O.CDFILIAL, O.NRORDPROD, O.NRSUBORDPROD, L.CDPRODUTO, P.CDARVPROD, P.NMPRODUTO, L.CDALMOXARIFE, L.CDLOCALESTOQ, L.NRLOTEESTQ, L.NRSUBLOTE)
            LOOP
               BEGIN
                  SELECT NVL(IDCNTRESTOQ, 'S')
                    INTO V_IDCNTRESTOQ
                    FROM PRODFILI
                   WHERE CDFILIAL = P_CDFILIAL
                     AND CDPRODUTO = C_ITEMPERDA.CDPRODUTO;
               EXCEPTION
                  WHEN NO_DATA_FOUND THEN
                     V_IDCNTRESTOQ := 'S';
               END;
               IF V_IDCNTRESTOQ = 'S' THEN
                  V_COUNT := 0;
                  SELECT COUNT(1)
                    INTO V_COUNT
                    FROM TRABSEMIACABADOPED
                   WHERE CDFILIAL = P_CDFILIAL
                     AND NRPEDIDO = P_NRPEDIDO
                     AND CDPRODINSUMO = C_ITEMPERDA.CDPRODUTO;
                  IF V_COUNT = 0 THEN
                     BEGIN
                        SELECT MAX(VRAPRCUSTOP)
                          INTO V_CUSTO
                          FROM APRCUSTOP
                         WHERE CDFILIAL = C_ITEMPERDA.CDFILIAL
                           AND NRORDPROD = C_ITEMPERDA.NRORDPROD
                           AND NRSUBORDPROD = C_ITEMPERDA.NRSUBORDPROD
                           AND CDAPRCUSTOP = C_ITEMPERDA.CDARVPROD
                           AND CDFUNCUSTO = '099';
                     EXCEPTION
                        WHEN NO_DATA_FOUND THEN
                           V_CUSTO := 0;
                     END;
                     IF (V_CUSTO > 0) THEN
                        GERA_NOTAFISCAL_PRODUTO(P_CDFILIAL,                V_NRLANCTONFPE,  C_ITEMPERDA.CDPRODUTO,     C_ITEMPERDA.CDARVPROD,    C_ITEMPERDA.NMPRODUTO ,  C_ITEMPERDA.QTUTILIZADA,
                                                V_CUSTO,                   0,               P_CDFILIAL,                P_NRPEDIDO,               NULL,                    NULL,
                                                NULL,                      NULL,            C_ITEMPERDA.CDALMOXARIFE,  C_ITEMPERDA.CDLOCALESTOQ, C_ITEMPERDA.NRLOTEESTQ,  C_ITEMPERDA.NRSUBLOTE,
                                                'S',                       NULL,          NULL,                      NULL,                     NULL,                    NULL,
                                                NULL,                      'N',           'S',                       NULL,                     NULL,                     NULL,
                                                NULL);
                        IF (C_ITEMPERDA.NRLOTEESTQ <> ' ') THEN
                           BEGIN
                              SELECT MAX(L.CDFILIAL), MAX(L.NRLANCTONF)
                                INTO V_CDFILIENTR, V_NRLANCTOENTR
                                FROM ITLANCTOEST IT JOIN LANCTOESTOQ L
                                                      ON IT.CDFILIAL = L.CDFILIAL
                                                     AND IT.NRLANCESTQ = L.NRLANCESTQ
                               WHERE IT.CDFILIMOVI = P_CDFILIAL
                                 AND IT.CDPRODUTO  = C_ITEMPERDA.CDPRODUTO
                                 AND IT.NRLOTEESTQ = C_ITEMPERDA.NRLOTEESTQ
                                 AND IT.NRSUBLOTE  = C_ITEMPERDA.NRSUBLOTE
                                 AND IT.IDTIPOMOVI = '2';
                           EXCEPTION
                              WHEN NO_DATA_FOUND THEN
                                 V_CDFILIENTR   := NULL;
                                 V_NRLANCTOENTR := NULL;
                           END;

                           BEGIN
                              SELECT NRNOTAFISC, DTEMISSAO
                                INTO V_NRNOTAFISC, V_DTEMISSAO
                                FROM NOTAFISCAL
                               WHERE CDFILIAL = V_CDFILIENTR
                                 AND NRLANCTONF = V_NRLANCTOENTR;
                           EXCEPTION
                              WHEN NO_DATA_FOUND THEN
                                 V_NRNOTAFISC := NULL;
                                 V_DTEMISSAO  := NULL;
                           END;
                           IF (V_NRNOTAFISC IS NOT NULL) THEN
                              V_DSMENSAGEM := 'Insumo : '||C_ITEMPERDA.CDARVPROD||' - Lote : '||C_ITEMPERDA.NRLOTEESTQ||' - NF Entr. : '||V_NRNOTAFISC||' - Dt. Emiss : '||V_DTEMISSAO;
                              --BUSCA MAIOR NRDADOADIC PARA INSERIR O PROXIMO
                              SELECT NVL(MAX(NRDADOADIC),0)
                                INTO V_NRDADOADIC
                                FROM DADOSADIC
                               WHERE CDFILIAL   = P_CDFILIAL
                                 AND NRLANCTONF = V_NRLANCTONFPE;

                              V_NRDADOADIC := LPAD(RTRIM(TO_CHAR(TO_NUMBER(V_NRDADOADIC) + 1)),3,0);
                              INSERT INTO DADOSADIC (CDFILIAL,NRLANCTONF,NRDADOADIC,CDMENSAGEM, DSDADOADIC)
                                             VALUES (P_CDFILIAL, V_NRLANCTONFPE, V_NRDADOADIC, NULL, V_DSMENSAGEM);

                              --GERA_NOTAFISCAL_DADOSADIC(P_CDFILIAL, V_NRLANCTONFPE, NULL, NULL, NULL, V_DSMENSAGEM);
                           END IF;
                        END IF;
                     END IF;
                  END IF;
               END IF;
            END LOOP;
            V_COUNTITEMPERDA := 0;
            BEGIN
               SELECT COUNT(1)
                 INTO V_COUNTITEMPERDA
                 FROM ITEMPRODUTO
                WHERE CDFILIAL = P_CDFILIAL
                  AND NRLANCTONF = V_NRLANCTONFPE;
            EXCEPTION
               WHEN NO_DATA_FOUND THEN
                  V_COUNTITEMPERDA := 0;
            END;
            IF V_COUNTITEMPERDA > 0 THEN
               GERA_NOTAFISCAL_FECHAMENTO(P_CDFILIAL, V_NRLANCTONFPE, V_DTPROCESSA, V_PRXLANCESTQPE, 'S', P_CDOPERADOR, 'N', V_ATUAESTOQUE);
               UPDATE NOTAFISCAL
                  SET NREXPEDICAO = V_NRSEQEXP,
                      CDROTATRANS = V_CDROTATRANSPED
                WHERE CDFILIAL = P_CDFILIAL
                  AND NRLANCTONF = V_NRLANCTONFPE;
            ELSE
               DELETE FROM NOTAFISCAL
               WHERE CDFILIAL = P_CDFILIAL
                 AND NRLANCTONF = V_NRLANCTONFPE;

               V_NRLANCTONFPE := '';
            END IF;
         END IF;

      END IF;
   END IF;
   P_RETORNO := V_NRSEQEXP||V_NRLANCTONF||V_NRLANCTONFPE;

END;
/
