CREATE OR REPLACE PROCEDURE GERA_NOTAFISCAL_PRODUTO
   (P_CDFILIAL     IN NOTAFISCAL.CDFILIAL%TYPE,
    P_NRLANCTONF   IN NOTAFISCAL.NRLANCTONF%TYPE,
    P_CDPRODUTO    IN ITEMPRODUTO.CDPRODUTO%TYPE,
    P_CDPRODEMIS   IN ITEMPRODUTO.CDPRODEMIS%TYPE,
    P_DSPRODEMIS   IN ITEMPRODUTO.DSPRODEMIS%TYPE,
    P_QTITEMPROD   IN ITEMPRODUTO.QTITEMPROD%TYPE,
    P_VRUNITITEM   IN ITEMPRODUTO.VRUNITITEM%TYPE,
    P_VRDESCITEM   IN ITEMPRODUTO.VRDESCITEM%TYPE   DEFAULT 0,
    P_CDFILIALITG  IN ITEMPRODUTO.CDFILIALPED%TYPE  DEFAULT NULL,
    P_NRINTEGRACAO IN ITEMPRODUTO.NRPEDIDO%TYPE     DEFAULT NULL,
    P_NRITEMINTEGR IN ITEMPRODUTO.NRITEMPED%TYPE    DEFAULT NULL,
    P_CDCSTINFUSU  IN ITEMPRODUTO.CDCSTINFUSU%TYPE  DEFAULT NULL,
    P_CDCFOPINFUSU IN ITEMPRODUTO.CDCFOPINFUSU%TYPE DEFAULT NULL,
    P_CDSUFXINFUSU IN ITEMPRODUTO.CDSUFXINFUSU%TYPE DEFAULT NULL,
    P_CDALMOXARIFE IN ITEMPRODUTO.CDALMOXARIFE%TYPE DEFAULT NULL,
    P_CDLOCALESTOQ IN ITEMPRODUTO.CDLOCALESTOQ%TYPE DEFAULT NULL,
    P_NRLOTEESTQ   IN ITEMPRODUTO.NRLOTEESTQ%TYPE   DEFAULT NULL,
    P_NRSUBLOTE    IN ITEMPRODUTO.NRSUBLOTE%TYPE    DEFAULT NULL,
    P_IDCONFORITEM IN ITEMPRODUTO.IDCONFORITEM%TYPE DEFAULT 'S',
    P_IDTPNFCREDEB IN ITEMPRODUTO.IDTPNFCREDEB%TYPE DEFAULT NULL,
    P_QTVOLUITEM   IN ITEMPRODUTO.QTVOLUITEM%TYPE   DEFAULT 0,
    P_CDSERVFILI   IN ITEMPRODUTO.CDSERVFILI%TYPE   DEFAULT NULL,
    P_CDFILIAPUR   IN ITEMPRODUTO.CDFILIAL%TYPE     DEFAULT NULL,
    P_CDMARCA      IN ITEMPRODUTO.CDMARCA%TYPE      DEFAULT NULL,
    P_CDSERVFATU   IN ITEMPRODUTO.CDSERVFATU%TYPE   DEFAULT NULL,
    P_IDORIGEMPROD IN ITEMPRODUTO.IDORIGEMPROD%TYPE DEFAULT 'N',
    P_IDATUESTPROD  IN ITEMPRODUTO.IDATUESTPROD %TYPE DEFAULT 'S',
    P_VRICMSSTITORIG IN ITEMPRODUTO.VRICMSSTITORIG%TYPE DEFAULT 0,
    P_DSJUSTIFICATIVA IN ITEMPRODUTO.DSJUSTIFICATIVA%TYPE DEFAULT NULL)

AS

   V_NRSEQITPROD  VARCHAR2(04);
   V_IDCNTRESTOQ  VARCHAR2(01);
   V_VRTOTAITEM   NUMBER;
   V_VRCONTITEM   NUMBER;
   V_VRDESPERITEM NUMBER;
   V_VRUNITITEM   NUMBER;
   V_VRTAXASTRIB  NUMBER;

   V_CDALMOXARIFE VARCHAR2(06);
   V_CDLOCALESTOQ VARCHAR2(06);
   V_IDUTILALMOX  VARCHAR2(01);
   V_IDUTILLCESTQ VARCHAR2(01);
   V_IDUTILLOTE   VARCHAR2(01);

   V_IDENTRSAIDOP VARCHAR2(01);
   V_CDFILIEMIT   VARCHAR2(04);
   V_CDFILIRECE   VARCHAR2(04);
   V_CDFILIMOVI   VARCHAR2(04);
   V_NRLOTEESTQ   VARCHAR2(20);
   V_NRSUBLOTE    VARCHAR2(04);

   V_QTITEMPROD   NUMBER;
   V_QTSALDSAID   NUMBER;

   V_IDSISTEMA    NOTAFISCAL.IDSISTEMA%TYPE;

   V_CDFILIALPED  FILIAL.CDFILIAL%TYPE;
   V_NRPEDIDO     PEDIDO.NRPEDIDO%TYPE;
   V_NRITEMPED    ITEMPEDIDO.NRITEMPED%TYPE;

   V_CDFILIALPDV  FILIAL.CDFILIAL%TYPE;
   V_NRSEQVENDA   VENDA.NRSEQVENDA%TYPE;
   V_NRSEQUITVEND ITEMVENDA.NRSEQUITVEND%TYPE;

   V_CDARVPROD    PRODUTO.CDARVPROD%TYPE;
   V_CDEMPRESA    EMPRESA.CDEMPRESA%TYPE;
   V_CDINSCESTA   NOTAFISCAL.CDINSCESTA%TYPE;
   V_CDTIPOOPER   NOTAFISCAL.CDTIPOOPER%TYPE;
   V_IDORIGDESTNF NOTAFISCAL.IDORIGDESTNF%TYPE;
   V_CDCLIENTE    NOTAFISCAL.CDCLIENTE%TYPE;
   V_CDGRUPOFISC  GRUPOFISCAL.CDGRUPOFISC%TYPE;
   V_DTENTRSAID   NOTAFISCAL.DTENTRSAID%TYPE;
   V_PAISORIG     MUNICIPIO.CDPAIS%TYPE;
   V_ESTAORIG     MUNICIPIO.SGESTADO%TYPE;
   V_PAISDEST     MUNICIPIO.CDPAIS%TYPE;
   V_ESTADEST     MUNICIPIO.SGESTADO%TYPE;
   V_MUNIORIG     MUNICIPIO.CDMUNICIPIO%TYPE;
   V_ALIQUTMP     ALIQTEMP.VRALIQUTMP%TYPE;
   V_TRATIMPST    ALIQTEMP.IDTRIMPSTTMP%TYPE;
   V_PBCSUBTRIB   ALIQTEMP.VRPBCSTTMP%TYPE;

   V_VRDESCITEM      ITEMPRODUTO.VRDESCITEM%TYPE;
   V_VRTOTPEDIDO     NUMBER;
   V_CDPRODESTO      PRODUTO.CDPRODESTO%TYPE;
   V_VRFATOCONV      NUMBER;
   V_NRORDEMCMPPED   PEDIDO.NRORDEMCMPPED%TYPE;
   V_NRITORDEMCMPPED ITEMPEDIDO.NRITORDEMCMPPED%TYPE;
   V_DADOADIC         VARCHAR2(03);
   V_QTADIC           FLOAT;
   V_IDFUNCAOFILI     VARCHAR2(01);
   V_CDTPOPERPERDA    VARCHAR2(02);
   V_CDTPOPERSOBRA    VARCHAR2(02);
   V_NRLOTEESTQORIG   VARCHAR2(20);
   V_NRSUBLOTEORIG    VARCHAR2(04);
   V_NOTAFORNECEDOR   VARCHAR2(20);
   V_LOTEFORNECEDOR   VARCHAR2(20);
   V_TEXTOADICEMIS    VARCHAR2(100);
   V_IDINFLOTFOREMI   VARCHAR2(01);
   V_NRLOTEDADOFOR    VARCHAR2(20);
   V_NRSUBLOTEDADOFOR VARCHAR2(04);

   TYPE VETOR_NRSEQITPROD IS TABLE OF VARCHAR2(04) INDEX BY BINARY_INTEGER;
   ARRAY_NRSEQITPROD VETOR_NRSEQITPROD;
   INDEX_ARRAY_NRSEQITPROD INTEGER;

   V_IDPEDINDUSTRIA   VARCHAR2(01);
   V_IDATUESTTPOP     VARCHAR2(01);

   V_VRICMSSTITORIG ITEMPRODUTO.VRICMSSTITORIG%TYPE;
