DROP FUNCTION EVOLUI_INFLACAO
/
DROP FUNCTION EVOLUI_INFLA
/

DROP TYPE EVOLUI_INFLACAO_TABLE
/

DROP TYPE EVOLUI_INFLACAO_TYPE
/

CREATE TYPE EVOLUI_INFLACAO_TYPE AS OBJECT
  (CDREGIAO       VARCHAR2(3),
   NMREGIAO       VARCHAR2(30),
   CDSUBGRPROD    VARCHAR2(10),
   NMSUBGRPROD    VARCHAR2(40),
   MES            VARCHAR2(10),
   QUINZENA       VARCHAR2(1),
   CDPRODUTO      VARCHAR2(10),
   CDARVPROD      VARCHAR2(20),
   NMPRODUTO      VARCHAR2(50),
   VRPRECO        FLOAT,
   VRPRECOEST     FLOAT,
   QTSOLIPROD     FLOAT,
   VRTOTITEM      FLOAT,
   VRPERREP       FLOAT,
   VRPERREPGR     FLOAT,
   VRTOTPERIODO   FLOAT,
   VRFATORCALC    FLOAT,
   VRFATORCALCGR  FLOAT,
   VRPERINFLACAO  FLOAT,
   NRORG          NUMBER(10))
/

CREATE TYPE EVOLUI_INFLACAO_TABLE AS TABLE OF EVOLUI_INFLACAO_TYPE
/

CREATE OR REPLACE FUNCTION EVOLUI_INFLA
                          (P_CDREGIAO       IN VARCHAR2,
                           P_TCDREGIAO      IN VARCHAR2,
                           P_DATAINI        IN DATE,
                           P_DATAFIN        IN DATE,
                           P_CDPRODINI      IN VARCHAR2,
                           P_CDPRODFIN      IN VARCHAR2,
                           P_CDGRUPPROD     IN VARCHAR2,
                           P_CDSUBGRPROD    IN VARCHAR2,
                           P_TCDSUBGRPROD   IN VARCHAR2,
                           P_PERIODOMES     IN VARCHAR2 DEFAULT 'S',
                           P_RANKING        IN VARCHAR2 DEFAULT '0')
                          RETURN EVOLUI_INFLACAO_TABLE PIPELINED IS
   OUT_RECORD EVOLUI_INFLACAO_TYPE := EVOLUI_INFLACAO_TYPE (NULL, NULL, NULL, NULL, NULL,
                                                            NULL, NULL, NULL, NULL, 0, 0,
                                                            0, 0, 0, 0, 0, 0, 0, 0, 0);
   V_CDREGIAO      REGIAO.CDREGIAO%TYPE;
   V_NMREGIAO      REGIAO.NMREGIAO%TYPE;
   V_CDSUBGRPROD   SUBGRUPPROD.CDSUBGRPROD%TYPE;
   V_NMSUBGRPROD   SUBGRUPPROD.NMSUBGRPROD%TYPE;
   V_CDPRODESTO    PRODUTO.CDPRODESTO%TYPE;
   V_NMPRODUTO     PRODUTO.NMPRODUTO%TYPE;
   V_CDARVPROD     PRODUTO.CDARVPROD%TYPE;
   V_NRORG         NUMBER(10);
   V_MES           VARCHAR2(10);
   V_QUINZENA      VARCHAR2(10);
   V_QTSOLIPROD    ITEMSOLI.QTSOLIPROD%TYPE;
   V_QTSOLIPRODMES ITEMSOLI.QTSOLIPROD%TYPE;
   V_DATAINI       DATE;
   V_DATAFIN       DATE;
   V_DATAINI_STR   VARCHAR2(10);
   V_DATAFIN_STR   VARCHAR2(10);
   V_MESFORMAT     VARCHAR2(10);
   TYPE CURTYPE    IS REF CURSOR;
   C_DADOS_CAB     CURTYPE;
   V_CDGRUPPROD    SUBGRUPPROD.CDGRUPPROD%TYPE;
