CREATE OR REPLACE PROCEDURE REMANEJAR_AF
                     (P_CDCENTCMP           IN FILIAL.CDFILCENTCMP%TYPE,             /*Central de Compras*/
                      P_NRSEQAPURAF         IN AUTOFORNE.NRSEQAPURAF%TYPE,           /*Numero da apuracao de compras*/
                      P_CDFILDEST           IN AUTOFORNE.CDFILDEST%TYPE,             /*Filial de destino origem*/
                      P_CDFILLANC           IN AUTOFORNE.CDFILLANC%TYPE,             /*Filial de lançamento origem*/
                      P_NRAUTOFORN          IN AUTOFORNE.NRAUTOFORN%TYPE,            /*Numero da AF origem*/
                      P_DTPROGENTAF         IN ITEMAUTF.DTPROGENTAF%TYPE,            /*Data de entrega da AF origem*/
                      P_NRAUTOFORN_DEST     IN AUTOFORNE.NRAUTOFORN%TYPE,            /*Numero da AF destino*/
                      P_DTPROGENTAF_DEST    IN ITEMAUTF.DTPROGENTAF%TYPE,            /*Data de entrega da AF destino*/
                      P_DTENTRITMSOL_DEST   IN ITEMAUTF.DTENTRITMSOL%TYPE,           /*Data de enterega do item de SC da AF destino*/
                      P_PARTI               IN PARTFILI.CDTIPPART%TYPE DEFAULT 'N',  /*Considera particularidade da filial destino da AF*/
                      P_CDMARCA             IN ITEMAUTF.CDMARCA%TYPE DEFAULT NULL,   /*Marca do item da AF origem*/
                      P_CDPRODUTO           IN ITEMAUTF.CDPRODUTO%TYPE DEFAULT NULL, /*Codigo do produto do item de AF origem*/
                      P_CDMARCA_DEST        IN ITEMAUTF.CDMARCA%TYPE DEFAULT NULL,   /*Marca do item da AF destino*/
                      P_CDPRODUTO_DEST      IN ITEMAUTF.CDPRODUTO%TYPE DEFAULT NULL, /*Codigo do produto do item de AF destino*/
                      P_RESULT_ERROS        OUT VARCHAR2)
IS
   V_CDFORNECED_DEST     FORNECEDOR.CDFORNECED%TYPE;
   V_IDGERAFDTENT        FORNECEDOR.IDGERAFDTENT%TYPE;
   V_CONTADOR_ERROS      NUMERIC := 0;
   V_QFOPRODFORN         NUMERIC;
   V_PRODFORNCOMP        NUMERIC;
   V_VRPRECUNIAP         FLOAT;
   V_CDMARCITMAP         VARCHAR2(5);
   V_ERROS               VARCHAR2(3);
   V_CDFILDEST_DEST      ITEMAUTF.CDFILDEST%TYPE;
   V_CDFILLANC_DEST      ITEMAUTF.CDFILLANC%TYPE;
   V_NRAUTOFORN_DEST     ITEMAUTF.NRAUTOFORN%TYPE;
   V_CDPRODUTO_DEST      ITEMAUTF.CDPRODUTO%TYPE;
   V_CDMARCA_DEST        ITEMAUTF.CDMARCA%TYPE;
   V_DTPROGENTAF_DEST    ITEMAUTF.DTPROGENTAF%TYPE;
   V_QTPROGENTAF_DEST    ITEMAUTF.QTPROGENTAF%TYPE;
   V_IDOPERAMOVAF        MOVOPAF.IDOPERAMOVAF%TYPE;
   V_CDFILDEST_ORIG      ITEMAUTF.CDFILDEST%TYPE;
   V_CDFILLANC_ORIG      ITEMAUTF.CDFILLANC%TYPE;
   V_NRAUTOFORN_ORIG     ITEMAUTF.NRAUTOFORN%TYPE;
   V_DSRDMUSLITAF        VARCHAR2(50);
   V_DSENDUSLITAF        VARCHAR2(50);
   V_DSNMUSULITAF        VARCHAR2(50);
   V_DSMETUSLITAF        VARCHAR2(250);
   V_CDOPELOGITAF        VARCHAR2(12);
   V_IDFUNCAOFILI        VARCHAR2(1);
   V_CDPRODUTO_ORIG      ITEMAUTF.CDPRODUTO%TYPE;
   V_QTPROGENTAF_ORIG    ITEMAUTF.QTPROGENTAF%TYPE;
   V_VRFATOCONV_ORIG     PRODUTO.VRFATOCONV%TYPE;
   V_CDMARCA_ORIG        ITEMAUTF.CDMARCA%TYPE;
   V_VRARREDCMP_ORIG     PRODUTO.VRARREDCMP%TYPE;
   V_CDPRODESTO_ORIG     PRODUTO.CDPRODESTO%TYPE;
   V_CONTADOR_1          NUMERIC;
   V_ITEMSOLIRELACAF     VARCHAR2(1);
   V_IDAUTOFORNEX        AUTOFORNE.IDAUTOFORNEX%TYPE;
   V_QTANTOPER           FLOAT;
   V_QTDEPOPER           FLOAT;
   V_DSJUSTOPERMOV       MOVOPAF.DSJUSTOPERMOV%TYPE;
   V_DSALTERAF           MOVOPAF.DSALTERAF%TYPE;
   V_CDFILSOLI_RELAC     ITEMSOLI.CDFILSOLI%TYPE;
   V_CDFILLAN_RELAC      ITEMSOLI.CDFILLAN%TYPE;
   V_NRSOLICMP_RELAC     ITEMSOLI.NRSOLICMP%TYPE;
   V_CDPRODUTO_RELAC     ITEMSOLI.CDPRODUTO%TYPE;
   V_DTPROGENTR_RELAC    ITEMSOLI.DTPROGENTR%TYPE;
   V_CDFILDEST_RELAC     ITEMAUTF.CDFILDEST%TYPE;
   V_CDFILLANC_RELAC     ITEMAUTF.CDFILLANC%TYPE;
   V_NRAUTOFORN_RELAC    ITEMAUTF.NRAUTOFORN%TYPE;
   V_CDMARCAAF_RELAC     ITEMAUTF.CDMARCA%TYPE;
   V_CDPRODUTOAF_RELAC   ITEMAUTF.CDPRODUTO%TYPE;
   V_DTPROGENTAF_RELAC   ITEMAUTF.DTPROGENTAF%TYPE;
   V_DSJUSTOPER          MOVOPSOL.DSJUSTOPER%TYPE;
   V_NMOPERADOR          OPERADOR.NMOPERADOR%TYPE;
   V_APAGOU_AF           NUMERIC;
   V_QTSOLIPROD          FLOAT;
   V_MENSAGEM            VARCHAR2(32000);
