create or replace 
PROCEDURE IMPORTA_PRODUCTO
IS
   V_PRODUTO     VARCHAR2(20);
   V_SGUNPROD    INTEGER;
   V_FATOCONV    FLOAT;
   V_MASCARA     VARCHAR2(20);
   V_ULTNIVEL    INTEGER;
   V_POSULTNV    INTEGER;
   V_NIVEL       VARCHAR2(1);
   V_MENSERRO    VARCHAR2(300);
   V_PRODOK      VARCHAR2(1);
   V_MARCA       VARCHAR2(5);
   V_STRREGEXP   VARCHAR2(20);
   V_POSNVPRDCMP INTEGER;
   V_NVPRODCMP   VARCHAR2(20);
   V_POSNVPRDEST INTEGER;
   V_NVPRODEST   VARCHAR2(20);
   V_PRODSAP     VARCHAR2(20);
   BOPRODEXISTE  BOOLEAN;
   V_CNTPRODMAR  INTEGER;
   
   V_INTPRODMARCA INTEGER;
   V_INTPRODUTO   INTEGER;
   BOPRODUTO      BOOLEAN;
   V_MARCPRODEXIS VARCHAR2(5);
   V_CDARVPROD    VARCHAR2(20);
   
   
   FUNCTION INSERE_PRODUTO(P_IDPRODESTOQ IN VARCHAR2, P_PRODSAP IN VARCHAR2, P_NVPRODEST IN VARCHAR2,
                           P_NVPRODCMP IN VARCHAR2, P_NMPRODUTO IN VARCHAR2, P_SGUNIDADE IN VARCHAR2,
                           P_ULTNIVEL IN INTEGER, P_FATOCONV IN FLOAT, P_VRFATOCORR IN FLOAT,
                           P_NIVEL IN VARCHAR2, P_IDINTERFACE IN FLOAT, P_TPINTERFACE IN VARCHAR2,
                           P_MASCARA IN VARCHAR2) RETURN VARCHAR2
   IS
      V_PRODESTTAM    INTEGER;
      V_NVNOVO        VARCHAR2(20);
      V_INCLUINV      INTEGER;
      V_NIVELZERO     VARCHAR2(10);
      V_CDPRODUTO     VARCHAR2(20);
      V_TAMPROD       INTEGER;
      V_PRODNOVO      VARCHAR2(20);
      V_NIVELPRODEST  VARCHAR2(1);
      V_TAMARVPRODEST INTEGER;
      V_PRODESTNOVO   VARCHAR2(20);
      V_AJUSTE        VARCHAR2(20);
      V_PRODUTOESTOQ  VARCHAR2(20);
      V_CDPRODESTO    VARCHAR2(20);
      ARVNIVEL        INTEGER;
      V_MASCARA       VARCHAR2(20);
      V_PRODSAP       VARCHAR2(20);
   BEGIN
      V_PRODESTTAM := LENGTH(P_PRODSAP);
      V_CDPRODESTO := ' ';
      V_MASCARA    := REGEXP_REPLACE(P_MASCARA, '\W');
      
      IF (LENGTH(V_MASCARA) <> LENGTH(P_PRODSAP)) THEN
         V_PRODSAP := P_PRODSAP;
         IF (P_IDPRODESTOQ = 'S') THEN
            V_TAMARVPRODEST := LENGTH(REGEXP_REPLACE(P_NVPRODEST, '\W'));
            ARVNIVEL := 1;
         ELSE
            V_TAMARVPRODEST := LENGTH(REGEXP_REPLACE(P_NVPRODCMP, '\W'));
            ARVNIVEL := 0;
         END IF;
      ELSE
         ARVNIVEL := 0;
         IF (P_IDPRODESTOQ = 'N') THEN
            V_PRODSAP := SUBSTR(P_PRODSAP, 1, LENGTH(P_NVPRODCMP));
            V_TAMARVPRODEST := LENGTH(REGEXP_REPLACE(P_NVPRODCMP, '\W'));
         ELSE
            V_PRODSAP := SUBSTR(P_PRODSAP, 1, LENGTH(P_NVPRODCMP));
            V_TAMARVPRODEST := LENGTH(REGEXP_REPLACE(P_NVPRODCMP, '\W'));
         END IF;
      END IF;

      IF (V_PRODESTTAM <> V_TAMARVPRODEST) THEN
         BEGIN
            SELECT MAX(P.CDARVPROD), P.CDNVPRODUTO, MIN(CDARVPROD)
              INTO V_PRODESTNOVO, V_NIVELPRODEST, V_PRODUTOESTOQ
              FROM PRODUTO P
             WHERE P.CDNVPRODUTO = (SELECT MIN(PR.CDNVPRODUTO)
                                      FROM PRODUTO PR
                                     WHERE REGEXP_LIKE(PR.CDARVPROD, '^'||V_PRODSAP||'\w'))
               AND REGEXP_LIKE(P.CDARVPROD, '^'||V_PRODSAP||'\w')
             GROUP BY P.CDNVPRODUTO;
            
            SELECT LENGTH(CDARVPROD)
              INTO V_TAMPROD
              FROM PRODUTO
             WHERE CDNVPRODUTO = (V_NIVELPRODEST-ARVNIVEL)
               AND ROWNUM = 1;

            IF P_IDPRODESTOQ = 'S' THEN
               V_AJUSTE := SUBSTR(V_PRODESTNOVO, V_TAMPROD+1, (LENGTH(V_PRODESTNOVO)-V_TAMPROD))+1;
               V_NVNOVO := LPAD(V_AJUSTE, (LENGTH(V_PRODESTNOVO)-V_TAMPROD), '0');
               V_PRODESTNOVO := SUBSTR(V_PRODESTNOVO,1, LENGTH(V_PRODESTNOVO)-LENGTH(V_NVNOVO));
            ELSE
               V_AJUSTE := SUBSTR(V_PRODESTNOVO, (V_TAMARVPRODEST-P_ULTNIVEL))+1;
               V_NVNOVO := LPAD(V_AJUSTE, (P_ULTNIVEL-V_TAMARVPRODEST),'0');
               V_PRODESTNOVO :=SUBSTR(V_PRODESTNOVO,1,(LENGTH(V_PRODESTNOVO)-(P_ULTNIVEL-V_TAMARVPRODEST)));

               SELECT CDPRODUTO
                 INTO V_CDPRODESTO
                 FROM PRODUTO
                WHERE CDARVPROD = V_PRODUTOESTOQ;
            END IF;
            
            V_PRODNOVO := V_PRODESTNOVO||V_NVNOVO;
         EXCEPTION
            WHEN OTHERS THEN
               V_PRODESTNOVO  := NULL;
               
               INSERT INTO USR_SAP_LOG(IDINTERFACE, IDSEQLOG, IDPROCESSO, DTLOG, STATUS, OBSSTATUS)
               VALUES(P_IDINTERFACE, P_TPINTERFACE, 4, SYSDATE, 1, 'Nivel inexistente en el arbol de productos');
               
               COMMIT;
               RETURN '';
         END;
         
         IF (V_PRODESTNOVO IS NOT NULL) THEN
            WHILE V_NIVELPRODEST <= P_NIVEL LOOP
               NOVO_CODIGO('PRODUTO', V_CDPRODUTO);
               V_CDPRODUTO := SUBSTR(V_CDPRODUTO, -10);
               
               IF ((V_NIVELPRODEST = P_NIVEL) AND (TRIM(V_CDPRODESTO) IS NULL)) THEN
                  V_CDPRODESTO := V_CDPRODUTO;
               END IF;
               
               BEGIN
                  INSERT INTO PRODUTO(CDPRODUTO, CDNVPRODUTO, CDARVPROD, NMPRODUTO,
                                      SGUNIDADE, VRFATOCONV,
                                      VRPEFATOCORR, CDPRODESTO)
                  VALUES(V_CDPRODUTO, V_NIVELPRODEST, V_PRODNOVO, P_NMPRODUTO,
                         DECODE(V_NIVELPRODEST, P_NIVEL, P_SGUNIDADE),  DECODE(V_NIVELPRODEST, P_NIVEL, P_FATOCONV),
                         DECODE(V_NIVELPRODEST, P_NIVEL, P_VRFATOCORR), DECODE(V_NIVELPRODEST, P_NIVEL, V_CDPRODESTO));
                  COMMIT;
                  
                  V_PRODNOVO := V_PRODNOVO||LPAD('0', (P_ULTNIVEL-LENGTH(V_PRODNOVO)), '0');
                  V_NIVELPRODEST := V_NIVELPRODEST+1;
               EXCEPTION
                  WHEN OTHERS THEN
                     V_MENSERRO := SQLERRM(SQLCODE);
                     
                     INSERT INTO USR_SAP_LOG(IDINTERFACE, IDSEQLOG, IDPROCESSO, DTLOG, STATUS, OBSSTATUS)
                     VALUES(P_IDINTERFACE, P_TPINTERFACE, 4, SYSDATE, 1, 'Error al ingresar el producto. Error: '||V_MENSERRO);
                     
                     COMMIT;
                     
                     RETURN '';
                     EXIT;
               END;
            END LOOP;
            
            RETURN V_CDPRODUTO;
         END IF;
      ELSE
         INSERT INTO USR_SAP_LOG(IDINTERFACE, IDSEQLOG, IDPROCESSO, DTLOG, STATUS, OBSSTATUS)
         VALUES(P_IDINTERFACE, P_TPINTERFACE, 4, SYSDATE, 1, 'Tama'||CHR(241)||'o del c'||CHR(243)||'digo inv'||CHR(225)||'lido');
         
         RETURN '';
      END IF;
   END;