BEGIN
   V_CDGRUPPROD := P_CDGRUPPROD;
   V_DATAINI_STR:=  TO_CHAR(P_DATAINI, 'DD/MM/YYYY');
   V_DATAFIN_STR:=  TO_CHAR(P_DATAFIN, 'DD/MM/YYYY');
   /*IF TO_DATE(P_DATAINI, 'DD/MM/YYYY') <> TO_DATE(P_DATAINI, 'DD/MM/YY') THEN
      V_DATAINI:= TO_DATE(P_DATAINI, 'DD/MM/YY');
      V_DATAFIN := TO_DATE(P_DATAFIN, 'DD/MM/YY');
   ELSE
      V_DATAINI := TO_DATE(P_DATAINI, 'DD/MM/YYYY');
      V_DATAFIN := TO_DATE(P_DATAFIN, 'DD/MM/YYYY');
   END IF;*/
   V_DATAINI := TO_DATE(V_DATAINI_STR, 'DD/MM/YYYY');
   V_DATAFIN := TO_DATE(V_DATAFIN_STR, 'DD/MM/YYYY');
   OUT_RECORD.VRTOTPERIODO   := 0;
   IF P_PERIODOMES = 'S' THEN
      OPEN C_DADOS_CAB FOR
         SELECT REGIAO.CDREGIAO, REGIAO.NMREGIAO, SUBGRUPPROD.CDSUBGRPROD,
                SUBGRUPPROD.NMSUBGRPROD, PRODUTO.CDPRODESTO,
                TO_CHAR(ITEMSOLI.DTPROGENTR, 'YYYY/MM') AS MES,
                TO_CHAR(ITEMSOLI.DTPROGENTR, 'MM/YYYY') AS MESFORMAT,
                '' QUINZENA, SUM(ITEMSOLI.QTSOLIPROD*PRODUTO.VRFATOCONV) AS QTSOLIPROD,
                0 QTSOLIPRODMES,
                PRODUTO.NMPRODUTO, PRODUTO.CDARVPROD, PRODUTO.NRORG
           FROM ITEMSOLI, FILIAL, REGIAO, PRODUTO, PRSUBGRPROD, SUBGRUPPROD
          WHERE ITEMSOLI.CDFILSOLI = FILIAL.CDFILIAL
            AND REGIAO.CDREGIAO = FILIAL.CDREGIAO
            AND (INSTR(P_CDREGIAO, FILIAL.CDREGIAO) <> 0 OR P_TCDREGIAO = 'T')
            AND ITEMSOLI.DTPROGENTR BETWEEN V_DATAINI AND V_DATAFIN
            AND NVL(ITEMSOLI.IDITMCONS, 'N') = 'N'
            AND ITEMSOLI.CDPRODUTO = PRODUTO.CDPRODUTO
            AND PRODUTO.CDARVPROD BETWEEN P_CDPRODINI AND P_CDPRODFIN
            AND SUBGRUPPROD.CDGRUPPROD = V_CDGRUPPROD
            AND SUBGRUPPROD.CDGRUPPROD = PRSUBGRPROD.CDGRUPPROD
            AND SUBGRUPPROD.CDSUBGRPROD = PRSUBGRPROD.CDSUBGRPROD
            AND (INSTR(P_CDSUBGRPROD, SUBGRUPPROD.CDSUBGRPROD) <> 0 OR P_TCDSUBGRPROD = 'T')
            AND PRSUBGRPROD.CDPRODUTO = PRODUTO.CDPRODUTO
            AND (PRSUBGRPROD.CDFILISUBGR = 'P' OR PRSUBGRPROD.CDFILISUBGR = FILIAL.CDFILIAL)
            AND (NVL(ITEMSOLI.IDSOLIAPROV,'S') = 'S')
            AND ITEMSOLI.NRORG    = FILIAL.NRORG
            AND FILIAL.NRORG      = REGIAO.NRORG
            AND REGIAO.NRORG      = PRODUTO.NRORG
            AND PRODUTO.NRORG     = PRSUBGRPROD.NRORG
            AND PRSUBGRPROD.NRORG = SUBGRUPPROD.NRORG
          GROUP BY REGIAO.CDREGIAO, REGIAO.NMREGIAO, SUBGRUPPROD.CDSUBGRPROD,
                SUBGRUPPROD.NMSUBGRPROD, PRODUTO.CDPRODESTO,
                TO_CHAR(ITEMSOLI.DTPROGENTR, 'YYYY/MM'), TO_CHAR(ITEMSOLI.DTPROGENTR, 'MM/YYYY'),
                PRODUTO.NMPRODUTO, PRODUTO.CDARVPROD, PRODUTO.NRORG;
   ELSE
      OPEN C_DADOS_CAB FOR
         SELECT REGIAO.CDREGIAO, REGIAO.NMREGIAO, SUBGRUPPROD.CDSUBGRPROD,
                SUBGRUPPROD.NMSUBGRPROD, PRODUTO.CDPRODESTO,
                TO_CHAR(ITEMSOLI.DTPROGENTR, 'YYYY/MM') AS MES,
                TO_CHAR(ITEMSOLI.DTPROGENTR, 'MM/YYYY') AS MESFORMAT,
                DECODE(TO_CHAR(DECODE(TO_CHAR(ITEMSOLI.DTPROGENTR, 'DD'), 15, ITEMSOLI.DTPROGENTR-1, ITEMSOLI.DTPROGENTR), 'W'),
                1, '1',
                2, '1',
                '2') AS QUINZENA,
                SUM(ITEMSOLI.QTSOLIPROD*PRODUTO.VRFATOCONV) AS QTSOLIPROD,
                0 QTSOLIPRODMES,
                PRODUTO.NMPRODUTO, PRODUTO.CDARVPROD, PRODUTO.NRORG
           FROM ITEMSOLI, FILIAL, REGIAO, PRODUTO, PRSUBGRPROD, SUBGRUPPROD
          WHERE ITEMSOLI.CDFILSOLI = FILIAL.CDFILIAL
            AND REGIAO.CDREGIAO = FILIAL.CDREGIAO
            AND (INSTR(P_CDREGIAO, FILIAL.CDREGIAO) <> 0 OR P_TCDREGIAO = 'T')
            AND ITEMSOLI.DTPROGENTR BETWEEN V_DATAINI AND V_DATAFIN
            AND NVL(ITEMSOLI.IDITMCONS, 'N') = 'N'
            AND ITEMSOLI.CDPRODUTO = PRODUTO.CDPRODUTO
            AND PRODUTO.CDARVPROD BETWEEN P_CDPRODINI AND P_CDPRODFIN
            AND SUBGRUPPROD.CDGRUPPROD = V_CDGRUPPROD
            AND SUBGRUPPROD.CDGRUPPROD = PRSUBGRPROD.CDGRUPPROD
            AND SUBGRUPPROD.CDSUBGRPROD = PRSUBGRPROD.CDSUBGRPROD
            AND (INSTR(P_CDSUBGRPROD, SUBGRUPPROD.CDSUBGRPROD) <> 0 OR P_TCDSUBGRPROD = 'T')
            AND PRSUBGRPROD.CDPRODUTO = PRODUTO.CDPRODUTO
            AND (PRSUBGRPROD.CDFILISUBGR = 'P' OR PRSUBGRPROD.CDFILISUBGR = FILIAL.CDFILIAL)
            AND (NVL(ITEMSOLI.IDSOLIAPROV,'S') = 'S')
            AND ITEMSOLI.NRORG    = FILIAL.NRORG
            AND FILIAL.NRORG      = REGIAO.NRORG
            AND REGIAO.NRORG      = PRODUTO.NRORG
            AND PRODUTO.NRORG     = PRSUBGRPROD.NRORG
            AND PRSUBGRPROD.NRORG = SUBGRUPPROD.NRORG
          GROUP BY REGIAO.CDREGIAO, REGIAO.NMREGIAO, SUBGRUPPROD.CDSUBGRPROD,
                SUBGRUPPROD.NMSUBGRPROD, PRODUTO.CDPRODESTO,
                TO_CHAR(ITEMSOLI.DTPROGENTR, 'YYYY/MM'),
                TO_CHAR(ITEMSOLI.DTPROGENTR, 'MM/YYYY'),
                DECODE(TO_CHAR(DECODE(TO_CHAR(ITEMSOLI.DTPROGENTR, 'DD'), 15, ITEMSOLI.DTPROGENTR-1, ITEMSOLI.DTPROGENTR), 'W'),
                1, '1',
                2, '1',
                '2'),
                PRODUTO.NMPRODUTO, PRODUTO.CDARVPROD, PRODUTO.NRORG;
   END IF;
   LOOP
   FETCH C_DADOS_CAB INTO V_CDREGIAO, V_NMREGIAO, V_CDSUBGRPROD,
                          V_NMSUBGRPROD, V_CDPRODESTO, V_MES,
                          V_MESFORMAT, V_QUINZENA, V_QTSOLIPROD,
                          V_QTSOLIPRODMES, V_NMPRODUTO, V_CDARVPROD, V_NRORG;
      EXIT WHEN C_DADOS_CAB%NOTFOUND;
      IF P_PERIODOMES = 'S' THEN
         V_DATAINI  := TO_DATE('01/'||V_MESFORMAT, 'DD/MM/YYYY');
         V_DATAFIN  := LAST_DAY(TO_DATE('01/'||V_MESFORMAT, 'DD/MM/YYYY'));
      ELSE
         IF V_QUINZENA = '1' THEN
            V_DATAINI  := TO_DATE('01/'||V_MESFORMAT, 'DD/MM/YYYY');
            V_DATAFIN  := TO_DATE('15/'||V_MESFORMAT, 'DD/MM/YYYY');
         ELSE
            V_DATAINI  := TO_DATE('16/'||V_MESFORMAT, 'DD/MM/YYYY');
            V_DATAFIN  := LAST_DAY(TO_DATE('17/'||V_MESFORMAT, 'DD/MM/YYYY'));
         END IF;
      END IF;
      OUT_RECORD.CDREGIAO       := V_CDREGIAO;
      OUT_RECORD.NMREGIAO       := V_NMREGIAO;
      OUT_RECORD.CDSUBGRPROD    := V_CDSUBGRPROD;
      OUT_RECORD.NMSUBGRPROD    := V_NMSUBGRPROD;
      OUT_RECORD.MES            := V_MES;
      OUT_RECORD.QUINZENA       := V_QUINZENA;
      OUT_RECORD.CDPRODUTO      := V_CDPRODESTO;
      OUT_RECORD.CDARVPROD      := V_CDARVPROD;
      OUT_RECORD.NMPRODUTO      := V_NMPRODUTO;
      OUT_RECORD.VRPRECO        := NULL;
      OUT_RECORD.VRPRECOEST     := NULL;
      OUT_RECORD.QTSOLIPROD     := V_QTSOLIPROD;
      OUT_RECORD.VRTOTITEM      := NULL;
      OUT_RECORD.VRPERREP       := NULL;
      OUT_RECORD.VRTOTPERIODO   := NULL;
      OUT_RECORD.VRFATORCALC    := NULL;
      OUT_RECORD.VRPERREPGR     := NULL;
      OUT_RECORD.VRPERINFLACAO  := NULL;
      OUT_RECORD.NRORG          := V_NRORG;
      FOR C_ITEMCOLE IN (SELECT PRODUTO.CDPRODUTO, PRODUTO.CDARVPROD,
                                PRODUTO.NMPRODUTO, PRODUTO.VRFATOCONV,
                                MIN(DECODE(P_RANKING,
                                       '0', ITEMCOLE.VRPRECUNIITM,
                                       '1', ITEMCOLE.VRPRECECOITM,
                                       '2', ITEMCOLE.VRPRECOITMPI)) AS VRPRECO,
                                MIN(DECODE(P_RANKING,
                                       '0', ITEMCOLE.VRPRECUNIITM,
                                       '1', ITEMCOLE.VRPRECECOITM,
                                       '2', ITEMCOLE.VRPRECOITMPI)/PRODUTO.VRFATOCONV) AS VRPRECOEST
                           FROM ITEMCOLE, PRODUTO, PRODUTO PRODESTO
                          WHERE ITEMCOLE.CDREGIAO  = V_CDREGIAO
                            AND ITEMCOLE.CDPRODUTO = PRODUTO.CDPRODUTO
                            AND PRODUTO.CDPRODESTO = PRODESTO.CDPRODESTO
                            AND PRODESTO.CDPRODUTO = V_CDPRODESTO
                            AND ITEMCOLE.DTFINVALITM >= V_DATAINI
                            AND ITEMCOLE.DTINIVALITM <= V_DATAFIN
                            /*AND TO_DATE(ITEMCOLE.DTINIVALITM, 'DD/MM/YYYY') BETWEEN CASE
                                                                                       WHEN TO_DATE(ITEMCOLE.DTINIVALITM, 'DD/MM/YYYY') < V_DATAINI
                                                                                       THEN TO_DATE(ITEMCOLE.DTINIVALITM, 'DD/MM/YYYY')
                                                                                       ELSE V_DATAINI
                                                                                    END AND V_DATAFIN
                            AND TO_DATE(ITEMCOLE.DTFINVALITM, 'DD/MM/YYYY') BETWEEN V_DATAINI AND CASE
                                                                                                     WHEN TO_DATE(ITEMCOLE.DTFINVALITM, 'DD/MM/YYYY') > V_DATAFIN
                                                                                                     THEN TO_DATE(ITEMCOLE.DTFINVALITM, 'DD/MM/YYYY')
                                                                                                     ELSE V_DATAFIN
                                                                                                  END*/
                           AND DECODE(P_RANKING,
                                       '0', ITEMCOLE.VRPRECUNIITM,
                                       '1', ITEMCOLE.VRPRECECOITM,
                                       '2', ITEMCOLE.VRPRECOITMPI)/PRODUTO.VRFATOCONV =
                               (SELECT MIN(DECODE(P_RANKING,
                                       '0', ITEMCOLE.VRPRECUNIITM,
                                       '1', ITEMCOLE.VRPRECECOITM,
                                       '2', ITEMCOLE.VRPRECOITMPI)/PRODUTO.VRFATOCONV)
                                  FROM ITEMCOLE, PRODUTO, PRODUTO PRODESTO
                                 WHERE ITEMCOLE.CDREGIAO  = V_CDREGIAO
                                   AND ITEMCOLE.CDPRODUTO = PRODUTO.CDPRODUTO
                                   AND PRODUTO.CDPRODESTO = PRODESTO.CDPRODESTO
                                   AND PRODESTO.CDPRODUTO = V_CDPRODESTO
                                   AND ITEMCOLE.DTFINVALITM >= V_DATAINI
                                   AND ITEMCOLE.DTINIVALITM <= V_DATAFIN
                                   AND NVL(ITEMCOLE.VRPRECUNIITM, 0) > 0
                                   AND ITEMCOLE.NRORG     = PRODUTO.NRORG
                                   AND PRODUTO.NRORG      = PRODESTO.NRORG
                                   /*AND TO_DATE(ITEMCOLE.DTINIVALITM, 'DD/MM/YYYY') BETWEEN CASE
                                                                                              WHEN TO_DATE(ITEMCOLE.DTINIVALITM, 'DD/MM/YYYY') < V_DATAINI
                                                                                              THEN TO_DATE(ITEMCOLE.DTINIVALITM, 'DD/MM/YYYY')
                                                                                              ELSE V_DATAINI
                                                                                           END AND V_DATAFIN
                                   AND TO_DATE(ITEMCOLE.DTFINVALITM, 'DD/MM/YYYY') BETWEEN V_DATAINI AND CASE
                                                                                                            WHEN TO_DATE(ITEMCOLE.DTFINVALITM, 'DD/MM/YYYY') > V_DATAFIN
                                                                                                            THEN TO_DATE(ITEMCOLE.DTFINVALITM, 'DD/MM/YYYY')
                                                                                                            ELSE V_DATAFIN
                                                                                                         END*/
                                   )
                          GROUP BY PRODUTO.CDPRODUTO, PRODUTO.CDARVPROD, PRODUTO.NMPRODUTO, PRODUTO.VRFATOCONV, ITEMCOLE.NRORG
                          ORDER BY 6)
      LOOP
         OUT_RECORD.CDREGIAO       := V_CDREGIAO;
         OUT_RECORD.NMREGIAO       := V_NMREGIAO;
         OUT_RECORD.CDSUBGRPROD    := V_CDSUBGRPROD;
         OUT_RECORD.NMSUBGRPROD    := V_NMSUBGRPROD;
         OUT_RECORD.MES            := V_MES;
         OUT_RECORD.QUINZENA       := V_QUINZENA;
         OUT_RECORD.CDPRODUTO      := C_ITEMCOLE.CDPRODUTO;
         OUT_RECORD.CDARVPROD      := C_ITEMCOLE.CDARVPROD;
         OUT_RECORD.NMPRODUTO      := C_ITEMCOLE.NMPRODUTO;
         OUT_RECORD.VRPRECO        := C_ITEMCOLE.VRPRECO;
         OUT_RECORD.VRPRECOEST     := C_ITEMCOLE.VRPRECOEST;
         OUT_RECORD.QTSOLIPROD     := V_QTSOLIPROD;
         OUT_RECORD.VRTOTITEM      := C_ITEMCOLE.VRPRECO*V_QTSOLIPROD;
         OUT_RECORD.VRPERREP       := 100*OUT_RECORD.VRTOTITEM;
         OUT_RECORD.VRTOTPERIODO   := NULL;
         OUT_RECORD.VRFATORCALC    := NULL;
         OUT_RECORD.VRPERREPGR     := NULL;
         OUT_RECORD.VRPERINFLACAO  := NULL;
         EXIT;
      END LOOP;
      PIPE ROW (OUT_RECORD);
   END LOOP;
   CLOSE C_DADOS_CAB;