BEGIN
   SELECT NVL(MAX(CDFORNECED), 'W')
     INTO V_CDFORNECED_DEST
     FROM AUTOFORNE
    WHERE AUTOFORNE.CDFILDEST   = P_CDFILDEST
      AND AUTOFORNE.CDFILLANC   = P_CDFILLANC
      AND AUTOFORNE.NRAUTOFORN  = P_NRAUTOFORN_DEST;
   V_DTPROGENTAF_DEST := P_DTPROGENTAF_DEST;
   /*A procedure retornara os erros genericos para todos os produtos*/
   V_MENSAGEM := NULL;
   SELECT NVL(MAX(IDFUNCAOFILI), 'F')
     INTO V_IDFUNCAOFILI
     FROM FILIAL
    WHERE CDFILIAL = P_CDFILDEST;
   WEBTUNNING(V_DSENDUSLITAF, V_DSNMUSULITAF, V_DSRDMUSLITAF, V_DSMETUSLITAF, V_CDOPELOGITAF);
   NMUSUARIO(V_NMOPERADOR);
   SELECT NVL(MAX(CDOPERADOR), 'W')
     INTO V_CDOPELOGITAF
     FROM OPERADOR
    WHERE UPPER(NMOPERADOR) = UPPER(V_NMOPERADOR);
   IF V_CDOPELOGITAF = 'W' THEN
      SELECT MAX(CDOPERADOR)
        INTO V_CDOPELOGITAF
        FROM APURPRECO
       WHERE CDFILCENTCMP = P_CDCENTCMP
         AND NRAPURPREC   = P_NRSEQAPURAF;
   END IF;
   FOR C_AF_ORIGIGEM IN (SELECT ITEMAUTF.CDFILDEST, ITEMAUTF.CDFILLANC, ITEMAUTF.NRAUTOFORN, ITEMAUTF.CDMARCA,
                                ITEMAUTF.CDPRODUTO, ITEMAUTF.DTPROGENTAF, ITEMAUTF.QTPROGENTAF,
                                (ITEMAUTF.QTPROGENTAF*PRODUTO.VRFATOCONV) QTPROGENTAF_EST, ITEMAUTF.DTENTRITMSOL,
                                AUTOFORNE.CDFORNECED, PRODUTO.CDPRODESTO, ITEMAUTF.CDSEGMARCA, ITEMAUTF.NRPARCITMAF,
                                ITEMAUTF.VRPERDESAF, ITEMAUTF.VRDESCITMAF, ITEMAUTF.TXOBSITMAF, ITEMAUTF.IDTPLANITEAF,
                                NVL(AUTOFORNE.IDAUTOFORNEX, 'N') IDAUTOFORNEX, VRPREUNIAF
                           FROM ITEMAUTF, AUTOFORNE, PRODUTO
                          WHERE ITEMAUTF.CDFILDEST   = P_CDFILDEST
                            AND ITEMAUTF.CDFILLANC   = P_CDFILLANC
                            AND ITEMAUTF.NRAUTOFORN  = P_NRAUTOFORN
                            AND ITEMAUTF.DTPROGENTAF = P_DTPROGENTAF
                            AND ITEMAUTF.CDMARCA     = NVL(P_CDMARCA, ITEMAUTF.CDMARCA)
                            AND ITEMAUTF.CDPRODUTO   = NVL(P_CDPRODUTO, ITEMAUTF.CDPRODUTO)
                            AND ITEMAUTF.CDFILDEST   = AUTOFORNE.CDFILDEST
                            AND ITEMAUTF.CDFILLANC   = AUTOFORNE.CDFILLANC
                            AND ITEMAUTF.NRAUTOFORN  = AUTOFORNE.NRAUTOFORN
                            AND ITEMAUTF.CDPRODUTO   = PRODUTO.CDPRODUTO) LOOP
      V_ERROS := 'NNN';
      IF C_AF_ORIGIGEM.IDAUTOFORNEX  = 'N' THEN
         V_IDAUTOFORNEX := 'X';
      END IF;
      IF V_IDFUNCAOFILI <> 'O' THEN
         V_CDPRODUTO_ORIG       := NVL(P_CDPRODUTO_DEST, C_AF_ORIGIGEM.CDPRODUTO);
         V_CDMARCA_ORIG         := NVL(P_CDMARCA_DEST, C_AF_ORIGIGEM.CDMARCA);
         V_CDPRODESTO_ORIG      := C_AF_ORIGIGEM.CDPRODESTO;
         SELECT NVL(MAX(PRODUTO.VRFATOCONV), 0), NVL(MAX(PRODUTO.VRARREDCMP), 0)
           INTO V_VRFATOCONV_ORIG, V_VRARREDCMP_ORIG
           FROM PRODUTO
          WHERE PRODUTO.CDPRODUTO = V_CDPRODUTO_ORIG;
         IF V_VRFATOCONV_ORIG = 0 THEN
            V_VRFATOCONV_ORIG := 1;
         END IF;
         IF V_VRARREDCMP_ORIG = 0 THEN
            V_VRARREDCMP_ORIG := 1;
         END IF;
      ELSE
         BEGIN
            SELECT RELACPRODOL.CDPRARVORIG, RELACPRODOL.CDMARCA,
                   NVL(PRODUTOOL.VRFATOCONV, 0), PRODUTO.CDPRODESTO, NVL(PRODUTOOL.VRARREDCMP, 0)
              INTO V_CDPRODUTO_ORIG, V_CDMARCA_ORIG,
                   V_VRFATOCONV_ORIG, V_CDPRODESTO_ORIG, V_VRARREDCMP_ORIG
              FROM RELACPRODOL, PRODUTO, PRODUTO PRODUTOOL
             WHERE RELACPRODOL.CDPRODARVOL = NVL(P_CDPRODUTO_DEST, C_AF_ORIGIGEM.CDPRODUTO)
               AND RELACPRODOL.CDPRARVORIG = PRODUTO.CDPRODUTO
               AND RELACPRODOL.CDPRODARVOL = PRODUTOOL.CDPRODUTO;
            IF V_VRFATOCONV_ORIG = 0 THEN
               V_VRFATOCONV_ORIG := 1;
            END IF;
            IF V_VRARREDCMP_ORIG = 0 THEN
               V_VRARREDCMP_ORIG := 1;
            END IF;
         EXCEPTION
            WHEN NO_DATA_FOUND THEN BEGIN
              V_CDPRODUTO_ORIG   := NULL;
              V_CDMARCA_ORIG     := NULL;
              V_CDPRODESTO_ORIG  := NULL;
              V_CDPRODUTO_ORIG   := NULL;
              V_VRARREDCMP_ORIG  := NULL;
            END;
         END;
      END IF;
      /*IF V_CONTADOR = 1 THEN
         IF V_CDFORNECED_DEST <> C_AF_ORIGIGEM.CDFORNECED THEN
               SELECT MAX(NVL(C_AF_ORIGIGEM.CDFORNECED, FORNECEDOR.CDFORNECED)), MAX(NVL(FORNECEDOR.IDGERAFDTENT, 'S'))
                 INTO V_CDFORNECED_DEST, V_IDGERAFDTENT
                 FROM AUTOFORNE, FORNECEDOR
                WHERE AUTOFORNE.CDFILDEST   = P_CDFILDEST
                  AND AUTOFORNE.CDFILLANC   = P_CDFILLANC
                  AND AUTOFORNE.NRAUTOFORN  = P_NRAUTOFORN_DEST
                  AND AUTOFORNE.CDFORNECED  = FORNECEDOR.CDFORNECED;
            CARREGA_PERIFORN(P_CDFILDEST_DEST, V_CDFORNECED_DEST, P_DTPROGENTAF, V_DTPROGENTAF_DEST);
         END IF;
      END IF;*/
      V_VRPRECUNIAP := C_AF_ORIGIGEM.VRPREUNIAF;
      V_CDMARCITMAP := C_AF_ORIGIGEM.CDMARCA;
      IF V_CDFORNECED_DEST <> C_AF_ORIGIGEM.CDFORNECED THEN
         SELECT COUNT(FILIAL.CDFILIAL)
           INTO V_QFOPRODFORN
           FROM FILIAL
          WHERE FILIAL.CDFILIAL = P_CDFILDEST
            AND NOT EXISTS (SELECT QFOPRODFORN.CDPRODUTO
                             FROM QFOPRODFORN, PARASUPRI
                            WHERE PARASUPRI.CDFILIAL      = FILIAL.CDFILCENTCMP
                              AND (INSTR(V_CDPRODUTO_ORIG||'_'||C_AF_ORIGIGEM.CDPRODUTO, QFOPRODFORN.CDPRODUTO) > 0)
                              AND (QFOPRODFORN.CDFORNECED   = V_CDFORNECED_DEST)
                              AND ((QFOPRODFORN.IDFORNAPROV = 'N'
                              AND QFOPRODFORN.IDFORNAUTOR   = 'N') OR ((QFOPRODFORN.IDFORNAPROV  = 'S')
                              AND ((PARASUPRI.IDULTIDTVALQ  = 'M'
                              AND V_DTPROGENTAF_DEST             > LAST_DAY(QFOPRODFORN.DTVALPRFORN)) OR (PARASUPRI.IDULTIDTVALQ    = 'D'
                              AND V_DTPROGENTAF_DEST            > QFOPRODFORN.DTVALPRFORN)) ) )
                              );
         /*Produto desqualificado para o fornecedor destino da af "SNN"*/
         IF V_QFOPRODFORN = 0 THEN
            V_CONTADOR_ERROS    := V_CONTADOR_ERROS + 1;
            V_ERROS := 'SNN';
         END IF;
         IF P_PARTI = 'N' THEN
            BEGIN
               SELECT VRPRECUNIAP, CDMARCITMAP
                 INTO V_VRPRECUNIAP, V_CDMARCITMAP
                 FROM (SELECT ITEMCOLE.VRPRECUNIITM AS VRPRECUNIAP,
                              ITEMCOLE.CDMARCA      AS CDMARCITMAP
                         FROM ITEMCOLE
                        INNER JOIN FILIAL
                           ON ITEMCOLE.CDREGIAO = FILIAL.CDREGIAO
                        INNER JOIN PRODUTO
                           ON ITEMCOLE.CDPRODUTO = PRODUTO.CDPRODUTO
                        INNER JOIN PARASUPRI
                           ON ITEMCOLE.CDFILIAL = PARASUPRI.CDFILIAL
                         LEFT JOIN PRODPREFMED
                           ON ITEMCOLE.CDFILIAL     = PRODPREFMED.CDFILIAL
                          AND PRODUTO.CDPRODESTO    = PRODPREFMED.CDPRODUTO
                          AND PRODUTO.CDPRODUTO     = PRODPREFMED.CDPRODPREF
                        WHERE FILIAL.CDFILIAL       = P_CDFILDEST
                          AND ITEMCOLE.CDFILIAL     = P_CDCENTCMP
                          AND ITEMCOLE.CDFORNECED   = V_CDFORNECED_DEST
                          AND ITEMCOLE.CDPRODUTO    = V_CDPRODUTO_ORIG
                          AND ITEMCOLE.CDMARCA      = V_CDMARCA_ORIG
                          /*AND ITEMCOLE.IDITMLISPREC = CASE SUBSTR(:P_IDMOTIVPRESC,5,1)
                                                         WHEN '1'
                                                         THEN 'S'
                                                         ELSE ITEMCOLE.IDITMLISPREC
                                                      END*/
                          AND (V_DTPROGENTAF_DEST BETWEEN DTINIVALITM AND DTFINVALITM)
                          AND ITEMCOLE.VRPRECUNIITM > 0
                        ORDER BY /* Estabelecendo prioridades - O primeiro registro retornado será o escolhido */
                         CASE PRODPREFMED.CDPRODPREF
                           WHEN NULL
                           THEN -1
                           ELSE -10
                         END, CASE PARASUPRI.IDTIPOAPUR
                                 WHEN NULL
                                 THEN ITEMCOLE.VRPRECUNIITM
                                 WHEN '1'
                                 THEN ITEMCOLE.VRPRECECOITM
                                 ELSE ITEMCOLE.VRPRECOITMPI
                              END / PRODUTO.VRFATOCONV)
                WHERE ROWNUM = 1;
            EXCEPTION
               WHEN NO_DATA_FOUND THEN BEGIN
                 V_VRPRECUNIAP := 0;
                 V_CDMARCITMAP := NULL;
               END;
            END;
         ELSE
            BEGIN
               SELECT VRPRECUNIAP, CDMARCITMAP
                 INTO V_VRPRECUNIAP, V_CDMARCITMAP
                 FROM (SELECT VRPRECUNIAP, CDMARCITMAP
                         FROM (SELECT ITEMCOLE.VRPRECUNIITM AS VRPRECUNIAP, ITEMCOLE.CDMARCA AS CDMARCITMAP,
                                      ITEMCOLE.CDFILIAL, PRODUTO.CDPRODUTO, PRODUTO.CDPRODESTO, PRODUTO.VRFATOCONV,
                                      ITEMCOLE.CDFORNECED, ITEMCOLE.VRPRECUNIITM, ITEMCOLE.VRPRECECOITM,
                                      ITEMCOLE.VRPRECOITMPI, ITEMCOLE.IDITMLISPREC
                                 FROM ITEMCOLE
                                INNER JOIN FILIAL
                                   ON ITEMCOLE.CDREGIAO = FILIAL.CDREGIAO
                                INNER JOIN PRODUTO
                                   ON ITEMCOLE.CDPRODUTO    = PRODUTO.CDPRODUTO
                                WHERE FILIAL.CDFILIAL       = P_CDFILDEST
                                  AND ITEMCOLE.CDFILIAL     = P_CDCENTCMP
                                  AND ITEMCOLE.CDFORNECED   = V_CDFORNECED_DEST
                                  AND ITEMCOLE.CDPRODUTO    = V_CDPRODUTO_ORIG
                                  AND ITEMCOLE.CDMARCA      = V_CDMARCA_ORIG
                                  /*AND ITEMCOLE.IDITMLISPREC = CASE SUBSTR(:P_IDMOTIVPRESC,5,1)
                                                                 WHEN '1'
                                                                 THEN 'S'
                                                                 ELSE ITEMCOLE.IDITMLISPREC
                                                              END */
                                  AND (V_DTPROGENTAF_DEST BETWEEN DTINIVALITM AND DTFINVALITM)
                                  AND ITEMCOLE.VRPRECUNIITM > 0) PRODFILCOT
                         INNER JOIN PARASUPRI
                            ON PRODFILCOT.CDFILIAL = PARASUPRI.CDFILIAL
                          LEFT JOIN PRODPREFMED
                            ON PRODFILCOT.CDFILIAL    = PRODPREFMED.CDFILIAL
                           AND PRODFILCOT.CDPRODESTO  = PRODPREFMED.CDPRODUTO
                           AND PRODFILCOT.CDPRODUTO   = PRODPREFMED.CDPRODPREF
                          LEFT JOIN PARTFILI PPM
                            ON PRODFILCOT.CDFILIAL     = PPM.CDFILIAL
                           AND PRODFILCOT.CDPRODUTO    = PPM.CDPRODUTO
                           AND PRODFILCOT.CDMARCITMAP  = PPM.CDMARCA
                          LEFT JOIN PARTFILI PPF
                            ON PRODFILCOT.CDFILIAL     = PPF.CDFILIAL
                           AND PRODFILCOT.CDPRODUTO    = PPF.CDPRODUTO
                           AND PRODFILCOT.CDFORNECED   = PPF.CDFORNECED
                          LEFT JOIN PARTFILI PPMF
                            ON PRODFILCOT.CDFILIAL     = PPMF.CDFILIAL
                           AND PRODFILCOT.CDPRODUTO    = PPMF.CDPRODUTO
                           AND PRODFILCOT.CDMARCITMAP  = PPMF.CDMARCA
                           AND PRODFILCOT.CDFORNECED   = PPMF.CDFORNECED
                         ORDER BY /* Estabelecendo prioridades - O primeiro registro retornado será o escolhido */
                                  CASE PRODPREFMED.CDPRODPREF
                                     WHEN NULL
                                     THEN -1
                                     ELSE -10
                                  END,
                                  CASE PPMF.CDTIPPART
                                     WHEN '7'
                                     THEN -9
                                     WHEN '8'
                                     THEN -8
                                     WHEN '9'
                                     THEN 1
                                     ELSE 0
                                  END,
                                  CASE PPF.CDTIPPART
                                     WHEN '4'
                                     THEN -9
                                     WHEN '5'
                                     THEN -8
                                     WHEN '6'
                                     THEN 1
                                     ELSE 0
                                  END,
                                  CASE PPM.CDTIPPART
                                     WHEN '1'
                                     THEN -9
                                     WHEN '2'
                                     THEN -8
                                     WHEN '3'
                                     THEN 1
                                     ELSE 0
                                  END,
                                  CASE PPF.CDTIPPART
                                     WHEN '4'
                                     THEN
                                        CASE PARASUPRI.IDTIPOAPUR
                                           WHEN NULL
                                           THEN PRODFILCOT.VRPRECUNIITM
                                           WHEN '1'
                                           THEN PRODFILCOT.VRPRECECOITM
                                           ELSE PRODFILCOT.VRPRECOITMPI
                                        END / PRODFILCOT.VRFATOCONV
                                     ELSE
                                        CASE PRODFILCOT.IDITMLISPREC
                                           WHEN 'S'
                                           THEN -6
                                           ELSE -5
                                        END
                                  END,
                                  CASE PARASUPRI.IDTIPOAPUR
                                     WHEN NULL
                                     THEN PRODFILCOT.VRPRECUNIITM
                                     WHEN '1'
                                     THEN PRODFILCOT.VRPRECECOITM
                                     ELSE PRODFILCOT.VRPRECOITMPI
                                  END / PRODFILCOT.VRFATOCONV
                                )
                              WHERE ROWNUM = 1;
            EXCEPTION
               WHEN NO_DATA_FOUND THEN BEGIN
                 V_VRPRECUNIAP := 0;
                 V_CDMARCITMAP := NULL;
               END;
            END;
         END IF;
         /*Produto sem cotacao para o fornecedor destino da af "NSN"*/
         IF V_VRPRECUNIAP = 0 THEN
            V_CONTADOR_ERROS    := V_CONTADOR_ERROS + 1;
            V_ERROS := SUBSTR(V_ERROS, 1, 1)||'S'||SUBSTR(V_ERROS, 3, 1);
         END IF;
         SELECT COUNT(CDPRODUTO)
           INTO V_PRODFORNCOMP
           FROM PRODFORNCOMP
          WHERE CDFORNECED  = V_CDFORNECED_DEST
            AND (INSTR(V_CDPRODUTO_ORIG||'_'||C_AF_ORIGIGEM.CDPRODUTO, CDPRODCOMPL) > 0);
         IF V_PRODFORNCOMP = 0 THEN
            /*Produto nao cadastrado para o fornecedor destino da af "NNS"*/
            V_CONTADOR_ERROS    := V_CONTADOR_ERROS + 1;
            V_ERROS := SUBSTR(V_ERROS, 1, 2)||'S';
         END IF;
         IF V_ERROS <> 'NNN' THEN
            V_MENSAGEM := SUBSTR(V_MENSAGEM||'_'||C_AF_ORIGIGEM.CDPRODUTO||V_ERROS, 1, 32000);
         END IF;
      END IF;
      IF V_CONTADOR_ERROS = 0 THEN
         BEGIN
            SELECT ITEMAUTF.CDFILDEST, ITEMAUTF.CDFILLANC, ITEMAUTF.NRAUTOFORN, ITEMAUTF.CDPRODUTO,
                   ITEMAUTF.CDMARCA, ITEMAUTF.DTPROGENTAF, ITEMAUTF.QTPROGENTAF
              INTO V_CDFILDEST_DEST, V_CDFILLANC_DEST, V_NRAUTOFORN_DEST, V_CDPRODUTO_DEST,
                   V_CDMARCA_DEST, V_DTPROGENTAF_DEST, V_QTPROGENTAF_DEST
              FROM ITEMAUTF, PRODUTO
             WHERE ITEMAUTF.CDFILDEST   = P_CDFILDEST
               AND ITEMAUTF.CDFILLANC   = P_CDFILLANC
               AND ITEMAUTF.NRAUTOFORN  = P_NRAUTOFORN_DEST
               AND ITEMAUTF.CDPRODUTO   = NVL(P_CDPRODUTO_DEST, C_AF_ORIGIGEM.CDPRODUTO)
               AND ITEMAUTF.CDMARCA     = NVL(P_CDMARCA_DEST, C_AF_ORIGIGEM.CDMARCA)
               AND ITEMAUTF.DTPROGENTAF = P_DTPROGENTAF_DEST
               AND ITEMAUTF.CDPRODUTO   = PRODUTO.CDPRODUTO;
         EXCEPTION
           WHEN NO_DATA_FOUND THEN BEGIN
             V_CDFILDEST_DEST     := NULL;
             V_CDFILLANC_DEST     := NULL;
             V_NRAUTOFORN_DEST    := NULL;
             V_CDPRODUTO_DEST     := NULL;
             V_CDMARCA_DEST       := NULL;
             V_DTPROGENTAF_DEST   := P_DTPROGENTAF_DEST;
             V_QTPROGENTAF_DEST   := 0;
           END;
         END;
         IF P_CDPRODUTO_DEST IS NULL THEN
            V_QTPROGENTAF_ORIG := C_AF_ORIGIGEM.QTPROGENTAF;
         ELSE
            V_QTPROGENTAF_ORIG := C_AF_ORIGIGEM.QTPROGENTAF_EST/V_VRFATOCONV_ORIG;
            IF V_VRARREDCMP_ORIG > 1 THEN
               IF MOD(V_QTPROGENTAF_ORIG, V_VRARREDCMP_ORIG) <> 0 THEN
                  V_QTPROGENTAF_ORIG := CEIL((V_QTPROGENTAF_ORIG/V_VRARREDCMP_ORIG)*V_VRARREDCMP_ORIG);
               END IF;
            ELSE
               V_QTPROGENTAF_ORIG := CEIL(C_AF_ORIGIGEM.QTPROGENTAF_EST/V_VRFATOCONV_ORIG);
            END IF;
         END IF;
         IF LENGTH(V_CDFILDEST_DEST) > 0 THEN
            V_IDOPERAMOVAF  := 'A';
            V_DSJUSTOPERMOV := 'Análise de AF-Alter.da Qt./Remanej.';
            V_DSALTERAF     := 'Análise de AF-Alteracao da qtde: de '||TO_CHAR(V_QTPROGENTAF_DEST, '9999999999999D99MI')||' para '||
                               TO_CHAR(V_QTPROGENTAF_ORIG+V_QTPROGENTAF_DEST, '9999999999999D99MI');
            UPDATE ITEMAUTF
               SET QTPROGENTAF = QTPROGENTAF + V_QTPROGENTAF_ORIG
             WHERE ITEMAUTF.CDFILDEST   = P_CDFILDEST
               AND ITEMAUTF.CDFILLANC   = P_CDFILLANC
               AND ITEMAUTF.NRAUTOFORN  = P_NRAUTOFORN_DEST
               AND ITEMAUTF.CDPRODUTO   = V_CDPRODUTO_DEST
               AND ITEMAUTF.CDMARCA     = V_CDMARCA_DEST
               AND ITEMAUTF.DTPROGENTAF = P_DTPROGENTAF_DEST;
         ELSE
            V_IDOPERAMOVAF  := 'I';
            V_DSJUSTOPERMOV := 'Análise de AF-Incl. do Item/Remanej.';
            V_DSALTERAF     := 'Análise de AF-Inclusao do Item.';
            INSERT
              INTO ITEMAUTF
                   (CDFILDEST, CDFILLANC, NRAUTOFORN, CDMARCA, CDPRODUTO,
                    DTPROGENTAF, DTENTRITMSOL, QTPROGENTAF, CDSEGMARCA,
                    NRPARCITMAF, VRPREUNIAF, VRPERDESAF, VRDESCITMAF,
                    TXOBSITMAF, IDTPLANITEAF)
            VALUES (P_CDFILDEST, P_CDFILLANC, P_NRAUTOFORN_DEST, NVL(P_CDMARCA_DEST, C_AF_ORIGIGEM.CDMARCA), NVL(P_CDPRODUTO_DEST, C_AF_ORIGIGEM.CDPRODUTO),
                    P_DTPROGENTAF_DEST, P_DTENTRITMSOL_DEST, V_QTPROGENTAF_ORIG, C_AF_ORIGIGEM.CDSEGMARCA,
                    C_AF_ORIGIGEM.NRPARCITMAF, V_VRPRECUNIAP, C_AF_ORIGIGEM.VRPERDESAF, C_AF_ORIGIGEM.VRDESCITMAF,
                    C_AF_ORIGIGEM.TXOBSITMAF, C_AF_ORIGIGEM.IDTPLANITEAF);
         END IF;
         /*Log de inclusao/atualizacao de item de af destino*/
         INSERT
           INTO MOVOPAF (CDFILDESMOV, CDFILLANMOV, NRAUTOMOV, CDPRODMOV,
                         CDMARCMOV, DTPROGENTMOV, DTOPERAF, CDOPERADOR,
                         DSALTERAF, DSJUSTOPERMOV, IDOPERAMOVAF, DSRDMUSUMOVAF,
                         DSENDUSUMOVAF, DSNMUSUMOVAF, DSMETUSUMOVAF, IDUTATUALIZASOL)
         VALUES (P_CDFILDEST, P_CDFILLANC, P_NRAUTOFORN_DEST, NVL(P_CDPRODUTO_DEST, C_AF_ORIGIGEM.CDPRODUTO),
                 NVL(P_CDMARCA_DEST, C_AF_ORIGIGEM.CDMARCA), P_DTPROGENTAF_DEST, SYSDATE, V_CDOPELOGITAF,
                 V_DSALTERAF, V_DSJUSTOPERMOV, V_IDOPERAMOVAF, V_DSRDMUSLITAF,
                 V_DSENDUSLITAF, V_DSNMUSULITAF, V_DSMETUSLITAF, 'S');

         V_CDFILDEST_RELAC     := P_CDFILDEST;
         V_CDFILLANC_RELAC     := P_CDFILLANC;
         V_NRAUTOFORN_RELAC    := P_NRAUTOFORN_DEST;
         V_CDMARCAAF_RELAC     := NVL(P_CDMARCA_DEST, C_AF_ORIGIGEM.CDMARCA);
         V_CDPRODUTOAF_RELAC   := NVL(P_CDPRODUTO_DEST, C_AF_ORIGIGEM.CDPRODUTO);
         V_DTPROGENTAF_RELAC   := P_DTPROGENTAF_DEST;

         /******************************ATUALIZAcaO SC****************************************/

         SELECT COUNT(1)
           INTO V_CONTADOR_1
           FROM ITEMSOLIRELACAF
          WHERE ITEMSOLIRELACAF.CDFILDEST    = C_AF_ORIGIGEM.CDFILDEST
            AND ITEMSOLIRELACAF.CDFILLANC    = C_AF_ORIGIGEM.CDFILLANC
            AND ITEMSOLIRELACAF.NRAUTOFORN   = C_AF_ORIGIGEM.NRAUTOFORN
            AND ITEMSOLIRELACAF.CDPRODUTOAF  = C_AF_ORIGIGEM.CDPRODUTO
            AND ITEMSOLIRELACAF.CDMARCAAF    = C_AF_ORIGIGEM.CDMARCA
            AND ITEMSOLIRELACAF.DTPROGENTAF  = C_AF_ORIGIGEM.DTPROGENTAF
            AND ITEMSOLIRELACAF.CDCENTITMAP  = P_CDCENTCMP
            AND ITEMSOLIRELACAF.NRSEQITMAP   = P_NRSEQAPURAF;
         IF V_CONTADOR_1 > 0 THEN
            V_ITEMSOLIRELACAF := 'S';
         ELSE
            V_ITEMSOLIRELACAF := 'N';
         END IF;
         /*Pesquisa de itens de solicitacao origem*/
         FOR C_ITMSOL_ORIG IN(SELECT ITEMSOLI.CDFILSOLI, ITEMSOLI.CDFILLAN, ITEMSOLI.NRSOLICMP, ITEMSOLI.CDPRODUTO,
                                     ITEMSOLI.DTPROGENTR, ITEMSOLI.QTSOLIPROD, ITEMSOLI.DTUTILIZA, ITEMSOLI.IDITMCONS,
                                     ITEMSOLI.TXOBSITMSOL, ITEMSOLI.IDBAIXITMSOL, ITEMSOLI.QTTRANSFSOL, ITEMSOLI.NRLOTEESTQ,
                                     ITEMSOLI.NRSUBLOTE, ITEMSOLI.CDPRODPROD, ITEMSOLI.CDFILLANCONS, ITEMSOLI.CDFILSOLCONS,
                                     ITEMSOLI.NRSOLCMPCONS, ITEMSOLI.CDPRODUTCONS, ITEMSOLI.DTPROGENCONS, ITEMSOLI.CDMARCA
                                FROM ITEMSOLI, PRODUTO
                               WHERE ITEMSOLI.CDFILSOLI   = C_AF_ORIGIGEM.CDFILDEST
                                 AND ITEMSOLI.DTPROGENTR  = C_AF_ORIGIGEM.DTENTRITMSOL
                                 AND PRODUTO.CDPRODESTO   = V_CDPRODESTO_ORIG
                                 AND ITEMSOLI.CDPRODUTO   = PRODUTO.CDPRODUTO
                                 AND ((ITEMSOLI.IDITMSOLEXTRA = V_IDAUTOFORNEX) OR (V_IDAUTOFORNEX = 'X'))
                                 AND (((NVL(ITEMSOLI.IDSOLIAPROV, 'S') = 'N')  OR (V_ITEMSOLIRELACAF = 'N'))OR
                                     (EXISTS (SELECT 1
                                                FROM ITEMSOLIRELACAF
                                               WHERE ITEMSOLIRELACAF.CDFILSOLI    = ITEMSOLI.CDFILSOLI
                                                 AND ITEMSOLIRELACAF.CDFILLAN     = ITEMSOLI.CDFILLAN
                                                 AND ITEMSOLIRELACAF.NRSOLICMP    = ITEMSOLI.NRSOLICMP
                                                 AND ITEMSOLIRELACAF.CDPRODUTO    = ITEMSOLI.CDPRODUTO
                                                 AND ITEMSOLIRELACAF.DTPROGENTR   = ITEMSOLI.DTPROGENTR
                                                 AND ITEMSOLIRELACAF.CDCENTITMAP  = P_CDCENTCMP
                                                 AND ITEMSOLIRELACAF.NRSEQITMAP   = P_NRSEQAPURAF)))
                               ORDER BY ITEMSOLI.NRSOLICMP) LOOP
            BEGIN
               /*Consulta existencia de item de solicitacao de compras destino*/
               SELECT QTSOLIPROD
                 INTO V_QTSOLIPROD
                 FROM ITEMSOLI
                WHERE ITEMSOLI.CDFILSOLI  = C_ITMSOL_ORIG.CDFILSOLI
                  AND ITEMSOLI.CDFILLAN   = C_ITMSOL_ORIG.CDFILLAN
                  AND ITEMSOLI.NRSOLICMP  = C_ITMSOL_ORIG.NRSOLICMP
                  AND ITEMSOLI.CDPRODUTO  = C_ITMSOL_ORIG.CDPRODUTO
                  AND ITEMSOLI.DTPROGENTR = P_DTENTRITMSOL_DEST;
            EXCEPTION
               WHEN NO_DATA_FOUND THEN BEGIN
                  V_QTSOLIPROD := NULL;
               END;
            END;
            /*Incluir item de solicitacao destino*/
            IF V_QTSOLIPROD IS NULL THEN
               INSERT
                 INTO ITEMSOLI(CDFILSOLI, CDFILLAN, NRSOLICMP, CDPRODUTO,
                               DTPROGENTR, QTSOLIPROD, DTUTILIZA, IDITMCONS,
                               TXOBSITMSOL, IDBAIXITMSOL, QTTRANSFSOL, NRLOTEESTQ,
                               NRSUBLOTE, CDPRODPROD, CDFILLANCONS, CDFILSOLCONS,
                               NRSOLCMPCONS, CDPRODUTCONS, DTPROGENCONS, CDMARCA)
               VALUES (C_ITMSOL_ORIG.CDFILSOLI, C_ITMSOL_ORIG.CDFILLAN, C_ITMSOL_ORIG.NRSOLICMP, C_ITMSOL_ORIG.CDPRODUTO,
                      P_DTENTRITMSOL_DEST, C_ITMSOL_ORIG.QTSOLIPROD, C_ITMSOL_ORIG.DTUTILIZA, C_ITMSOL_ORIG.IDITMCONS,
                      C_ITMSOL_ORIG.TXOBSITMSOL, C_ITMSOL_ORIG.IDBAIXITMSOL, C_ITMSOL_ORIG.QTTRANSFSOL, C_ITMSOL_ORIG.NRLOTEESTQ,
                      C_ITMSOL_ORIG.NRSUBLOTE, C_ITMSOL_ORIG.CDPRODPROD, C_ITMSOL_ORIG.CDFILLANCONS, C_ITMSOL_ORIG.CDFILSOLCONS,
                      C_ITMSOL_ORIG.NRSOLCMPCONS, C_ITMSOL_ORIG.CDPRODUTCONS, C_ITMSOL_ORIG.DTPROGENCONS, C_ITMSOL_ORIG.CDMARCA);
               V_QTANTOPER := 0;
               V_QTDEPOPER := C_ITMSOL_ORIG.QTSOLIPROD;
            ELSE
               V_QTANTOPER := C_ITMSOL_ORIG.QTSOLIPROD;
               V_QTDEPOPER := C_ITMSOL_ORIG.QTSOLIPROD;
               IF C_ITMSOL_ORIG.DTPROGENTR <> P_DTENTRITMSOL_DEST THEN
                  /*Atualiza item de solicitacao destino*/
                  UPDATE ITEMSOLI
                     SET ITEMSOLI.QTSOLIPROD = ITEMSOLI.QTSOLIPROD + C_ITMSOL_ORIG.QTSOLIPROD
                   WHERE ITEMSOLI.CDFILSOLI  = C_ITMSOL_ORIG.CDFILSOLI
                     AND ITEMSOLI.CDFILLAN   = C_ITMSOL_ORIG.CDFILLAN
                     AND ITEMSOLI.NRSOLICMP  = C_ITMSOL_ORIG.NRSOLICMP
                     AND ITEMSOLI.CDPRODUTO  = C_ITMSOL_ORIG.CDPRODUTO
                     AND ITEMSOLI.DTPROGENTR = P_DTENTRITMSOL_DEST;
                  V_QTANTOPER := C_ITMSOL_ORIG.QTSOLIPROD;
                  V_QTDEPOPER := V_QTSOLIPROD + C_ITMSOL_ORIG.QTSOLIPROD;
               END IF;
            END IF;
            V_CDFILSOLI_RELAC     := C_ITMSOL_ORIG.CDFILSOLI;
            V_CDFILLAN_RELAC      := C_ITMSOL_ORIG.CDFILLAN;
            V_NRSOLICMP_RELAC     := C_ITMSOL_ORIG.NRSOLICMP;
            V_CDPRODUTO_RELAC     := C_ITMSOL_ORIG.CDPRODUTO;
            V_DTPROGENTR_RELAC    := P_DTENTRITMSOL_DEST;
            /*Log de alteracao/inclusao de item de solicitacao destino*/
            IF V_QTANTOPER = 0 THEN
               V_DSJUSTOPER := 'Análise de AF - Qtde de '||V_QTANTOPER||' para '||
                                TO_CHAR(V_QTDEPOPER, '9999999999999D99MI');
            ELSE
               V_DSJUSTOPER := 'Análise de AF - Qtde de '||TO_CHAR(V_QTANTOPER, '9999999999999D99MI')||' para '||
                                TO_CHAR(V_QTDEPOPER, '9999999999999D99MI');
            END IF;
            INSERT
              INTO MOVOPSOL (CDFILSOLMOV, CDFILLANMOV, NRSOLIMOV, CDPRODUTO,
                             DTENTROPER, DTOPERSOL, CDOPERADOR, QTANTOPER, QTDEPOPER,
                             DSJUSTOPER, DSRDMUSUMOVS, DSENDUSUMOVS, DSNMUSUMOVS, DSMETUSUMOVS)
            VALUES (C_ITMSOL_ORIG.CDFILSOLI, C_ITMSOL_ORIG.CDFILLAN, C_ITMSOL_ORIG.NRSOLICMP, C_ITMSOL_ORIG.CDPRODUTO,
                   P_DTENTRITMSOL_DEST, SYSDATE, V_CDOPELOGITAF, V_QTANTOPER, V_QTDEPOPER,
                   V_DSJUSTOPER, V_DSRDMUSLITAF, V_DSENDUSLITAF, V_DSNMUSULITAF, V_DSMETUSLITAF);

            /*Excluir item de solicitacao origem*/
            IF C_ITMSOL_ORIG.DTPROGENTR <> P_DTENTRITMSOL_DEST THEN
               DELETE
                 FROM ITEMSOLI
                WHERE ITEMSOLI.CDFILSOLI  = C_ITMSOL_ORIG.CDFILSOLI
                  AND ITEMSOLI.CDFILLAN   = C_ITMSOL_ORIG.CDFILLAN
                  AND ITEMSOLI.NRSOLICMP  = C_ITMSOL_ORIG.NRSOLICMP
                  AND ITEMSOLI.CDPRODUTO  = C_ITMSOL_ORIG.CDPRODUTO
                  AND ITEMSOLI.DTPROGENTR = C_ITMSOL_ORIG.DTPROGENTR;
                  /*Log de exclusao de item de solicitacao origem*/
                  V_DSJUSTOPER := 'Análise de AF - Qtde de '||TO_CHAR(C_ITMSOL_ORIG.QTSOLIPROD, '9999999999999D99MI')||' para '||
                                  '0,00.';
                  INSERT
                    INTO MOVOPSOL (CDFILSOLMOV, CDFILLANMOV, NRSOLIMOV, CDPRODUTO,
                                   DTENTROPER, DTOPERSOL, CDOPERADOR, QTANTOPER, QTDEPOPER,
                                   DSJUSTOPER, DSRDMUSUMOVS, DSENDUSUMOVS, DSNMUSUMOVS, DSMETUSUMOVS)
                  VALUES (C_ITMSOL_ORIG.CDFILSOLI, C_ITMSOL_ORIG.CDFILLAN, C_ITMSOL_ORIG.NRSOLICMP, C_ITMSOL_ORIG.CDPRODUTO,
                         P_DTENTRITMSOL_DEST, SYSDATE, V_CDOPELOGITAF, C_ITMSOL_ORIG.QTSOLIPROD, 0,
                         V_DSJUSTOPER, V_DSRDMUSLITAF, V_DSENDUSLITAF, V_DSNMUSULITAF, V_DSMETUSLITAF);
            END IF;

            /*Log de exclusao de item de solicitacao origem*/
            V_DSJUSTOPER := 'Análise de AF - Qtde de '||TO_CHAR(V_QTANTOPER, '9999999999999D99MI')||' para '||
                            TO_CHAR(V_QTDEPOPER, '9999999999999D99MI');
            INSERT
              INTO MOVOPSOL (CDFILSOLMOV, CDFILLANMOV, NRSOLIMOV, CDPRODUTO,
                             DTENTROPER, DTOPERSOL, CDOPERADOR, QTANTOPER, QTDEPOPER,
                             DSJUSTOPER, DSRDMUSUMOVS, DSENDUSUMOVS, DSNMUSUMOVS, DSMETUSUMOVS)
            VALUES (C_ITMSOL_ORIG.CDFILSOLI, C_ITMSOL_ORIG.CDFILLAN, C_ITMSOL_ORIG.NRSOLICMP, C_ITMSOL_ORIG.CDPRODUTO,
                   P_DTENTRITMSOL_DEST, SYSDATE, V_CDOPELOGITAF, C_ITMSOL_ORIG.QTSOLIPROD, 0,
                   V_DSJUSTOPER, V_DSRDMUSLITAF, V_DSENDUSLITAF, V_DSNMUSULITAF, V_DSMETUSLITAF);



            /***********************ATUALIZA TABELA ITEMSOLIRELACAF**************************/
            IF V_ITEMSOLIRELACAF = 'S' THEN
               BEGIN
                  INSERT
                    INTO ITEMSOLIRELACAF
                         (NRITEMSOLIRELACAF, CDFILSOLI, CDFILLAN, NRSOLICMP,
                          CDPRODUTO, DTPROGENTR, CDCENTITMAP, NRSEQITMAP, QTSOLIPROD,
                          CDFILDEST, CDFILLANC, NRAUTOFORN, CDMARCAAF, CDPRODUTOAF, DTPROGENTAF)
                  VALUES (SEQ_NRITEMSOLIRELACAF.NEXTVAL, V_CDFILSOLI_RELAC, V_CDFILLAN_RELAC, V_NRSOLICMP_RELAC,
                         V_CDPRODUTO_RELAC, V_DTPROGENTR_RELAC, P_CDCENTCMP, P_NRSEQAPURAF, C_ITMSOL_ORIG.QTSOLIPROD,
                         V_CDFILDEST_RELAC, V_CDFILLANC_RELAC, V_NRAUTOFORN_RELAC, V_CDMARCAAF_RELAC, V_CDPRODUTOAF_RELAC,
                         V_DTPROGENTAF_RELAC);
               EXCEPTION
                  WHEN OTHERS THEN BEGIN
                     UPDATE ITEMSOLIRELACAF R
                        SET R.QTSOLIPROD   = R.QTSOLIPROD + C_ITMSOL_ORIG.QTSOLIPROD
                      WHERE R.CDFILSOLI    = V_CDFILSOLI_RELAC
                        AND R.CDFILLAN     = V_CDFILLAN_RELAC
                        AND R.NRSOLICMP    = V_NRSOLICMP_RELAC
                        AND R.CDPRODUTO    = V_CDPRODUTO_RELAC
                        AND R.DTPROGENTR   = V_DTPROGENTR_RELAC
                        AND R.CDCENTITMAP  = P_CDCENTCMP
                        AND R.NRSEQITMAP   = P_NRSEQAPURAF
                        AND R.CDFILDEST    = V_CDFILDEST_RELAC
                        AND R.CDFILLANC    = V_CDFILLANC_RELAC
                        AND R.NRAUTOFORN   = V_NRAUTOFORN_RELAC
                        AND R.CDMARCAAF    = V_CDMARCAAF_RELAC
                        AND R.CDPRODUTOAF  = V_CDPRODUTOAF_RELAC
                        AND R.DTPROGENTAF  = V_DTPROGENTAF_RELAC;
                  END;
               END;
            END IF;
         END LOOP;

         /****************************DELETA ITEM DE AF ORIGEM********************************/
         DELETE ITEMAUTF
          WHERE ITEMAUTF.CDFILDEST   = C_AF_ORIGIGEM.CDFILDEST
            AND ITEMAUTF.CDFILLANC   = C_AF_ORIGIGEM.CDFILLANC
            AND ITEMAUTF.NRAUTOFORN  = C_AF_ORIGIGEM.NRAUTOFORN
            AND ITEMAUTF.CDPRODUTO   = C_AF_ORIGIGEM.CDPRODUTO
            AND ITEMAUTF.CDMARCA     = C_AF_ORIGIGEM.CDMARCA
            AND ITEMAUTF.DTPROGENTAF = C_AF_ORIGIGEM.DTPROGENTAF;
         V_CDFILDEST_ORIG  := C_AF_ORIGIGEM.CDFILDEST;
         V_CDFILLANC_ORIG  := C_AF_ORIGIGEM.CDFILLANC;
         V_NRAUTOFORN_ORIG := C_AF_ORIGIGEM.NRAUTOFORN;
         /*Log de exclusao de item de af*/
         V_DSJUSTOPERMOV := 'Análise de AF-Excl. do Item/Remanej.';
         V_DSALTERAF     := 'Exclusao do Item.';
         INSERT
           INTO MOVOPAF (CDFILDESMOV, CDFILLANMOV, NRAUTOMOV, CDPRODMOV,
                         CDMARCMOV, DTPROGENTMOV, DTOPERAF, CDOPERADOR,
                         DSALTERAF, DSJUSTOPERMOV, IDOPERAMOVAF, DSRDMUSUMOVAF,
                         DSENDUSUMOVAF, DSNMUSUMOVAF, DSMETUSUMOVAF, IDUTATUALIZASOL)
         VALUES (C_AF_ORIGIGEM.CDFILDEST, C_AF_ORIGIGEM.CDFILLANC, C_AF_ORIGIGEM.NRAUTOFORN, C_AF_ORIGIGEM.CDPRODUTO,
                 C_AF_ORIGIGEM.CDMARCA, C_AF_ORIGIGEM.DTPROGENTAF, SYSDATE, V_CDOPELOGITAF,
                 V_DSALTERAF, V_DSJUSTOPERMOV, 'E', V_DSRDMUSLITAF,
                 V_DSENDUSLITAF, V_DSNMUSULITAF, V_DSMETUSLITAF, 'S');
      END IF;
   END LOOP;
   IF V_CONTADOR_ERROS = 0 THEN
      /*Fecha af destino*/
      FECHAMENTO_AF(P_CDFILDEST, P_CDFILLANC, P_NRAUTOFORN_DEST);
      SELECT COUNT(1)
        INTO V_APAGOU_AF
        FROM AUTOFORNE
       WHERE AUTOFORNE.CDFILDEST   = V_CDFILDEST_ORIG
         AND AUTOFORNE.CDFILLANC   = V_CDFILLANC_ORIG
         AND AUTOFORNE.NRAUTOFORN  = V_NRAUTOFORN_ORIG
         AND NOT EXISTS(SELECT 1
                          FROM ITEMAUTF
                         WHERE ITEMAUTF.CDFILDEST   = AUTOFORNE.CDFILDEST
                           AND ITEMAUTF.CDFILLANC   = AUTOFORNE.CDFILLANC
                           AND ITEMAUTF.NRAUTOFORN  = AUTOFORNE.NRAUTOFORN);
      IF V_APAGOU_AF > 0 THEN
         /*Deleta af destino se nao houver nenhum  item registro de item de af*/
         DELETE
           FROM AUTOFORNE
          WHERE AUTOFORNE.CDFILDEST   = V_CDFILDEST_ORIG
            AND AUTOFORNE.CDFILLANC   = V_CDFILLANC_ORIG
            AND AUTOFORNE.NRAUTOFORN  = V_NRAUTOFORN_ORIG;
      ELSE
         /*Fecha af origem se houver registro de item de af*/
         FECHAMENTO_AF(V_CDFILDEST_ORIG, V_CDFILLANC_ORIG, V_NRAUTOFORN_ORIG);
      END IF;
   ELSE
      /*Aborta operacao se houver algum erro*/
      ROLLBACK;
   END IF;
   IF V_MENSAGEM IS NULL THEN
      P_RESULT_ERROS := V_ERROS;
   ELSE
      P_RESULT_ERROS := V_MENSAGEM;
   END IF;
END;
/

-- VERSAO --
BEGIN ATUVEROBJ('REMANEJAR_AF','6.25.xxx'); END;
/