BEGIN
   SELECT CDPICTPROD
     INTO V_MASCARA
     FROM PARAMGERAL
    WHERE CDPARGERAL = '0001';
   
   V_ULTNIVEL := LENGTH(REGEXP_REPLACE(V_MASCARA, '\W'));
   V_POSULTNV := LENGTH(SUBSTR(V_MASCARA, INSTR(V_MASCARA,'.', -1)-LENGTH(V_MASCARA)));
   
   V_STRREGEXP := '[^[:punct:]]*$';
   V_POSNVPRDCMP := REGEXP_INSTR(V_MASCARA, V_STRREGEXP)-2;
   V_NVPRODCMP := REGEXP_REPLACE(SUBSTR(V_MASCARA, 1, V_POSNVPRDCMP), '\W');
   V_POSNVPRDEST := REGEXP_INSTR(V_NVPRODCMP, V_STRREGEXP)-2;
   V_NVPRODEST := REGEXP_REPLACE(SUBSTR(V_MASCARA, 1, V_POSNVPRDEST), '\W');
   
   SELECT MAX(CDNVPRODUTO) CDNVPRODUTO
     INTO V_NIVEL
     FROM PRODUTO;
   
   FOR C_PRODUTOS IN
       (SELECT U.CDPRODUTO, U.CDPRODSAP, U.NMPRODUTO, U.SGUNIDADE,
               U.IDPRODESTOQ, U.VRFATOCORR, U.VRFATOCONV, U.CDMARCA,
               U.IDINTERFACE, U.TPINTERFACE, U.UOMSAPALT
          FROM USR_SAP_PRODUTO U
         WHERE U.DTINTERFACEDEST IS NULL
         ORDER BY U.DTINTERFACEORI)
   LOOP
      BOPRODUTO := FALSE;
      V_PRODOK  := 'N';
      
      BEGIN
         SELECT CDMARCA
           INTO V_MARCA
           FROM MARCA
          WHERE CDMARCA = C_PRODUTOS.CDMARCA;
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
            V_MARCA   := NULL;
            
            INSERT INTO USR_SAP_LOG(IDINTERFACE, IDSEQLOG, IDPROCESSO, DTLOG, STATUS, OBSSTATUS)
            VALUES(C_PRODUTOS.IDINTERFACE, C_PRODUTOS.TPINTERFACE, 4, SYSDATE, 1, 'C'||CHR(243)||'digo de la marca '||C_PRODUTOS.CDMARCA||' no registrado');
      END;
      
      IF (V_MARCA IS NOT NULL) THEN
         IF (C_PRODUTOS.VRFATOCONV = 0) THEN
            V_FATOCONV := 1;
         ELSE
            V_FATOCONV := C_PRODUTOS.VRFATOCONV;
         END IF;
         
         V_PRODSAP := REGEXP_REPLACE(C_PRODUTOS.CDPRODUTO, '\W');
         
         /* COUNT PARA VERIFICAR QUANTOS PRODUTOS COM CODIGO SAP EXISTEM */
         SELECT COUNT(1)
           INTO V_INTPRODMARCA
           FROM MARCPROD M, PRODUTO P
          WHERE M.CDPRODUTO    = P.CDPRODUTO
            AND M.CDPRODSAP    = C_PRODUTOS.CDPRODSAP
            AND P.SGUNIDADE    = C_PRODUTOS.SGUNIDADE
            AND M.CDMARCA      = V_MARCA
            AND P.IDPRODATIVPR = 'S'
            AND P.VRFATOCONV   = V_FATOCONV
            AND P.CDPRODUTO   <> P.CDPRODESTO;
         
         IF V_INTPRODMARCA = 0 THEN
            SELECT COUNT(1)
              INTO V_INTPRODMARCA
              FROM PRODUTO
             WHERE REGEXP_LIKE(CDARVPROD, '^'||SUBSTR(V_PRODSAP, 1, V_ULTNIVEL-V_POSULTNV)||'\w')
               AND VRFATOCONV   = V_FATOCONV
               AND SGUNIDADE    = C_PRODUTOS.SGUNIDADE
               AND IDPRODATIVPR = 'S'
               AND CDPRODUTO   <> CDPRODESTO;
         
            IF V_INTPRODMARCA > 1 THEN
               BOPRODUTO := TRUE;
            END IF;
            
            /* -- TRATAMENTO PARA CODIGO SAP VINCULADO A MARCA DIFERENTE
            BEGIN
               SELECT CDMARCA
                 INTO V_MARCPRODEXIS
                 FROM MARCPROD M
                WHERE CDPRODSAP  = C_PRODUTOS.CDPRODSAP
                  AND M.CDMARCA <> V_MARCA;
            EXCEPTION
               WHEN NO_DATA_FOUND THEN
                  V_MARCPRODEXIS := NULL;
               
               WHEN TOO_MANY_ROWS THEN
                  V_INTPRODMARCA := -1;
                  
                  INSERT INTO USR_SAP_LOG(IDINTERFACE, IDSEQLOG, IDPROCESSO, DTLOG, STATUS, OBSSTATUS)
                  VALUES(C_PRODUTOS.IDINTERFACE, C_PRODUTOS.TPINTERFACE, 4, SYSDATE, 1, 'C'||CHR(243)||'digo SAP registrado a m'||CHR(225)||'s de una marca.');
            END;
            
            IF (V_MARCPRODEXIS IS NOT NULL) THEN
               V_INTPRODMARCA := -1;
               INSERT INTO USR_SAP_LOG(IDINTERFACE, IDSEQLOG, IDPROCESSO, DTLOG, STATUS, OBSSTATUS)
               VALUES(C_PRODUTOS.IDINTERFACE, C_PRODUTOS.TPINTERFACE, 4, SYSDATE, 1, 'C'||CHR(243)||'digo SAP ya registrado para la marca '||V_MARCA);
            END IF;
            */
            
            /* SE HOUVERAM PRODUTOS COM A MESMA ESPECIFICACAO, SERAO ATUALIZADOS TODOS ESTES PRODUTOS COM O CODIGO SAP  */
         END IF;
         
         IF V_INTPRODMARCA <= 1 THEN
            BEGIN
               SELECT M.CDPRODUTO
                 INTO V_PRODUTO
                 FROM MARCPROD M, PRODUTO P
                WHERE M.CDPRODUTO    = P.CDPRODUTO
                  AND M.CDPRODSAP    = C_PRODUTOS.CDPRODSAP
                  AND P.SGUNIDADE    = C_PRODUTOS.SGUNIDADE
                  AND M.CDMARCA      = V_MARCA
                  AND P.IDPRODATIVPR = 'S'
                  AND P.VRFATOCONV   = V_FATOCONV
                  AND P.CDPRODUTO   <> P.CDPRODESTO;
                  
                  BOPRODEXISTE := TRUE;
            EXCEPTION
               WHEN OTHERS THEN
                  V_PRODUTO := NULL;
               /*WHEN NO_DATA_FOUND THEN
                  V_PRODUTO := NULL;
               
               WHEN TOO_MANY_ROWS THEN
                  V_PRODUTO := 'ERRO';
                  
                  INSERT INTO USR_SAP_LOG(IDINTERFACE, IDSEQLOG, IDPROCESSO, DTLOG, STATUS, OBSSTATUS)
                  VALUES(C_PRODUTOS.IDINTERFACE, C_PRODUTOS.TPINTERFACE, 4, SYSDATE, 1, 'M'||CHR(225)||'s de un producto encontrado con las mismas especificaciones: '||C_PRODUTOS.CDPRODSAP);
               */
            END;
            
            IF (V_PRODUTO) IS NULL THEN
               BEGIN
                  SELECT CDPRODUTO
                    INTO V_PRODUTO
                    FROM PRODUTO
                   WHERE REGEXP_LIKE(CDARVPROD, '^'||SUBSTR(V_PRODSAP, 1, V_ULTNIVEL-V_POSULTNV)||'\w')
                     AND VRFATOCONV   = V_FATOCONV
                     AND SGUNIDADE    = C_PRODUTOS.SGUNIDADE
                     AND IDPRODATIVPR = 'S'
                     AND CDPRODUTO   <> CDPRODESTO;
                    
                     BOPRODEXISTE := FALSE;
               EXCEPTION
                  WHEN OTHERS THEN
                     V_PRODUTO := NULL;
                  /*WHEN NO_DATA_FOUND THEN
                     V_PRODUTO := NULL;
                     
                  WHEN TOO_MANY_ROWS THEN
                     V_PRODUTO := 'ERRO';
                     INSERT INTO USR_SAP_LOG(IDINTERFACE, IDSEQLOG, IDPROCESSO, DTLOG, STATUS, OBSSTATUS)
                     VALUES(C_PRODUTOS.IDINTERFACE, C_PRODUTOS.TPINTERFACE, 4, SYSDATE, 1, 'M'||CHR(225)||'s de un producto encontrado con las mismas especificaciones');
                  */
               END;
            END IF;
            
            BEGIN
               IF (V_PRODUTO IS NULL) THEN
                  SELECT COUNT(1) SGUNIDADE
                    INTO V_SGUNPROD
                    FROM UNIDMEDIDA UN
                   WHERE SGUNIDADE = C_PRODUTOS.SGUNIDADE;
                  
                  IF (V_SGUNPROD > 0) THEN
                     V_PRODUTO := INSERE_PRODUTO(C_PRODUTOS.IDPRODESTOQ, V_PRODSAP, V_NVPRODEST,
                                                 V_NVPRODCMP, C_PRODUTOS.NMPRODUTO, C_PRODUTOS.SGUNIDADE,
                                                 V_ULTNIVEL, V_FATOCONV, C_PRODUTOS.VRFATOCORR,
                                                 V_NIVEL, C_PRODUTOS.IDINTERFACE, C_PRODUTOS.TPINTERFACE,
                                                 V_MASCARA);
                     
                     IF (TRIM(V_PRODUTO) IS NOT NULL) THEN
                        INSERT INTO MARCPROD(CDPRODUTO, CDMARCA, CDPRODSAP, UOMSAPALT)
                        VALUES(V_PRODUTO, V_MARCA, C_PRODUTOS.CDPRODSAP, C_PRODUTOS.UOMSAPALT);
                        
                        SELECT CDARVPROD
                          INTO V_CDARVPROD
                          FROM PRODUTO
                         WHERE CDPRODUTO = V_PRODUTO;
                        
                        INSERT INTO USR_SAP_LOG(IDINTERFACE, IDSEQLOG, IDPROCESSO, DTLOG, STATUS, OBSSTATUS)
                        VALUES(C_PRODUTOS.IDINTERFACE, C_PRODUTOS.TPINTERFACE, 4, SYSDATE, 0, 'Producto '||C_PRODUTOS.CDPRODUTO||' registrado con c'||CHR(243)||'digo '||V_CDARVPROD||' en el '||CHR(225)||'rbol de productos con '||CHR(233)||'xito.');
                        
                        V_PRODOK := 'S';
                     END IF;
                  ELSE
                     INSERT INTO USR_SAP_LOG(IDINTERFACE, IDSEQLOG, IDPROCESSO, DTLOG, STATUS, OBSSTATUS)
                     VALUES(C_PRODUTOS.IDINTERFACE, C_PRODUTOS.TPINTERFACE, 4, SYSDATE, 1, 'Unidad de medida '||C_PRODUTOS.SGUNIDADE||' inexistente');
                  END IF;
               ELSE
                  UPDATE PRODUTO
                     SET VRPEFATOCORR = NVL(TRIM(C_PRODUTOS.VRFATOCORR), 0)
                   WHERE CDPRODUTO = V_PRODUTO;
                  
                  IF NOT(BOPRODEXISTE) THEN
                     SELECT COUNT(1)
                       INTO V_CNTPRODMAR
                       FROM MARCPROD
                      WHERE CDPRODUTO = V_PRODUTO
                        AND CDMARCA   = V_MARCA;
                    
                     IF V_CNTPRODMAR = 0 THEN
                        INSERT INTO MARCPROD(CDPRODUTO, CDMARCA, CDPRODSAP, UOMSAPALT)
                        VALUES(V_PRODUTO, V_MARCA, C_PRODUTOS.CDPRODSAP, C_PRODUTOS.UOMSAPALT);
                     ELSE 
                        UPDATE MARCPROD
                           SET UOMSAPALT = C_PRODUTOS.UOMSAPALT,
                               CDPRODSAP = C_PRODUTOS.CDPRODSAP
                         WHERE CDPRODUTO = V_PRODUTO
                           AND CDMARCA   = V_MARCA;
                     END IF;
                  ELSE
                     UPDATE MARCPROD
                        SET UOMSAPALT = C_PRODUTOS.UOMSAPALT
                      WHERE CDPRODUTO = V_PRODUTO
                        AND CDMARCA   = V_MARCA
                        AND CDPRODSAP = C_PRODUTOS.CDPRODSAP;
                  END IF;
                  
                  
                  INSERT INTO USR_SAP_LOG(IDINTERFACE, IDSEQLOG, IDPROCESSO, DTLOG, STATUS, OBSSTATUS)
                  VALUES(C_PRODUTOS.IDINTERFACE, C_PRODUTOS.TPINTERFACE, 4, SYSDATE, 0, 'Producto atualizado con '||CHR(233)||'xito');
                  V_PRODOK := 'S';
               END IF;
            EXCEPTION
               WHEN OTHERS THEN
                  V_PRODOK := 'N';
                  V_MENSERRO := SQLERRM(SQLCODE);
                  INSERT INTO USR_SAP_LOG(IDINTERFACE, IDSEQLOG, IDPROCESSO, DTLOG, STATUS, OBSSTATUS)
                  VALUES(C_PRODUTOS.IDINTERFACE, C_PRODUTOS.TPINTERFACE, 4, SYSDATE, 1, 'Error en la importaci'||CHR(243)||'n de productos. Error: '||V_MENSERRO);
                  
                  COMMIT;
            END;
         ELSIF V_INTPRODMARCA > 1 THEN
            IF (BOPRODUTO) THEN
               FOR C_VARIOSPROD IN
                  (SELECT CDPRODUTO
                     FROM PRODUTO
                    WHERE REGEXP_LIKE(CDARVPROD, '^'||SUBSTR(V_PRODSAP, 1, V_ULTNIVEL-V_POSULTNV)||'\w')
                      AND VRFATOCONV   = V_FATOCONV
                      AND SGUNIDADE    = C_PRODUTOS.SGUNIDADE
                      AND IDPRODATIVPR = 'S'
                      AND CDPRODUTO   <> CDPRODESTO)
               LOOP
                  UPDATE PRODUTO
                     SET VRPEFATOCORR = NVL(TRIM(C_PRODUTOS.VRFATOCORR), 0)
                   WHERE CDPRODUTO = C_VARIOSPROD.CDPRODUTO;
                  
                  SELECT COUNT(1)
                    INTO V_CNTPRODMAR
                    FROM MARCPROD
                   WHERE CDPRODUTO = C_VARIOSPROD.CDPRODUTO
                     AND CDMARCA   = V_MARCA;
                 
                  IF V_CNTPRODMAR = 0 THEN
                     INSERT INTO MARCPROD(CDPRODUTO, CDMARCA, CDPRODSAP, UOMSAPALT)
                     VALUES(C_VARIOSPROD.CDPRODUTO, V_MARCA, C_PRODUTOS.CDPRODSAP, C_PRODUTOS.UOMSAPALT);
                  ELSE 
                     UPDATE MARCPROD
                        SET CDPRODSAP = C_PRODUTOS.CDPRODSAP,
                            UOMSAPALT = C_PRODUTOS.UOMSAPALT
                      WHERE CDPRODUTO = C_VARIOSPROD.CDPRODUTO
                        AND CDMARCA   = V_MARCA;
                  END IF;
               END LOOP;
            ELSE
               FOR C_VARIOSPROD IN
                  (SELECT M.CDPRODUTO
                     FROM MARCPROD M, PRODUTO P
                    WHERE M.CDPRODUTO    = P.CDPRODUTO
                      AND M.CDPRODSAP    = C_PRODUTOS.CDPRODSAP
                      AND P.SGUNIDADE    = C_PRODUTOS.SGUNIDADE
                      AND M.CDMARCA      = V_MARCA
                      AND P.IDPRODATIVPR = 'S'
                      AND P.VRFATOCONV   = V_FATOCONV
                      AND P.CDPRODUTO   <> P.CDPRODESTO)
               LOOP
                  UPDATE PRODUTO
                     SET VRPEFATOCORR = NVL(TRIM(C_PRODUTOS.VRFATOCORR), 0)
                   WHERE CDPRODUTO = C_VARIOSPROD.CDPRODUTO;
                  
                  UPDATE MARCPROD
                     SET UOMSAPALT = C_PRODUTOS.UOMSAPALT
                   WHERE CDPRODUTO = C_VARIOSPROD.CDPRODUTO
                     AND CDMARCA   = V_MARCA
                     AND CDPRODSAP = C_PRODUTOS.CDPRODSAP;
               END LOOP;
            END IF;
            
            INSERT INTO USR_SAP_LOG(IDINTERFACE, IDSEQLOG, IDPROCESSO, DTLOG, STATUS, OBSSTATUS)
            VALUES(C_PRODUTOS.IDINTERFACE, C_PRODUTOS.TPINTERFACE, 4, SYSDATE, 0, 'Producto atualizado con '||CHR(233)||'xito');
            
            V_PRODOK := 'S';
         END IF;
      END IF;
      
      IF (V_PRODOK = 'S') THEN
         UPDATE USR_SAP_PRODUTO 
            SET DTINTERFACEDEST = SYSDATE, 
                STATUS = 0
          WHERE IDINTERFACE = C_PRODUTOS.IDINTERFACE;
      ELSE
         UPDATE USR_SAP_PRODUTO 
            SET STATUS = 2
          WHERE IDINTERFACE = C_PRODUTOS.IDINTERFACE;
      END IF;
   END LOOP;
   COMMIT;
   
   FOR C_UPDPROD IN (SELECT P.CDARVPROD
                       FROM MARCPROD M, PRODUTO P
                      WHERE M.CDPRODSAP IN (SELECT CDPRODSAP
                                              FROM USR_SAP_PRODUTO
                                             WHERE TO_DATE(DTINTERFACEDEST) = TO_DATE(SYSDATE))
                        AND M.CDPRODUTO = P.CDPRODUTO)
                              
   LOOP
      INSERE_AGRUPA(C_UPDPROD.CDARVPROD, 'N');
   END LOOP;
   
   EXPORTA_MARCA_PRODUCTO;
END;
/

-- VERSAO --
BEGIN ATUVEROBJ('IMPORTA_PRODUCTO','6.05.xxx'); END;
/