END;
/


/***************************************************************************/
/***************************************************************************/
CREATE OR REPLACE FUNCTION EVOLUI_INFLACAO
                          (P_CDREGIAO       IN VARCHAR2,
                           P_TCDREGIAO      IN VARCHAR2,
                           P_DATAINI        IN DATE,
                           P_DATAFIN        IN DATE,
                           P_CDPRODINI      IN VARCHAR2,
                           P_CDPRODFIN      IN VARCHAR2,
                           P_CDGRUPPROD     IN VARCHAR2,
                           P_CDSUBGRPROD    IN VARCHAR2,
                           P_TCDSUBGRPROD   IN VARCHAR2,
                           P_PERIODOMES     IN VARCHAR2 DEFAULT 'S',
                           P_RANKING        IN VARCHAR2 DEFAULT '0')
                          RETURN EVOLUI_INFLACAO_TABLE PIPELINED IS
   OUT_RECORD EVOLUI_INFLACAO_TYPE := EVOLUI_INFLACAO_TYPE (NULL, NULL, NULL, NULL, NULL,
                                                            NULL, NULL, NULL, NULL, 0, 0,
                                                            0, 0, 0, 0, 0, 0, 0, 0, 0);
   V_VRPERINFLACAO FLOAT         := 0;
   V_VRFATORCALCGR FLOAT         := 0;
   V_CHAVE         VARCHAR2(50)  := '_';