BEGIN
   INDEX_ARRAY_NRSEQITPROD := 1;
   IF P_NRINTEGRACAO IS NOT NULL THEN
      /* BUSCA O NUMERO DA ORDEM DE COMPRA DE ACORDO COM O NUMERO DO PEDIDO E DO ITEM */
      BEGIN
         SELECT MAX(P.NRORDEMCMPPED), MAX(I.NRITORDEMCMPPED)
           INTO V_NRORDEMCMPPED, V_NRITORDEMCMPPED
           FROM PEDIDO P, ITEMPEDIDO I
          WHERE P.CDFILIAL = I.CDFILIAL
            AND P.NRPEDIDO = I.NRPEDIDO
            AND P.NRPEDIDO = P_NRINTEGRACAO
            AND P.CDFILIAL = P_CDFILIAL ;
       EXCEPTION
          WHEN NO_DATA_FOUND THEN BEGIN
             V_NRORDEMCMPPED := '';
             V_NRITORDEMCMPPED := '';
          END;
       END;
   ELSE
      V_NRORDEMCMPPED := '';

      SELECT NVL(MAX(IDFUNCAOFILI), 'X')
        INTO V_IDFUNCAOFILI
        FROM FILIAL F, NOTAFISCAL N
       WHERE F.CDFILIAL = N.CDFILIEMIT
         AND N.CDFILIAL = P_CDFILIAL
         AND N.NRLANCTONF = P_NRLANCTONF
         AND N.IDENTRSAIDOP = 'S';

      IF V_IDFUNCAOFILI = 'O' THEN
         SELECT MAX(USR_NRPEDIDO)
           INTO V_NRORDEMCMPPED
           FROM NFRELACPEXOL R, PEDIDOEXOL P
          WHERE R.CDFILIAL = P_CDFILIAL
            AND R.NRLANCTONF = P_NRLANCTONF
            AND R.CDFILDEST = P.CDFILDEST
            AND R.CDFILLANC = P.CDFILLANC
            AND R.NRPEDEXOL = P.NRPEDEXOL;
      END IF;
   END IF;

    /*PREENCHE A MENSAGEM COM O NUMERO DA ORDEM DE COMPRA*/
   IF V_NRORDEMCMPPED IS NOT NULL THEN

      /* MAIOR REGISTRO DA TABELA DE DADOS ADICIONAIS */
      SELECT MAX(NRDADOADIC)
        INTO   V_DADOADIC
        FROM DADOSADIC
       WHERE (CDFILIAL   = P_CDFILIAL)
         AND (NRLANCTONF = P_NRLANCTONF);

      IF V_DADOADIC IS NULL THEN
         V_DADOADIC := '001';
      END IF;

      SELECT COUNT(P_NRLANCTONF)
        INTO V_QTADIC
        FROM DADOSADIC
        WHERE (CDFILIAL   = P_cdFILIAL) AND
              (NRLANCTONF = P_NRLANCTONF);

      IF NOT (V_QTADIC > 0) THEN
         INSERT INTO DADOSADIC
            (CDFILIAL, NRLANCTONF, NRDADOADIC, DSDADOADIC)
         VALUES
            (P_CDFILIAL, P_NRLANCTONF, V_DADOADIC, 'Numero da Ordem do Pedido: '||V_NRORDEMCMPPED);
      END IF;
   END IF;

   SELECT LPAD((TO_NUMBER(NVL(MAX(NRSEQITPROD),'0000')) + 1), 4, 0)
   INTO V_NRSEQITPROD
   FROM ITEMPRODUTO
   WHERE CDFILIAL   = P_CDFILIAL AND
         NRLANCTONF = P_NRLANCTONF;
  
   ARRAY_NRSEQITPROD(INDEX_ARRAY_NRSEQITPROD) := V_NRSEQITPROD;
   INDEX_ARRAY_NRSEQITPROD := INDEX_ARRAY_NRSEQITPROD + 1;

   V_VRUNITITEM := P_VRUNITITEM;

   SELECT MAX(IDENTRSAIDOP), MAX(CDFILIEMIT), MAX(CDFILIRECE), MAX(IDSISTEMA),
          MAX(CDEMPRESA), MAX(CDINSCESTA), MAX(CDTIPOOPER), MAX(IDORIGDESTNF),
          MAX(CDCLIENTE), MAX(DTENTRSAID)
   INTO V_IDENTRSAIDOP, V_CDFILIEMIT, V_CDFILIRECE, V_IDSISTEMA,
        V_CDEMPRESA, V_CDINSCESTA, V_CDTIPOOPER, V_IDORIGDESTNF,
        V_CDCLIENTE, V_DTENTRSAID
   FROM NOTAFISCAL
   WHERE CDFILIAL   = P_CDFILIAL AND
         NRLANCTONF = P_NRLANCTONF;

   IF (V_IDENTRSAIDOP = 'S') THEN
      V_CDFILIMOVI := V_CDFILIEMIT;
   ELSE
      V_CDFILIMOVI := V_CDFILIRECE;
   END IF;

   BEGIN
      SELECT CDTPOPERPERDA, CDTPOPERSOBRA
        INTO V_CDTPOPERPERDA, V_CDTPOPERSOBRA
        FROM PAREXPEDICAO
       WHERE CDFILIAL = V_CDFILIMOVI;
   EXCEPTION
      WHEN NO_DATA_FOUND THEN
         V_CDTPOPERPERDA := NULL;
         V_CDTPOPERSOBRA := NULL;
   END;

   SELECT MAX(CDARVPROD), MAX(NVL(VRFATOCONV,1)), MAX(CDPRODESTO)
   INTO V_CDARVPROD, V_VRFATOCONV, V_CDPRODESTO
   FROM PRODUTO
   WHERE CDPRODUTO = P_CDPRODUTO;

   CONSULTA_GRUPOFISCAL(V_IDORIGDESTNF, V_CDCLIENTE, '', 'S', V_CDTIPOOPER, V_CDGRUPOFISC);
   CONSULTA_INCIDENCIA('S', V_CDEMPRESA, V_CDARVPROD, V_CDINSCESTA, V_CDTIPOOPER, P_CDFILIAL, P_NRLANCTONF, V_CDGRUPOFISC, NULL,
                       'N', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, P_IDORIGEMPROD);

   FOR C_IMPOSTRIB IN (SELECT DISTINCT (CDIMPOTEMP) AS CDIMPOTEMP
                       FROM INCITEMP IT, IMPOSTO IP
                       WHERE (IT.NRINCITEMP  = P_CDFILIAL || P_NRLANCTONF) AND
                             (IT.CDIMPOTEMP  = IP.CDIMPOSTRIB)) LOOP

      SELECT MAX(CDPAISORIG), MAX(SGESTAORIG), MAX(CDPAISDEST), MAX(SGESTADEST), MAX(CDMUNIORIG)
      INTO V_PAISORIG, V_ESTAORIG, V_PAISDEST, V_ESTADEST, V_MUNIORIG
      FROM ORIGDESTNF
      WHERE CDFILIAL   = P_CDFILIAL AND
            NRLANCTONF = P_NRLANCTONF;

      CONSULTA_ALIQUOTA(C_IMPOSTRIB.CDIMPOTEMP, 'S', V_CDEMPRESA, V_CDARVPROD, V_CDINSCESTA,
                        V_PAISORIG, V_ESTAORIG, V_PAISDEST, V_ESTADEST, V_MUNIORIG, (P_QTITEMPROD * P_VRUNITITEM),
                        V_DTENTRSAID, P_CDFILIAL, P_NRLANCTONF, V_CDGRUPOFISC,  NULL, NULL, NULL, NULL, NULL, NULL, NULL, P_IDORIGEMPROD);

      SELECT NVL(MAX(VRALIQUTMP),0), NVL(MAX(IDTRIMPSTTMP), '0'), NVL(MAX(VRPBCSTTMP),0)
      INTO V_ALIQUTMP, V_TRATIMPST, V_PBCSUBTRIB
      FROM ALIQTEMP
      WHERE (NRALIQTEMP = P_CDFILIAL || P_NRLANCTONF);

      IF V_TRATIMPST = '1' THEN
         V_VRTAXASTRIB := (1 + (V_PBCSUBTRIB/100)) * (V_ALIQUTMP/100);
         V_VRUNITITEM  := (V_VRUNITITEM / (1 - V_VRTAXASTRIB));
      END IF;
   END LOOP;

   DELETE FROM INCITEMP
   WHERE NRINCITEMP  = P_CDFILIAL || P_NRLANCTONF;

   DELETE FROM ALIQTEMP
   WHERE NRALIQTEMP = P_CDFILIAL || P_NRLANCTONF;

   IF (V_IDSISTEMA = 'PDV') OR (V_IDSISTEMA = 'VND') THEN /* SOL.124659 */
      V_VRTOTAITEM   := TRUNC(V_VRUNITITEM * P_QTITEMPROD,2);
   ELSE
      V_VRTOTAITEM   := V_VRUNITITEM * P_QTITEMPROD;
   END IF;

   V_VRCONTITEM   := V_VRTOTAITEM - P_VRDESCITEM;
   V_VRTOTPEDIDO  := V_VRTOTAITEM;
   IF V_VRTOTAITEM > 0  THEN
      V_VRDESPERITEM := ROUND((P_VRDESCITEM * 100)/V_VRTOTAITEM, 4);
   ELSE
      V_VRDESPERITEM := 0;
   END IF;

   IF (V_IDSISTEMA NOT IN('FAI','FAC','FAS')) THEN
      SELECT NVL(MAX(P.IDCNTRESTOQ),NVL(MAX(F.IDCTRLESTQ),'S')),
             NVL(NVL(MAX(P.CDALMOXARIFE),MAX(F.CDALMOXARIFE)),' '),
             NVL(NVL(MAX(P.CDLOCALESTOQ),MAX(F.CDLOCALESTOQ)),' '),
             NVL(MAX(IDUTILALMOX),'N'),
             NVL(MAX(IDUTILLCESTQ),'N'),
             NVL(MAX(IDUTILLOTE),'N')
      INTO V_IDCNTRESTOQ,
           V_CDALMOXARIFE,
           V_CDLOCALESTOQ,
           V_IDUTILALMOX,
           V_IDUTILLCESTQ,
           V_IDUTILLOTE
      FROM PRODFILI P, PARAMFILIAL F, PRODUTO D
      WHERE P.CDFILIAL   = V_CDFILIMOVI AND
            P.CDFILIAL   = F.CDFILIAL   AND
            D.CDPRODUTO  = P_CDPRODUTO  AND
            P.CDPRODUTO  = D.CDPRODESTO AND
            (F.IDCTRLESTQ = 'S' OR F.IDCTRLESTQ IS NULL);

      IF (P_CDALMOXARIFE IS NOT NULL) THEN
         V_CDALMOXARIFE := P_CDALMOXARIFE;
         IF (P_CDLOCALESTOQ IS NOT NULL) THEN
            V_CDLOCALESTOQ := P_CDLOCALESTOQ;
         ELSE
            V_CDLOCALESTOQ :=  ' ';
         END IF;
      ELSE
         IF (V_IDUTILALMOX = 'N') THEN
            V_CDALMOXARIFE := ' ';
            V_CDLOCALESTOQ := ' ';
         ELSIF (V_CDLOCALESTOQ = 'N') THEN
            V_CDLOCALESTOQ := ' ';
         END IF;
      END IF;

      IF (V_IDSISTEMA = 'PDV') OR (V_IDSISTEMA = 'VND') THEN
         V_CDFILIALPED  := NULL;
         V_NRPEDIDO     := NULL;
         V_NRITEMPED    := NULL;
         V_CDFILIALPDV  := P_CDFILIALITG;
         V_NRSEQVENDA   := P_NRINTEGRACAO;
         V_NRSEQUITVEND := P_NRITEMINTEGR;
         V_IDPEDINDUSTRIA := 'N';
      ELSIF (V_IDSISTEMA = 'PED') OR (V_IDSISTEMA = 'EXP') OR (V_IDSISTEMA = 'SEP') THEN
         V_CDFILIALPED  := P_CDFILIALITG;
         V_NRPEDIDO     := P_NRINTEGRACAO;
         V_NRITEMPED    := P_NRITEMINTEGR;
         V_CDFILIALPDV  := NULL;
         V_NRSEQVENDA   := NULL;
         V_NRSEQUITVEND := NULL;
         SELECT NVL(MAX(IDPEDINDUSTRIA), 'N')
           INTO V_IDPEDINDUSTRIA
           FROM PEDIDO
           WHERE CDFILIAL = V_CDFILIALPED
             AND NRPEDIDO = V_NRPEDIDO;
      ELSE
         V_CDFILIALPED  := NULL;
         V_NRPEDIDO     := NULL;
         V_NRITEMPED    := NULL;
         V_CDFILIALPDV  := NULL;
         V_NRSEQVENDA   := NULL;
         V_NRSEQUITVEND := NULL;
         V_IDPEDINDUSTRIA := 'N';
      END IF;

      IF V_IDCNTRESTOQ = 'S' THEN
         INSERT INTO PRODLCESTOQ
         (CDFILIAL, CDALMOXARIFE, CDLOCALESTOQ, CDPRODUTO)
         (SELECT V_CDFILIMOVI, V_CDALMOXARIFE, V_CDLOCALESTOQ, P_CDPRODUTO
          FROM PRODFILI
          WHERE CDFILIAL  = V_CDFILIMOVI  AND
                CDPRODUTO = P_CDPRODUTO AND
                NVL(IDCNTRESTOQ, 'S') <> 'N'
          MINUS
          SELECT CDFILIAL, CDALMOXARIFE, CDLOCALESTOQ, CDPRODUTO
          FROM PRODLCESTOQ
          WHERE CDFILIAL     = V_CDFILIMOVI   AND
                CDALMOXARIFE = V_CDALMOXARIFE AND
                CDLOCALESTOQ = V_CDLOCALESTOQ AND
                CDPRODUTO    = P_CDPRODUTO);
      END IF;
   ELSE
      V_IDCNTRESTOQ := 'N';
   END IF;
   IF (V_IDCNTRESTOQ = 'S') AND (V_IDSISTEMA = 'SEP') AND (P_IDATUESTPROD = 'N')  THEN
      V_IDCNTRESTOQ := 'N';
   END IF;

   SELECT NVL(MAX(IDATUESTTPOP), 'S')
     INTO V_IDATUESTTPOP
     FROM TIPOOPERAC
    WHERE CDTIPOOPER = V_CDTIPOOPER
      AND IDENTRSAIDOP = V_IDENTRSAIDOP;
      
   IF (V_IDCNTRESTOQ = 'S') AND (V_IDATUESTTPOP <> 'N') AND (V_IDENTRSAIDOP = 'S') THEN
      V_QTITEMPROD := P_QTITEMPROD;
      V_QTSALDSAID := P_QTITEMPROD;

      IF (P_NRLOTEESTQ IS NULL) THEN

         V_NRLOTEESTQ := ' ';
         V_NRSUBLOTE  := ' ';

         INSERT INTO LOTE
            (CDFILIAL, NRLOTEESTQ, NRSUBLOTE, CDPRODUTO, IDSTATLOTE, DTENTRLOTE)
            (SELECT V_CDFILIMOVI,  V_NRLOTEESTQ, V_NRSUBLOTE,
                    V_CDPRODESTO, 'L' , SYSDATE
             FROM PARAMGERAL
             MINUS
             SELECT CDFILIAL,      NRLOTEESTQ,  NRSUBLOTE,
                    V_CDPRODESTO, 'L', SYSDATE
             FROM LOTE
             WHERE  V_CDFILIMOVI  =  CDFILIAL     AND
                    V_NRLOTEESTQ  =  NRLOTEESTQ   AND
                    V_NRSUBLOTE   =  NRSUBLOTE    AND
                    V_CDPRODESTO  =  CDPRODUTO);

         IF (V_IDUTILLOTE = 'S') THEN

            FOR C_LOTE IN (SELECT L.NRLOTEESTQ,   L.NRSUBLOTE,
                                 (P.QTTOTALESTOQ/V_VRFATOCONV) AS QTTOTALESTOQ,
                                  P.VRTOTALESTOQ
                           FROM POSESTATU P, LOTE L
                           WHERE (L.CDFILIAL      = V_CDFILIMOVI)   AND
                                 (P.CDALMOXARIFE  = V_CDALMOXARIFE) AND
                                 (P.CDLOCALESTOQ  = V_CDLOCALESTOQ) AND
                                 (P.CDPRODUTO     = V_CDPRODESTO)   AND
                                 (P.CDFILIAL      = L.CDFILIAL)     AND
                                 (P.NRLOTEESTQ    = L.NRLOTEESTQ)   AND
                                 (P.NRSUBLOTE     = L.NRSUBLOTE)    AND
                                 (P.CDPRODUTO     = L.CDPRODUTO)    AND
                                 (P.QTTOTALESTOQ  > 0)              AND
                                 (P.NRLOTEESTQ   <> ' ')            AND
                                 (NVL(L.DTVALILOTE, TO_DATE('30/12/9999', 'DD/MM/YYYY')) >= TO_DATE(SYSDATE))
                           ORDER BY  NVL(L.DTVALILOTE, L.DTENTRLOTE), L.NRLOTEESTQ, L.NRSUBLOTE ) LOOP

               V_NRLOTEESTQ := C_LOTE.NRLOTEESTQ;
               V_NRSUBLOTE  := C_LOTE.NRSUBLOTE;

               IF (V_QTSALDSAID <= C_LOTE.QTTOTALESTOQ) THEN
                  V_QTITEMPROD := V_QTSALDSAID;
               ELSE
                  V_QTITEMPROD := C_LOTE.QTTOTALESTOQ;
               END IF;

               IF (V_IDSISTEMA = 'PDV') OR (V_IDSISTEMA = 'VND') THEN /* SOL.124659 */
                  V_VRTOTAITEM := TRUNC(V_VRUNITITEM * V_QTITEMPROD,2);
               ELSE
                  V_VRTOTAITEM := V_VRUNITITEM * V_QTITEMPROD;
               END IF;

               V_VRCONTITEM := V_VRTOTAITEM;

               IF V_VRTOTPEDIDO > 0  THEN
                  V_VRDESCITEM   := (P_VRDESCITEM * V_VRTOTAITEM)/V_VRTOTPEDIDO;
               ELSE
                  V_VRDESCITEM   := 0;
               END IF;
               IF V_VRTOTAITEM > 0  THEN
                  V_VRDESPERITEM := (V_VRDESCITEM * 100)/V_VRTOTAITEM;
               ELSE
                  V_VRDESPERITEM := 0;
               END IF;
               IF (V_QTSALDSAID > 0) THEN
                  IF (V_IDSISTEMA = 'PDV') OR (V_IDSISTEMA = 'VND') THEN
                     INSERT INTO ITEMPRODUTO
                        (CDFILIAL,     NRLANCTONF,   NRSEQITPROD,  CDPRODUTO,    CDPRODEMIS,
                         DSPRODEMIS,   IDATUVRESTOQ, QTITEMPROD,   VRUNITITEM,   VRDESCITEM,
                         VRTOTAITEM,   VRCONTITEM,   IDCONFORITEM, VRBRUTITEM,   CDFILIALPED,
                         NRPEDIDO,     NRITEMPED,    CDCSTINFUSU,  CDCFOPINFUSU, CDSUFXINFUSU,
                         CDFILIMOVI,   CDALMOXARIFE, CDLOCALESTOQ, NRLOTEESTQ,   NRSUBLOTE,
                         CDFILIALVEND, NRSEQVENDA,   NRSEQUITVEND, VRDESPERITEM, QTVOLUITEM,
                         CDSERVFILI, CDFILIAPUR, CDMARCA, CDSERVFATU, NRPEDPROD, NRSEQPEDPROD, IDORIGEMPROD, IDATUESTPROD,
                         VRICMSSTITORIG)
                     VALUES
                        (P_CDFILIAL,     P_NRLANCTONF,   V_NRSEQITPROD,  P_CDPRODUTO,    P_CDPRODEMIS,
                         P_DSPRODEMIS,   V_IDCNTRESTOQ,  V_QTITEMPROD,   V_VRUNITITEM,   V_VRDESCITEM,
                         TRUNC(V_VRTOTAITEM,2), TRUNC(V_VRCONTITEM,2),   P_IDCONFORITEM, TRUNC(V_VRCONTITEM,2),
                         V_CDFILIALPED,  V_NRPEDIDO,     V_NRITEMPED,    P_CDCSTINFUSU,  P_CDCFOPINFUSU, P_CDSUFXINFUSU,
                         V_CDFILIMOVI,   V_CDALMOXARIFE, V_CDLOCALESTOQ, V_NRLOTEESTQ,   V_NRSUBLOTE,
                         V_CDFILIALPDV,  V_NRSEQVENDA,   V_NRSEQUITVEND, V_VRDESPERITEM, P_QTVOLUITEM,
                         P_CDSERVFILI, P_CDFILIAPUR, P_CDMARCA, P_CDSERVFATU, V_NRORDEMCMPPED, V_NRITORDEMCMPPED, P_IDORIGEMPROD,
                         P_IDATUESTPROD, P_VRICMSSTITORIG);
                  ELSE
                     INSERT INTO ITEMPRODUTO
                        (CDFILIAL,     NRLANCTONF,   NRSEQITPROD,  CDPRODUTO,    CDPRODEMIS,
                         DSPRODEMIS,   IDATUVRESTOQ, QTITEMPROD,   VRUNITITEM,   VRDESCITEM,
                         VRTOTAITEM,   VRCONTITEM,   IDCONFORITEM, VRBRUTITEM,   CDFILIALPED,
                         NRPEDIDO,     NRITEMPED,    CDCSTINFUSU,  CDCFOPINFUSU, CDSUFXINFUSU,
                         CDFILIMOVI,   CDALMOXARIFE, CDLOCALESTOQ, NRLOTEESTQ,   NRSUBLOTE,
                         CDFILIALVEND, NRSEQVENDA,   NRSEQUITVEND, VRDESPERITEM, QTVOLUITEM,
                         CDSERVFILI, CDFILIAPUR, CDMARCA, CDSERVFATU, NRPEDPROD, NRSEQPEDPROD, IDORIGEMPROD,
                         IDATUESTPROD, VRICMSSTITORIG)
                     VALUES
                        (P_CDFILIAL,     P_NRLANCTONF,   V_NRSEQITPROD,  P_CDPRODUTO,    P_CDPRODEMIS,
                         P_DSPRODEMIS,   V_IDCNTRESTOQ,  V_QTITEMPROD,   V_VRUNITITEM,   V_VRDESCITEM,
                         ROUND(V_VRTOTAITEM,2), ROUND(V_VRCONTITEM,2),   P_IDCONFORITEM, ROUND(V_VRCONTITEM,2),
                         V_CDFILIALPED,  V_NRPEDIDO,     V_NRITEMPED,    P_CDCSTINFUSU,  P_CDCFOPINFUSU, P_CDSUFXINFUSU,
                         V_CDFILIMOVI,   V_CDALMOXARIFE, V_CDLOCALESTOQ, V_NRLOTEESTQ,   V_NRSUBLOTE,
                         V_CDFILIALPDV,  V_NRSEQVENDA,   V_NRSEQUITVEND, V_VRDESPERITEM, P_QTVOLUITEM,
                         P_CDSERVFILI, P_CDFILIAPUR, P_CDMARCA, P_CDSERVFATU, V_NRORDEMCMPPED, V_NRITORDEMCMPPED, P_IDORIGEMPROD,
                         P_IDATUESTPROD, P_VRICMSSTITORIG);
                  END IF;

                  IF (V_QTSALDSAID <= C_LOTE.QTTOTALESTOQ) THEN
                     V_QTSALDSAID := 0;
                  ELSE
                     V_QTSALDSAID := V_QTSALDSAID - C_LOTE.QTTOTALESTOQ;
                  END IF;

                  V_NRSEQITPROD := LPAD((TO_NUMBER(NVL(V_NRSEQITPROD,'0000')) + 1), 4, 0);

                  ARRAY_NRSEQITPROD(INDEX_ARRAY_NRSEQITPROD) := V_NRSEQITPROD;
                  INDEX_ARRAY_NRSEQITPROD := INDEX_ARRAY_NRSEQITPROD + 1;
               END IF;
            END LOOP;

            IF (V_QTSALDSAID > 0) THEN
               IF (V_IDSISTEMA = 'PDV') OR (V_IDSISTEMA = 'VND') THEN /* SOL.124659 */
                  V_VRTOTAITEM := TRUNC(V_VRUNITITEM * V_QTSALDSAID,2);
               ELSE
                  V_VRTOTAITEM := V_VRUNITITEM * V_QTSALDSAID;
               END IF;

               V_VRCONTITEM := V_VRTOTAITEM;

               IF V_VRTOTPEDIDO > 0  THEN
                  V_VRDESCITEM   := (P_VRDESCITEM * V_VRTOTAITEM)/V_VRTOTPEDIDO;
               ELSE
                  V_VRDESCITEM   := 0;
               END IF;

               IF V_VRTOTAITEM > 0  THEN
                  V_VRDESPERITEM := (V_VRDESCITEM * 100)/V_VRTOTAITEM;
               ELSE
                  V_VRDESPERITEM := 0;
               END IF;

               IF V_VRTOTPEDIDO > 0  THEN
                  V_VRICMSSTITORIG   := (P_VRICMSSTITORIG * V_VRTOTAITEM)/V_VRTOTPEDIDO;
               ELSE
                  V_VRICMSSTITORIG   := 0;
               END IF;

               IF (V_IDSISTEMA = 'PDV') OR (V_IDSISTEMA = 'VND') THEN
                  INSERT INTO ITEMPRODUTO
                     (CDFILIAL,     NRLANCTONF,   NRSEQITPROD,  CDPRODUTO,    CDPRODEMIS,
                      DSPRODEMIS,   IDATUVRESTOQ, QTITEMPROD,   VRUNITITEM,   VRDESCITEM,
                      VRTOTAITEM,   VRCONTITEM,   IDCONFORITEM, VRBRUTITEM,   CDFILIALPED,
                      NRPEDIDO,     NRITEMPED,    CDCSTINFUSU,  CDCFOPINFUSU, CDSUFXINFUSU,
                      CDFILIMOVI,   CDALMOXARIFE, CDLOCALESTOQ, NRLOTEESTQ,   NRSUBLOTE,
                      CDFILIALVEND, NRSEQVENDA,   NRSEQUITVEND, VRDESPERITEM, QTVOLUITEM,
                      CDSERVFILI, CDFILIAPUR, CDMARCA, CDSERVFATU, NRPEDPROD, NRSEQPEDPROD, IDORIGEMPROD,
                      IDATUESTPROD, VRICMSSTITORIG)
                  VALUES
                     (P_CDFILIAL,     P_NRLANCTONF,   V_NRSEQITPROD,  P_CDPRODUTO,    P_CDPRODEMIS,
                      P_DSPRODEMIS,   V_IDCNTRESTOQ,  V_QTSALDSAID,   V_VRUNITITEM,   V_VRDESCITEM,
                      TRUNC(V_VRTOTAITEM,2),   TRUNC(V_VRCONTITEM,2), P_IDCONFORITEM, TRUNC(V_VRCONTITEM,2),
                      V_CDFILIALPED,  V_NRPEDIDO,     V_NRITEMPED,    P_CDCSTINFUSU,  P_CDCFOPINFUSU, P_CDSUFXINFUSU,
                      V_CDFILIMOVI,   V_CDALMOXARIFE, V_CDLOCALESTOQ, V_NRLOTEESTQ,   V_NRSUBLOTE,
                      V_CDFILIALPDV,  V_NRSEQVENDA,   V_NRSEQUITVEND, V_VRDESPERITEM, P_QTVOLUITEM,
                      P_CDSERVFILI, P_CDFILIAPUR, P_CDMARCA, P_CDSERVFATU, V_NRORDEMCMPPED, V_NRITORDEMCMPPED, P_IDORIGEMPROD,
                      P_IDATUESTPROD, V_VRICMSSTITORIG);
               ELSE
                  INSERT INTO ITEMPRODUTO
                     (CDFILIAL,     NRLANCTONF,   NRSEQITPROD,  CDPRODUTO,    CDPRODEMIS,
                      DSPRODEMIS,   IDATUVRESTOQ, QTITEMPROD,   VRUNITITEM,   VRDESCITEM,
                      VRTOTAITEM,   VRCONTITEM,   IDCONFORITEM, VRBRUTITEM,   CDFILIALPED,
                      NRPEDIDO,     NRITEMPED,    CDCSTINFUSU,  CDCFOPINFUSU, CDSUFXINFUSU,
                      CDFILIMOVI,   CDALMOXARIFE, CDLOCALESTOQ, NRLOTEESTQ,   NRSUBLOTE,
                      CDFILIALVEND, NRSEQVENDA,   NRSEQUITVEND, VRDESPERITEM, QTVOLUITEM,
                      CDSERVFILI, CDFILIAPUR, CDMARCA, CDSERVFATU, NRPEDPROD, NRSEQPEDPROD, IDORIGEMPROD,
                      IDATUESTPROD, VRICMSSTITORIG)
                  VALUES
                     (P_CDFILIAL,     P_NRLANCTONF,   V_NRSEQITPROD,  P_CDPRODUTO,    P_CDPRODEMIS,
                      P_DSPRODEMIS,   V_IDCNTRESTOQ,  V_QTSALDSAID,   V_VRUNITITEM,   V_VRDESCITEM,
                      ROUND(V_VRTOTAITEM,2),   ROUND(V_VRCONTITEM,2), P_IDCONFORITEM, ROUND(V_VRCONTITEM,2),
                      V_CDFILIALPED,  V_NRPEDIDO,     V_NRITEMPED,    P_CDCSTINFUSU,  P_CDCFOPINFUSU, P_CDSUFXINFUSU,
                      V_CDFILIMOVI,   V_CDALMOXARIFE, V_CDLOCALESTOQ, V_NRLOTEESTQ,   V_NRSUBLOTE,
                      V_CDFILIALPDV,  V_NRSEQVENDA,   V_NRSEQUITVEND, V_VRDESPERITEM, P_QTVOLUITEM,
                      P_CDSERVFILI, P_CDFILIAPUR, P_CDMARCA, P_CDSERVFATU, V_NRORDEMCMPPED, V_NRITORDEMCMPPED, P_IDORIGEMPROD,
                      P_IDATUESTPROD, V_VRICMSSTITORIG);
               END IF;

               V_QTSALDSAID := 0;
            END IF;
         ELSE
           IF (V_IDSISTEMA = 'PDV') OR (V_IDSISTEMA = 'VND') THEN
              INSERT INTO ITEMPRODUTO
                  (CDFILIAL,     NRLANCTONF,   NRSEQITPROD,  CDPRODUTO,    CDPRODEMIS,
                   DSPRODEMIS,   IDATUVRESTOQ, QTITEMPROD,   VRUNITITEM,   VRDESCITEM,
                   VRTOTAITEM,   VRCONTITEM,   IDCONFORITEM, VRBRUTITEM,   CDFILIALPED,
                   NRPEDIDO,     NRITEMPED,    CDCSTINFUSU,  CDCFOPINFUSU, CDSUFXINFUSU,
                   CDFILIMOVI,   CDALMOXARIFE, CDLOCALESTOQ, NRLOTEESTQ,   NRSUBLOTE,
                   CDFILIALVEND, NRSEQVENDA,   NRSEQUITVEND, VRDESPERITEM, QTVOLUITEM,
                   CDSERVFILI, CDFILIAPUR, CDMARCA, CDSERVFATU, NRPEDPROD, NRSEQPEDPROD, IDORIGEMPROD,
                   IDATUESTPROD, VRICMSSTITORIG)
               VALUES
                  (P_CDFILIAL,     P_NRLANCTONF,   V_NRSEQITPROD,  P_CDPRODUTO,    P_CDPRODEMIS,
                   P_DSPRODEMIS,   V_IDCNTRESTOQ,  V_QTITEMPROD,   V_VRUNITITEM,   P_VRDESCITEM,
                   TRUNC(V_VRTOTAITEM,2), TRUNC(V_VRCONTITEM,2),   P_IDCONFORITEM, TRUNC(V_VRCONTITEM,2),
                   V_CDFILIALPED,  V_NRPEDIDO,     V_NRITEMPED,    P_CDCSTINFUSU,  P_CDCFOPINFUSU, P_CDSUFXINFUSU,
                   V_CDFILIMOVI,   V_CDALMOXARIFE, V_CDLOCALESTOQ, V_NRLOTEESTQ,   V_NRSUBLOTE,
                   V_CDFILIALPDV,  V_NRSEQVENDA,   V_NRSEQUITVEND, V_VRDESPERITEM, P_QTVOLUITEM,
                   P_CDSERVFILI, P_CDFILIAPUR, P_CDMARCA, P_CDSERVFATU, V_NRORDEMCMPPED, V_NRITORDEMCMPPED, P_IDORIGEMPROD,
                   P_IDATUESTPROD, P_VRICMSSTITORIG);
           ELSE
              INSERT INTO ITEMPRODUTO
                  (CDFILIAL,     NRLANCTONF,   NRSEQITPROD,  CDPRODUTO,    CDPRODEMIS,
                   DSPRODEMIS,   IDATUVRESTOQ, QTITEMPROD,   VRUNITITEM,   VRDESCITEM,
                   VRTOTAITEM,   VRCONTITEM,   IDCONFORITEM, VRBRUTITEM,   CDFILIALPED,
                   NRPEDIDO,     NRITEMPED,    CDCSTINFUSU,  CDCFOPINFUSU, CDSUFXINFUSU,
                   CDFILIMOVI,   CDALMOXARIFE, CDLOCALESTOQ, NRLOTEESTQ,   NRSUBLOTE,
                   CDFILIALVEND, NRSEQVENDA,   NRSEQUITVEND, VRDESPERITEM, QTVOLUITEM,
                   CDSERVFILI, CDFILIAPUR, CDMARCA, CDSERVFATU, NRPEDPROD, NRSEQPEDPROD, IDORIGEMPROD,
                   IDATUESTPROD, VRICMSSTITORIG )
               VALUES
                  (P_CDFILIAL,     P_NRLANCTONF,   V_NRSEQITPROD,  P_CDPRODUTO,    P_CDPRODEMIS,
                   P_DSPRODEMIS,   V_IDCNTRESTOQ,  V_QTITEMPROD,   V_VRUNITITEM,   P_VRDESCITEM,
                   ROUND(V_VRTOTAITEM,2), ROUND(V_VRCONTITEM,2),   P_IDCONFORITEM, ROUND(V_VRCONTITEM,2),
                   V_CDFILIALPED,  V_NRPEDIDO,     V_NRITEMPED,    P_CDCSTINFUSU,  P_CDCFOPINFUSU, P_CDSUFXINFUSU,
                   V_CDFILIMOVI,   V_CDALMOXARIFE, V_CDLOCALESTOQ, V_NRLOTEESTQ,   V_NRSUBLOTE,
                   V_CDFILIALPDV,  V_NRSEQVENDA,   V_NRSEQUITVEND, V_VRDESPERITEM, P_QTVOLUITEM,
                   P_CDSERVFILI, P_CDFILIAPUR, P_CDMARCA, P_CDSERVFATU, V_NRORDEMCMPPED, V_NRITORDEMCMPPED, P_IDORIGEMPROD,
                   P_IDATUESTPROD, P_VRICMSSTITORIG );
           END IF;
         END IF;
      ELSE
         V_NRLOTEESTQ := P_NRLOTEESTQ;
         V_NRSUBLOTE  := P_NRSUBLOTE;
         IF V_NRSUBLOTE IS NULL THEN
            V_NRSUBLOTE := ' ';
         END IF;

         INSERT INTO LOTE
            (CDFILIAL, NRLOTEESTQ, NRSUBLOTE, CDPRODUTO, IDSTATLOTE, DTENTRLOTE)
            (SELECT V_CDFILIMOVI,  V_NRLOTEESTQ, V_NRSUBLOTE,
                    V_CDPRODESTO, 'L' , SYSDATE
             FROM PARAMGERAL
             MINUS
             SELECT CDFILIAL,      NRLOTEESTQ,  NRSUBLOTE,
                    V_CDPRODESTO, 'L', SYSDATE
             FROM LOTE
             WHERE  V_CDFILIMOVI  =  CDFILIAL     AND
                    V_NRLOTEESTQ  =  NRLOTEESTQ   AND
                    V_NRSUBLOTE   =  NRSUBLOTE    AND
                    V_CDPRODESTO  =  CDPRODUTO);

         IF (V_CDTPOPERPERDA IS NOT NULL) OR (V_CDTPOPERSOBRA IS NOT NULL) THEN
            IF (V_CDTPOPERPERDA = V_CDTIPOOPER) THEN
               V_NRLOTEESTQORIG := V_NRLOTEESTQ;
               V_NRSUBLOTEORIG  := V_NRSUBLOTE;
               IF (V_IDSISTEMA = 'PED') OR (V_IDSISTEMA = 'EXP') THEN
                  IF V_IDPEDINDUSTRIA = 'S' THEN
                     IF V_IDATUESTTPOP = 'N' THEN 
                        V_NRLOTEESTQ := ' ';
                        V_NRSUBLOTE  := ' ';
                     END IF;   
                  END IF;
               END IF;

            END IF;
            IF (V_CDTPOPERSOBRA = V_CDTIPOOPER) THEN 
               V_NRLOTEESTQORIG := V_NRLOTEESTQ;
               V_NRSUBLOTEORIG  := V_NRSUBLOTE;
            END IF;
         END IF;

         IF (V_IDSISTEMA = 'PDV') OR (V_IDSISTEMA = 'VND') THEN
            INSERT INTO ITEMPRODUTO
               (CDFILIAL,     NRLANCTONF,   NRSEQITPROD,  CDPRODUTO,    CDPRODEMIS,
                DSPRODEMIS,   IDATUVRESTOQ, QTITEMPROD,   VRUNITITEM,   VRDESCITEM,
                VRTOTAITEM,   VRCONTITEM,   IDCONFORITEM, VRBRUTITEM,   CDFILIALPED,
                NRPEDIDO,     NRITEMPED,    CDCSTINFUSU,  CDCFOPINFUSU, CDSUFXINFUSU,
                CDFILIMOVI,   CDALMOXARIFE, CDLOCALESTOQ, NRLOTEESTQ,   NRSUBLOTE,
                CDFILIALVEND, NRSEQVENDA,   NRSEQUITVEND, VRDESPERITEM, QTVOLUITEM,
                CDSERVFILI, CDFILIAPUR, CDMARCA, CDSERVFATU, NRPEDPROD, NRSEQPEDPROD, IDORIGEMPROD,
                IDATUESTPROD, VRICMSSTITORIG, NRLOTEESTQORIG, NRSUBLOTEORIG)
            VALUES
               (P_CDFILIAL,     P_NRLANCTONF,   V_NRSEQITPROD,  P_CDPRODUTO,    P_CDPRODEMIS,
                P_DSPRODEMIS,   V_IDCNTRESTOQ,  P_QTITEMPROD,   V_VRUNITITEM,   P_VRDESCITEM,
                TRUNC(V_VRTOTAITEM,2), TRUNC(V_VRCONTITEM,2),   P_IDCONFORITEM, TRUNC(V_VRCONTITEM,2),
                V_CDFILIALPED,  V_NRPEDIDO,     V_NRITEMPED,    P_CDCSTINFUSU,  P_CDCFOPINFUSU, P_CDSUFXINFUSU,
                V_CDFILIMOVI,   V_CDALMOXARIFE, V_CDLOCALESTOQ, V_NRLOTEESTQ,   V_NRSUBLOTE,
                V_CDFILIALPDV,  V_NRSEQVENDA,   V_NRSEQUITVEND, V_VRDESPERITEM, P_QTVOLUITEM,
                P_CDSERVFILI, P_CDFILIAPUR, P_CDMARCA, P_CDSERVFATU, V_NRORDEMCMPPED, V_NRITORDEMCMPPED, P_IDORIGEMPROD,
                P_IDATUESTPROD, P_VRICMSSTITORIG, V_NRLOTEESTQORIG, V_NRSUBLOTEORIG);
         ELSE
            INSERT INTO ITEMPRODUTO
               (CDFILIAL,     NRLANCTONF,   NRSEQITPROD,  CDPRODUTO,    CDPRODEMIS,
                DSPRODEMIS,   IDATUVRESTOQ, QTITEMPROD,   VRUNITITEM,   VRDESCITEM,
                VRTOTAITEM,   VRCONTITEM,   IDCONFORITEM, VRBRUTITEM,   CDFILIALPED,
                NRPEDIDO,     NRITEMPED,    CDCSTINFUSU,  CDCFOPINFUSU, CDSUFXINFUSU,
                CDFILIMOVI,   CDALMOXARIFE, CDLOCALESTOQ, NRLOTEESTQ,   NRSUBLOTE,
                CDFILIALVEND, NRSEQVENDA,   NRSEQUITVEND, VRDESPERITEM, QTVOLUITEM,
                CDSERVFILI, CDFILIAPUR, CDMARCA, CDSERVFATU, NRPEDPROD, NRSEQPEDPROD, IDORIGEMPROD,
                IDATUESTPROD, VRICMSSTITORIG, NRLOTEESTQORIG, NRSUBLOTEORIG)
            VALUES
               (P_CDFILIAL,     P_NRLANCTONF,   V_NRSEQITPROD,  P_CDPRODUTO,    P_CDPRODEMIS,
                P_DSPRODEMIS,   V_IDCNTRESTOQ,  P_QTITEMPROD,   V_VRUNITITEM,   P_VRDESCITEM,
                ROUND(V_VRTOTAITEM,2), ROUND(V_VRCONTITEM,2),   P_IDCONFORITEM, ROUND(V_VRCONTITEM,2),
                V_CDFILIALPED,  V_NRPEDIDO,     V_NRITEMPED,    P_CDCSTINFUSU,  P_CDCFOPINFUSU, P_CDSUFXINFUSU,
                V_CDFILIMOVI,   V_CDALMOXARIFE, V_CDLOCALESTOQ, V_NRLOTEESTQ,   V_NRSUBLOTE,
                V_CDFILIALPDV,  V_NRSEQVENDA,   V_NRSEQUITVEND, V_VRDESPERITEM, P_QTVOLUITEM,
                P_CDSERVFILI, P_CDFILIAPUR, P_CDMARCA, P_CDSERVFATU, V_NRORDEMCMPPED, V_NRITORDEMCMPPED, P_IDORIGEMPROD,
                P_IDATUESTPROD, P_VRICMSSTITORIG, V_NRLOTEESTQORIG, V_NRSUBLOTEORIG);
         END IF;
      END IF;

   ELSIF ((V_IDCNTRESTOQ = 'S') AND (V_IDENTRSAIDOP = 'E')) THEN

       V_QTITEMPROD := P_QTITEMPROD;

      IF (P_NRLOTEESTQ IS NULL) THEN
         V_NRLOTEESTQ := ' ';
         V_NRSUBLOTE  := ' ';
      ELSE
         V_NRLOTEESTQ := P_NRLOTEESTQ;
         V_NRSUBLOTE  := P_NRSUBLOTE;
         IF V_NRSUBLOTE IS NULL THEN
            V_NRSUBLOTE := ' ';
         END IF;
      END IF;

      IF (V_IDSISTEMA = 'PDV') OR (V_IDSISTEMA = 'VND') THEN
         INSERT INTO ITEMPRODUTO
            (CDFILIAL,     NRLANCTONF,   NRSEQITPROD,  CDPRODUTO,    CDPRODEMIS,
             DSPRODEMIS,   IDATUVRESTOQ, QTITEMPROD,   VRUNITITEM,   VRDESCITEM,
             VRTOTAITEM,   VRCONTITEM,   IDCONFORITEM, VRBRUTITEM,   CDFILIALPED,
             NRPEDIDO,     NRITEMPED,    CDCSTINFUSU,  CDCFOPINFUSU, CDSUFXINFUSU,
             CDFILIMOVI,   CDALMOXARIFE, CDLOCALESTOQ, NRLOTEESTQ,   NRSUBLOTE,
             VRDESPERITEM, QTVOLUITEM, CDSERVFILI, CDFILIAPUR, CDMARCA, CDSERVFATU, NRPEDPROD, NRSEQPEDPROD, IDORIGEMPROD,
             IDATUESTPROD, VRICMSSTITORIG )
         VALUES
            (P_CDFILIAL,     P_NRLANCTONF,   V_NRSEQITPROD,  P_CDPRODUTO,       P_CDPRODEMIS,
             P_DSPRODEMIS,   V_IDCNTRESTOQ,  V_QTITEMPROD,   V_VRUNITITEM,      P_VRDESCITEM,
             TRUNC(V_VRTOTAITEM,2), TRUNC(V_VRCONTITEM,2),   P_IDCONFORITEM,    TRUNC(V_VRCONTITEM,2),
             V_CDFILIALPED,  V_NRPEDIDO,     V_NRITEMPED,    P_CDCSTINFUSU,  P_CDCFOPINFUSU,    P_CDSUFXINFUSU,
             V_CDFILIMOVI,   V_CDALMOXARIFE, V_CDLOCALESTOQ, V_NRLOTEESTQ,      V_NRSUBLOTE,
             V_VRDESPERITEM, P_QTVOLUITEM, P_CDSERVFILI, P_CDFILIAPUR, P_CDMARCA, P_CDSERVFATU, V_NRORDEMCMPPED, V_NRITORDEMCMPPED, P_IDORIGEMPROD,
             P_IDATUESTPROD, P_VRICMSSTITORIG );
      ELSE
         INSERT INTO ITEMPRODUTO
            (CDFILIAL,     NRLANCTONF,   NRSEQITPROD,  CDPRODUTO,    CDPRODEMIS,
             DSPRODEMIS,   IDATUVRESTOQ, QTITEMPROD,   VRUNITITEM,   VRDESCITEM,
             VRTOTAITEM,   VRCONTITEM,   IDCONFORITEM, VRBRUTITEM,   CDFILIALPED,
             NRPEDIDO,     NRITEMPED,    CDCSTINFUSU,  CDCFOPINFUSU, CDSUFXINFUSU,
             CDFILIMOVI,   CDALMOXARIFE, CDLOCALESTOQ, NRLOTEESTQ,   NRSUBLOTE,
             VRDESPERITEM, QTVOLUITEM, CDSERVFILI, CDFILIAPUR, CDMARCA, CDSERVFATU, NRPEDPROD, NRSEQPEDPROD, IDORIGEMPROD,
             IDATUESTPROD, VRICMSSTITORIG )
         VALUES
            (P_CDFILIAL,     P_NRLANCTONF,   V_NRSEQITPROD,  P_CDPRODUTO,       P_CDPRODEMIS,
             P_DSPRODEMIS,   V_IDCNTRESTOQ,  V_QTITEMPROD,   V_VRUNITITEM,      P_VRDESCITEM,
             ROUND(V_VRTOTAITEM,2), ROUND(V_VRCONTITEM,2),   P_IDCONFORITEM,    ROUND(V_VRCONTITEM,2),
             V_CDFILIALPED,  V_NRPEDIDO,     V_NRITEMPED,    P_CDCSTINFUSU,  P_CDCFOPINFUSU,    P_CDSUFXINFUSU,
             V_CDFILIMOVI,   V_CDALMOXARIFE, V_CDLOCALESTOQ, V_NRLOTEESTQ,      V_NRSUBLOTE,
             V_VRDESPERITEM, P_QTVOLUITEM, P_CDSERVFILI, P_CDFILIAPUR, P_CDMARCA, P_CDSERVFATU, V_NRORDEMCMPPED, V_NRITORDEMCMPPED, P_IDORIGEMPROD,
             P_IDATUESTPROD, P_VRICMSSTITORIG );
      END IF;

   ELSE
      IF (V_IDSISTEMA = 'PDV') OR (V_IDSISTEMA = 'VND') THEN
         INSERT INTO ITEMPRODUTO
            (CDFILIAL,     NRLANCTONF,   NRSEQITPROD,  CDPRODUTO,    CDPRODEMIS,
             DSPRODEMIS,   IDATUVRESTOQ, QTITEMPROD,   VRUNITITEM,   VRDESCITEM,
             VRTOTAITEM,   VRCONTITEM,   IDCONFORITEM, VRBRUTITEM,   CDFILIALPED,
             NRPEDIDO,     NRITEMPED,    CDCSTINFUSU,  CDCFOPINFUSU, CDSUFXINFUSU,
             CDFILIALVEND, NRSEQVENDA,   NRSEQUITVEND, VRDESPERITEM, IDTPNFCREDEB,
             QTVOLUITEM, CDSERVFILI, CDFILIAPUR, CDMARCA, CDSERVFATU, NRPEDPROD, NRSEQPEDPROD, IDORIGEMPROD,
             IDATUESTPROD, VRICMSSTITORIG )
         VALUES
            (P_CDFILIAL,     P_NRLANCTONF,   V_NRSEQITPROD,  P_CDPRODUTO,    P_CDPRODEMIS,
             P_DSPRODEMIS,   V_IDCNTRESTOQ,  P_QTITEMPROD,   V_VRUNITITEM,   P_VRDESCITEM,
             TRUNC(V_VRTOTAITEM,2), TRUNC(V_VRCONTITEM,2),   P_IDCONFORITEM, TRUNC(V_VRCONTITEM,2),
             V_CDFILIALPED,  V_NRPEDIDO,     V_NRITEMPED,    P_CDCSTINFUSU,  P_CDCFOPINFUSU, P_CDSUFXINFUSU,
             V_CDFILIALPDV,  V_NRSEQVENDA,   V_NRSEQUITVEND, V_VRDESPERITEM, P_IDTPNFCREDEB,
             P_QTVOLUITEM, P_CDSERVFILI, P_CDFILIAPUR, P_CDMARCA, P_CDSERVFATU, V_NRORDEMCMPPED, V_NRITORDEMCMPPED, P_IDORIGEMPROD,
             P_IDATUESTPROD, P_VRICMSSTITORIG );
      ELSIF (V_IDSISTEMA = 'FAI') THEN
         INSERT INTO ITEMPRODUTO 
            (CDFILIAL,     NRLANCTONF,   NRSEQITPROD,  CDPRODUTO,    CDPRODEMIS, 
             DSPRODEMIS,   IDATUVRESTOQ, QTITEMPROD,   VRUNITITEM,   VRDESCITEM, 
             VRTOTAITEM,   VRCONTITEM,   IDCONFORITEM, VRBRUTITEM,   CDFILIALPED, 
             NRPEDIDO,     NRITEMPED,    CDCSTINFUSU,  CDCFOPINFUSU, CDSUFXINFUSU, 
             CDFILIALVEND, NRSEQVENDA,   NRSEQUITVEND, VRDESPERITEM, IDTPNFCREDEB, 
             QTVOLUITEM, CDSERVFILI, CDFILIAPUR, CDMARCA, CDSERVFATU, NRPEDPROD, NRSEQPEDPROD, IDORIGEMPROD, 
             IDATUESTPROD, VRICMSSTITORIG, DSJUSTIFICATIVA ) 
         VALUES 
            (P_CDFILIAL,     P_NRLANCTONF,   V_NRSEQITPROD,  P_CDPRODUTO,    P_CDPRODEMIS, 
             P_DSPRODEMIS,   V_IDCNTRESTOQ,  P_QTITEMPROD,   V_VRUNITITEM,   P_VRDESCITEM, 
             ROUND(V_VRTOTAITEM,2), ROUND(V_VRCONTITEM,2),   P_IDCONFORITEM, ROUND(V_VRCONTITEM,2), 
             V_CDFILIALPED,  P_NRINTEGRACAO,     P_NRITEMINTEGR,    P_CDCSTINFUSU,  P_CDCFOPINFUSU, P_CDSUFXINFUSU, 
             V_CDFILIALPDV,  V_NRSEQVENDA,   V_NRSEQUITVEND, V_VRDESPERITEM, P_IDTPNFCREDEB, 
             P_QTVOLUITEM, P_CDSERVFILI, P_CDFILIAPUR, P_CDMARCA, P_CDSERVFATU, P_NRINTEGRACAO, P_NRITEMINTEGR, P_IDORIGEMPROD, 
             P_IDATUESTPROD, P_VRICMSSTITORIG, P_DSJUSTIFICATIVA ); 
      ELSIF (V_IDSISTEMA = 'SEP') THEN
         INSERT INTO ITEMPRODUTO
            (CDFILIAL,     NRLANCTONF,   NRSEQITPROD,  CDPRODUTO,    CDPRODEMIS,
             DSPRODEMIS,   IDATUVRESTOQ, QTITEMPROD,   VRUNITITEM,   VRDESCITEM,
             VRTOTAITEM,   VRCONTITEM,   IDCONFORITEM, VRBRUTITEM,   CDFILIALPED,
             NRPEDIDO,     NRITEMPED,    CDCSTINFUSU,  CDCFOPINFUSU, CDSUFXINFUSU,
             CDFILIMOVI,   CDALMOXARIFE, CDLOCALESTOQ, NRLOTEESTQ,   NRSUBLOTE,
             VRDESPERITEM, QTVOLUITEM, CDSERVFILI, CDFILIAPUR, CDMARCA, CDSERVFATU, NRPEDPROD, NRSEQPEDPROD, IDORIGEMPROD,
             IDATUESTPROD, VRICMSSTITORIG, QTEXPEDIR )
         VALUES
            (P_CDFILIAL,     P_NRLANCTONF,   V_NRSEQITPROD,  P_CDPRODUTO,       P_CDPRODEMIS,
             P_DSPRODEMIS,   V_IDCNTRESTOQ,  P_QTITEMPROD,   V_VRUNITITEM,      P_VRDESCITEM,
             ROUND(V_VRTOTAITEM,2), ROUND(V_VRCONTITEM,2),   P_IDCONFORITEM,    ROUND(V_VRCONTITEM,2),
             V_CDFILIALPED,  V_NRPEDIDO,     V_NRITEMPED,    P_CDCSTINFUSU,  P_CDCFOPINFUSU,    P_CDSUFXINFUSU,
             V_CDFILIMOVI,   V_CDALMOXARIFE, V_CDLOCALESTOQ, V_NRLOTEESTQ,      V_NRSUBLOTE,
             V_VRDESPERITEM, P_QTVOLUITEM, P_CDSERVFILI, P_CDFILIAPUR, P_CDMARCA, P_CDSERVFATU, V_NRORDEMCMPPED, V_NRITORDEMCMPPED, P_IDORIGEMPROD,
             P_IDATUESTPROD, P_VRICMSSTITORIG, P_QTITEMPROD );
      ELSE
         INSERT INTO ITEMPRODUTO
            (CDFILIAL,     NRLANCTONF,   NRSEQITPROD,  CDPRODUTO,    CDPRODEMIS,
             DSPRODEMIS,   IDATUVRESTOQ, QTITEMPROD,   VRUNITITEM,   VRDESCITEM,
             VRTOTAITEM,   VRCONTITEM,   IDCONFORITEM, VRBRUTITEM,   CDFILIALPED,
             NRPEDIDO,     NRITEMPED,    CDCSTINFUSU,  CDCFOPINFUSU, CDSUFXINFUSU,
             CDFILIALVEND, NRSEQVENDA,   NRSEQUITVEND, VRDESPERITEM, IDTPNFCREDEB,
             QTVOLUITEM, CDSERVFILI, CDFILIAPUR, CDMARCA, CDSERVFATU, NRPEDPROD, NRSEQPEDPROD, IDORIGEMPROD,
             IDATUESTPROD, VRICMSSTITORIG )
         VALUES
            (P_CDFILIAL,     P_NRLANCTONF,   V_NRSEQITPROD,  P_CDPRODUTO,    P_CDPRODEMIS,
             P_DSPRODEMIS,   V_IDCNTRESTOQ,  P_QTITEMPROD,   V_VRUNITITEM,   P_VRDESCITEM,
             ROUND(V_VRTOTAITEM,2), ROUND(V_VRCONTITEM,2),   P_IDCONFORITEM, ROUND(V_VRCONTITEM,2),
             V_CDFILIALPED,  V_NRPEDIDO,     V_NRITEMPED,    P_CDCSTINFUSU,  P_CDCFOPINFUSU, P_CDSUFXINFUSU,
             V_CDFILIALPDV,  V_NRSEQVENDA,   V_NRSEQUITVEND, V_VRDESPERITEM, P_IDTPNFCREDEB,
             P_QTVOLUITEM, P_CDSERVFILI, P_CDFILIAPUR, P_CDMARCA, P_CDSERVFATU, V_NRORDEMCMPPED, V_NRITORDEMCMPPED, P_IDORIGEMPROD,
             P_IDATUESTPROD, P_VRICMSSTITORIG );
      END IF;
   END IF;
   
   V_NOTAFORNECEDOR := NULL;
   V_LOTEFORNECEDOR := NULL;
   V_TEXTOADICEMIS := NULL;
   BEGIN
      SELECT NVL(IDINFLOTFOREMI, 'N')
        INTO V_IDINFLOTFOREMI
        FROM PARAMFILIAL
       WHERE CDFILIAL = V_CDFILIMOVI;
   EXCEPTION
      WHEN NO_DATA_FOUND THEN
         V_IDINFLOTFOREMI := 'N';
   END;
   IF V_IDINFLOTFOREMI = 'S' THEN
      FOR I IN ARRAY_NRSEQITPROD.FIRST .. ARRAY_NRSEQITPROD.LAST LOOP
         IF (V_CDTPOPERPERDA = V_CDTIPOOPER) THEN
            BEGIN
               SELECT NVL(NRLOTEESTQORIG, ' '),
                      NVL(NRSUBLOTEORIG, ' ')
                 INTO V_NRLOTEDADOFOR,
                      V_NRSUBLOTEDADOFOR
                 FROM ITEMPRODUTO
                WHERE CDFILIAL = P_CDFILIAL
                  AND NRLANCTONF = P_NRLANCTONF
                  AND NRSEQITPROD = ARRAY_NRSEQITPROD(I);
            EXCEPTION
               WHEN NO_DATA_FOUND THEN
                  V_NRLOTEDADOFOR := NULL;
                  V_NRSUBLOTEDADOFOR := NULL;
            END;
         ELSE
            BEGIN
               SELECT NVL(NRLOTEESTQ, ' '),
                      NVL(NRSUBLOTE, ' ')
                 INTO V_NRLOTEDADOFOR,
                      V_NRSUBLOTEDADOFOR
                 FROM ITEMPRODUTO
                WHERE CDFILIAL = P_CDFILIAL
                  AND NRLANCTONF = P_NRLANCTONF
                  AND NRSEQITPROD = ARRAY_NRSEQITPROD(I);
            EXCEPTION
               WHEN NO_DATA_FOUND THEN
                  V_NRLOTEDADOFOR := NULL;
                  V_NRSUBLOTEDADOFOR := NULL;
            END;
         END IF;
         IF (V_NRLOTEDADOFOR IS NOT NULL) OR (V_NRSUBLOTEDADOFOR IS NOT NULL) THEN
            IF (V_CDTPOPERSOBRA IS NOT NULL) OR (V_CDTPOPERPERDA IS NOT NULL) THEN
               BEGIN
                  SELECT MIN(NRNOTAFISC)
                    INTO V_NOTAFORNECEDOR
                    FROM ITEMPRODUTO I, NOTAFISCAL N
                   WHERE CDFILIMOVI = V_CDFILIMOVI
                     AND NVL(NRLOTEESTQORIG, NRLOTEESTQ) = V_NRLOTEDADOFOR
                     AND NVL(NRSUBLOTEORIG, NRSUBLOTE) = V_NRSUBLOTEDADOFOR
                     AND CDPRODUTO = P_CDPRODUTO
                     AND N.CDFILIAL = I.CDFILIAL
                     AND N.NRLANCTONF = I.NRLANCTONF
                     AND N.IDENTRSAIDOP = 'E'
                     AND N.CDFORNECED IS NOT NULL;
               EXCEPTION
                  WHEN NO_DATA_FOUND THEN
                     V_NOTAFORNECEDOR := NULL;
               END;
            END IF;
            BEGIN
               SELECT NRLOTEFORN
                 INTO V_LOTEFORNECEDOR
                 FROM LOTE
                WHERE CDFILIAL = V_CDFILIMOVI
                  AND NRLOTEESTQ = V_NRLOTEDADOFOR
                  AND NRSUBLOTE = V_NRSUBLOTEDADOFOR
                  AND CDPRODUTO = P_CDPRODUTO;
            EXCEPTION
               WHEN NO_DATA_FOUND THEN
                  V_LOTEFORNECEDOR := NULL;
            END;
   
            IF V_LOTEFORNECEDOR IS NOT NULL THEN
               V_TEXTOADICEMIS := 'LT: ' || V_LOTEFORNECEDOR;
               IF V_NOTAFORNECEDOR IS NOT NULL THEN
                  V_TEXTOADICEMIS := V_TEXTOADICEMIS || ' - NF: ' || V_NOTAFORNECEDOR;
               END IF;
            ELSE
               IF V_NOTAFORNECEDOR IS NOT NULL THEN
                  V_TEXTOADICEMIS := 'NF: ' || V_NOTAFORNECEDOR;
               END IF;
            END IF;
   
            IF V_TEXTOADICEMIS IS NOT NULL THEN
               UPDATE ITEMPRODUTO
                  SET DSPRODEMIS = DSPRODEMIS || ' - ' || V_TEXTOADICEMIS
                WHERE CDFILIAL = P_CDFILIAL
                  AND NRLANCTONF = P_NRLANCTONF
                  AND NRSEQITPROD = ARRAY_NRSEQITPROD(I);
            END IF;
         END IF;
      END LOOP;
   END IF;
END;