BEGIN
   FOR C_ITEM IN(SELECT CDREGIAO, NMREGIAO, CDSUBGRPROD, NMSUBGRPROD, MES, QUINZENA, CDPRODUTO,
                        CDARVPROD, NMPRODUTO, VRPRECO, VRPRECOEST, QTSOLIPROD, VRTOTITEM, VRTOTITEMPRIODO,
                        VRPERREP,
                        VRFATORCALC,
                        SUM(VRFATORCALC) OVER (PARTITION BY CDREGIAO, CDSUBGRPROD, MES, QUINZENA) VRFATORCALCGR,
                        SUM(VRPERREP) OVER (PARTITION BY CDREGIAO, CDSUBGRPROD, MES, QUINZENA) VRPERREPGR,
                        MIN(MES) OVER (PARTITION BY CDREGIAO) MIN_MES, NRORG
                   FROM (SELECT CDREGIAO, NMREGIAO, CDSUBGRPROD, NMSUBGRPROD, MES, QUINZENA, CDPRODUTO,
                                CDARVPROD, NMPRODUTO, VRPRECO, VRPRECOEST, QTSOLIPROD, VRTOTITEM,
                                SUM(VRTOTITEM) OVER (PARTITION BY CDREGIAO, MES, QUINZENA) VRTOTITEMPRIODO,
                                VRPERREP/SUM(CASE NVL(VRTOTITEM, 0)
                                                WHEN 0
                                                THEN 1
                                                ELSE NVL(VRTOTITEM, 0)
                                             END) OVER (PARTITION BY CDREGIAO, MES, QUINZENA) VRPERREP,
                                ((VRPERREP/SUM(CASE NVL(VRTOTITEM, 0)
                                                  WHEN 0
                                                  THEN 1
                                                  ELSE NVL(VRTOTITEM, 0)
                                               END) OVER (PARTITION BY CDREGIAO, MES, QUINZENA))/100)*
                                (VRTOTITEM) VRFATORCALC, NRORG
                           FROM TABLE(EVOLUI_INFLA (P_CDREGIAO,
                                                    P_TCDREGIAO,
                                                    P_DATAINI,
                                                    P_DATAFIN,
                                                    P_CDPRODINI,
                                                    P_CDPRODFIN,
                                                    P_CDGRUPPROD,
                                                    P_CDSUBGRPROD,
                                                    P_TCDSUBGRPROD,
                                                    P_PERIODOMES,
                                                    P_RANKING)))
                   ORDER BY CDREGIAO, CDSUBGRPROD, MES, QUINZENA)
   LOOP
      IF (V_CHAVE <> C_ITEM.CDREGIAO||C_ITEM.CDSUBGRPROD||C_ITEM.MES||C_ITEM.QUINZENA) AND (V_VRFATORCALCGR > 0) THEN
         V_CHAVE := C_ITEM.CDREGIAO||C_ITEM.CDSUBGRPROD||C_ITEM.MES||C_ITEM.QUINZENA;
         IF C_ITEM.MIN_MES =  C_ITEM.MES THEN
            V_VRPERINFLACAO := 0;
         ELSE
            V_VRPERINFLACAO := 100*((C_ITEM.VRFATORCALCGR/CASE NVL(V_VRFATORCALCGR, 0)
                                                             WHEN 0
                                                             THEN 1
                                                             ELSE NVL(V_VRFATORCALCGR, 0)
                                                          END) - 1);
         END IF;
      END IF;
      V_VRFATORCALCGR           := C_ITEM.VRFATORCALCGR;
      OUT_RECORD.CDREGIAO       := C_ITEM.CDREGIAO;
      OUT_RECORD.NMREGIAO       := C_ITEM.NMREGIAO;
      OUT_RECORD.CDSUBGRPROD    := C_ITEM.CDSUBGRPROD;
      OUT_RECORD.NMSUBGRPROD    := C_ITEM.NMSUBGRPROD;
      OUT_RECORD.MES            := C_ITEM.MES;
      OUT_RECORD.QUINZENA       := C_ITEM.QUINZENA;
      OUT_RECORD.CDPRODUTO      := C_ITEM.CDPRODUTO;
      OUT_RECORD.CDARVPROD      := C_ITEM.CDARVPROD;
      OUT_RECORD.NMPRODUTO      := C_ITEM.NMPRODUTO;
      OUT_RECORD.VRPRECO        := NVL(C_ITEM.VRPRECO, 0);
      OUT_RECORD.VRPRECOEST     := NVL(C_ITEM.VRPRECOEST, 0);
      OUT_RECORD.QTSOLIPROD     := NVL(C_ITEM.QTSOLIPROD, 0);
      OUT_RECORD.VRTOTITEM      := NVL(C_ITEM.VRTOTITEM, 0);
      OUT_RECORD.VRPERREP       := NVL(C_ITEM.VRPERREP, 0);
      OUT_RECORD.VRTOTPERIODO   := NVL(C_ITEM.VRTOTITEMPRIODO, 0);
      OUT_RECORD.VRFATORCALC    := NVL(C_ITEM.VRFATORCALC, 0);
      OUT_RECORD.VRFATORCALCGR  := NVL(C_ITEM.VRFATORCALCGR, 0);
      OUT_RECORD.VRPERINFLACAO  := NVL(V_VRPERINFLACAO, 0);
      OUT_RECORD.VRPERREPGR     := NVL(C_ITEM.VRPERREPGR, 0);
      OUT_RECORD.NRORG          := C_ITEM.NRORG;
      PIPE ROW (OUT_RECORD);
   END LOOP;
END;
/

-- VERSAO --
BEGIN ATUVEROBJ('EVOLUI_INFLACAO','5.42.XXX'); END;
/
