create or replace PROCEDURE RESULTADO_GERAL_ERP(P_DTINI            IN DATE, 
                                                P_DTFIM            IN DATE, 
                                                P_TP_OPER_FAT      IN VARCHAR2, --'01_18_21_28_30'(TIPO OPERACAO MISSIATO)
                                                P_GRUPPROD         IN VARCHAR2, --'0000000001'(GRUPO DE PRODUTO MISSIATO
                                                P_CTB_FRETE        IN VARCHAR2, --'301020109'                    (CONTA CONTABIL DE FRETE)
                                                P_CTB_INCENTIVOS   IN VARCHAR2, --'30102030103'                  (CONTA CONTABIL DE INCENTIVOS)
                                                P_CTB_MARKETING    IN VARCHAR2, --'301020106_301020107'          (CONTA CONTABIL DE MARKETING)
                                                P_CTB_DESPESAS     IN VARCHAR2, --'301020101_301020105_301020108'(CONTA CONTABIL DE DESPESAS)
                                                P_TPOP_INCENTIVOS  IN VARCHAR2, --'17'(TIPO DE OPERACAO DE INCENTIVOS)
                                                P_TPOP_MARKETING   IN VARCHAR2, --'19_20_23_24_25'(TIPO DE OPERACAO DE MARKETING)
                                                P_NRORG            IN NUMBER,   --'1004' ORAGANIZACAO RADIEX
                                                P_OWNER            IN VARCHAR2  --'ONWER DO BANCO DE DADOS'
                                            )
IS

V_NRORG                  FATURAMENTO_PRODVENDIDO.NRORG%TYPE;	         	 
V_INI_DT                 FATURAMENTO_PRODVENDIDO.DSDATA%TYPE; 
V_FIM_DT                 FATURAMENTO_PRODVENDIDO.DSDATA%TYPE;
V_DSMES_ANO              FATURAMENTO_PRODVENDIDO.DSMES_ANO%TYPE;	      
V_ORDANOMES              FATURAMENTO_PRODVENDIDO.ORDANOMES%TYPE;	      
V_DSANO                  FATURAMENTO_PRODVENDIDO.DSANO%TYPE;	          
V_DSMES                  FATURAMENTO_PRODVENDIDO.DSMES%TYPE;	          
V_DSBIMESTRE             FATURAMENTO_PRODVENDIDO.DSBIMESTRE%TYPE;	      
V_DSTRIMESTRE            FATURAMENTO_PRODVENDIDO.DSTRIMESTRE%TYPE;	      
V_DSSEMESTRE             FATURAMENTO_PRODVENDIDO.DSSEMESTRE%TYPE;	      
V_DSQUADRIMESTRE         FATURAMENTO_PRODVENDIDO.DSQUADRIMESTRE%TYPE;	 
V_DTEMISSAO              FATURAMENTO_PRODVENDIDO.DTEMISSAO%TYPE;	      
V_NRLANCTONF             FATURAMENTO_PRODVENDIDO.NRLANCTONF%TYPE;	      
V_NRNOTAFISC             FATURAMENTO_PRODVENDIDO.NRNOTAFISC%TYPE;	      
V_CDEMPRESA              FATURAMENTO_PRODVENDIDO.CDEMPRESA%TYPE;	      
V_NMEMPRESA              FATURAMENTO_PRODVENDIDO.NMEMPRESA%TYPE;
V_NMRAZSOCEMPR           FATURAMENTO_PRODVENDIDO.NMRAZSOCEMPR%TYPE;	  	      
V_CDMACROREGIAO          FATURAMENTO_PRODVENDIDO.CDMACROREGIAO%TYPE;	  
V_NMMACROREGIAO          FATURAMENTO_PRODVENDIDO.NMMACROREGIAO%TYPE;	  
V_CDMICROREGIAO          FATURAMENTO_PRODVENDIDO.CDMICROREGIAO%TYPE;	  
V_NMMICROREGIAO          FATURAMENTO_PRODVENDIDO.NMMICROREGIAO%TYPE;	  
V_CDVENDEDOR             FATURAMENTO_PRODVENDIDO.CDVENDEDOR%TYPE;	      
V_NMVENDEDOR             FATURAMENTO_PRODVENDIDO.NMVENDEDOR%TYPE;	      
V_SGESTADO               FATURAMENTO_PRODVENDIDO.SGESTADO%TYPE;	      
V_NMESTADO               FATURAMENTO_PRODVENDIDO.NMESTADO	%TYPE;      
V_CDMUNICIPIO            FATURAMENTO_PRODVENDIDO.CDMUNICIPIO%TYPE;     
V_NMMUNICIPIO            FATURAMENTO_PRODVENDIDO.NMMUNICIPIO%TYPE;	      
V_CDFILIAL               FATURAMENTO_PRODVENDIDO.CDFILIAL%TYPE;	   
V_CDFILIALNF             FATURAMENTO_PRODVENDIDO.CDFILIAL%TYPE;  
V_NMFILIAL               FATURAMENTO_PRODVENDIDO.NMFILIAL%TYPE;	      
V_CDCLIENTE              FATURAMENTO_PRODVENDIDO.CDCLIENTE%TYPE;	      
V_NMRAZSOCCLIE           FATURAMENTO_PRODVENDIDO.NMRAZSOCCLIE%TYPE;	  
V_NMFANTCLIE             FATURAMENTO_PRODVENDIDO.NMFANTCLIE%TYPE;	      
V_NRINSJURCLIE           FATURAMENTO_PRODVENDIDO.NRINSJURCLIE%TYPE;	  
V_CDSEGMER               FATURAMENTO_PRODVENDIDO.CDSEGMER%TYPE;	      
V_DSSEGMER               FATURAMENTO_PRODVENDIDO.DSSEGMER%TYPE;	      
V_CDGRUPCLIE             FATURAMENTO_PRODVENDIDO.CDGRUPCLIE%TYPE;	      
V_NMGRUPCLIE             FATURAMENTO_PRODVENDIDO.NMGRUPCLIE%TYPE;	     
V_CDATIVCLI              FATURAMENTO_PRODVENDIDO.CDATIVCLI%TYPE;	      
V_DSATIVCLI              FATURAMENTO_PRODVENDIDO.DSATIVCLI%TYPE;	      
V_CDGRUPPROD             FATURAMENTO_PRODVENDIDO.CDGRUPPROD%TYPE;	      
V_NMGRUPPROD             FATURAMENTO_PRODVENDIDO.NMGRUPPROD%TYPE;	      
V_CDSUBGRPROD            FATURAMENTO_PRODVENDIDO.CDSUBGRPROD%TYPE;	     
V_NMSUBGRPROD            FATURAMENTO_PRODVENDIDO.NMSUBGRPROD%TYPE;	      
V_CDPRODUTO              FATURAMENTO_PRODVENDIDO.CDPRODUTO%TYPE;	       
V_CDARVPROD              FATURAMENTO_PRODVENDIDO.CDARVPROD%TYPE;	      
V_NMPRODUTO              FATURAMENTO_PRODVENDIDO.NMPRODUTO%TYPE;	     
V_QT_PRODUTO             FATURAMENTO_PRODVENDIDO.QT_PRODUTO%TYPE := 0;	      
V_VR_BRUTITEM            FATURAMENTO_PRODVENDIDO.VR_BRUTITEM%TYPE := 0;	     
V_QT_OBJETIVO_FIS        FATURAMENTO_PRODVENDIDO.QT_OBJETIVO_FIS%TYPE := 0;  
V_QT_OBJETIVO_FIN        FATURAMENTO_PRODVENDIDO.QT_OBJETIVO_FIN%TYPE := 0;	  
V_VR_FECP                FATURAMENTO_PRODVENDIDO.VR_FECP%TYPE := 0;	          
V_VR_IPI                 FATURAMENTO_PRODVENDIDO.VR_IPI%TYPE := 0;      
V_VR_ICMS                FATURAMENTO_PRODVENDIDO.VR_ICMS%TYPE := 0;	         
V_VR_ICMS_ST             FATURAMENTO_PRODVENDIDO.VR_ICMSST%TYPE := 0;	       
V_VR_PIS                 FATURAMENTO_PRODVENDIDO.VR_PIS%TYPE := 0;   
V_VR_PIS_ST              FATURAMENTO_PRODVENDIDO.VR_PISST%TYPE := 0;         
V_VR_COFINS              FATURAMENTO_PRODVENDIDO.VR_COFINS%TYPE := 0;    
V_VR_COFINS_ST           FATURAMENTO_PRODVENDIDO.VR_COFINS_ST%TYPE := 0;   
V_VR_II                  FATURAMENTO_PRODVENDIDO.VR_II%TYPE := 0;             
V_VR_ISSQNE              FATURAMENTO_PRODVENDIDO.VR_ISSQNE%TYPE := 0;
V_VRFRETE                FATURAMENTO_PRODVENDIDO.VR_FRETE%TYPE := 0;
V_VRSEGURO               FATURAMENTO_PRODVENDIDO.VR_SEGURO%TYPE := 0;    
V_VRDESCONTOS            FATURAMENTO_PRODVENDIDO.VR_DESCONTOS%TYPE := 0;   
V_VROUTRAS_DESPESAS      FATURAMENTO_PRODVENDIDO.VR_OUTRAS_DESP%TYPE := 0; 
V_VRDESPESAS_ADUANEIRAS  FATURAMENTO_PRODVENDIDO.VR_DESPESAS_ADU%TYPE := 0;
V_VRCOMISSAO             FATURAMENTO_PRODVENDIDO.VR_COMISSOES%TYPE := 0;
V_VR_CUSTO_VARIAVEL      FATURAMENTO_PRODVENDIDO.VR_CUSTO_VARIAVEL%TYPE := 0;

V_VRINCENTIVOS           FATURAMENTO_DESPESACLI.VRINCENTIVOS%TYPE := 0;
V_VRMARKETING            FATURAMENTO_DESPESACLI.VRMARKETING%TYPE := 0;
V_VRDESPESAS             FATURAMENTO_DESPESACLI.VRDESPESAS%TYPE := 0;

V_ORD_ITEM               FAT_RESUMO_RESULTADO.ORD_ITEM%TYPE;
V_DSITEM                 FAT_RESUMO_RESULTADO.DSITEM%TYPE; 
V_VR_ITEM                FAT_RESUMO_RESULTADO.VR_ITEM%TYPE := 0;

V_DTPEDIDO               CARTEIRA_DE_PEDIDOS.DTPEDIDO%TYPE; 
V_DTENTPED               CARTEIRA_DE_PEDIDOS.DTENTPED%TYPE;
V_QTITEMPED              CARTEIRA_DE_PEDIDOS.QTITEMPED%TYPE := 0;
V_VRPREUNITPED           CARTEIRA_DE_PEDIDOS.VRPREUNITPED%TYPE := 0;
V_NRPEDIDO               CARTEIRA_DE_PEDIDOS.NRPEDIDO%TYPE;
V_NRITEMPED              FATURAMENTO_PRODVENDIDO.NRITEMPED%TYPE;
V_IDSITPED               CARTEIRA_DE_PEDIDOS.IDSITPED%TYPE;

V_CDTIPOOPER             ROMANEIO_NF.CDTIPOOPER%TYPE; 
V_NMTIPOOPER             ROMANEIO_NF.NMTIPOOPER%TYPE;

V_COUNT                  NUMBER := 0;
V_EXISTE                 NUMBER := 0;

V_CDIMPOSTO              IMPOSTO.CDIMPOSTO%TYPE;
V_SGIMPOSTONFE           IMPOSTONFE.SGIMPOSTONFE%TYPE;  
V_NRSEQITPROD            ITEMPRODUTO.NRSEQITPROD%TYPE;
V_CDENCARGO              ENCARGO.CDENCARGO%TYPE;
V_NMENCARGONFE           ENCARGONFE.NMENCARGONFE%TYPE;
V_VRIMPOSTO              FLOAT := 0;
V_QTTOTAL_ITENS          FLOAT := 0;
V_VRENCARGO              FLOAT := 0;
V_VRCOMISSOES            FLOAT := 0;
V_VRDESPESA              FLOAT := 0;
V_PERC_SOBRE_RECBRUTA    FLOAT := 0;
V_VR_REC_BRUTA           FLOAT := 0;
V_RATEIO_QT              FLOAT;
V_RATEIO_VR              FLOAT;
V_QTMETAVENDA            FLOAT;
V_VRMETAVENDA            FLOAT;

V_QRY_RESUMO_GERAL       VARCHAR2(5000);
V_QRY_RESUMO_MACROREG    VARCHAR2(5000);
V_QRY_RESUMO             VARCHAR2(5000);
V_QRY                    VARCHAR2(5000);
V_COMANDO                VARCHAR2(5000);
V_TIPO_DESPESA           VARCHAR2(50);
TYPE CURTYPE             IS REF CURSOR;
CUR_RESUMO               CURTYPE;

TYPE TYPE_RECORD_ARRAY IS RECORD(
ORD_ITEM       NUMBER, 
DSITEM         VARCHAR2(50),
DSFORMULA      VARCHAR2(5000));

TYPE TYPE_TABLE_RECORD IS TABLE OF TYPE_RECORD_ARRAY INDEX BY PLS_INTEGER;
V_ARRAY_ESTRUTURA TYPE_TABLE_RECORD;

CURSOR C_DADOS_ESTRUTURA IS
SELECT 1 ORD_ITEM, 'Receita Bruta' AS DSITEM, 'NVL(SUM(VR_BRUTITEM),0)' AS DSFORMULA 
  FROM DUAL
 UNION 
SELECT 2 ORD_ITEM, '(-)Deduções' AS DSITEM, 'NVL(SUM(VR_FECP),0) + NVL(SUM(VR_IPI),0) + NVL(SUM(VR_ICMS),0) + NVL(SUM(VR_ICMSST),0) + NVL(SUM(VR_PIS),0) + NVL(SUM(VR_COFINS),0)' AS DSFORMULA 
  FROM DUAL
 UNION
SELECT 3 ORD_ITEM, '(-)Incentivos' AS DSITEM, '0' AS DSFORMULA 
--SELECT 3 ORD_ITEM, '(-)Incentivos' AS DSITEM, 'NVL(SUM(VALOR_DESPESA('||CHR(39)||C_NRORG||CHR(39)||' , '||CHR(39)||C_ORDANOMES||CHR(39)||', '||CHR(39)||C_CDMACROREGIAO||CHR(39)||', '||CHR(39)||C_CDMICROREGIAO||CHR(39)||', '||CHR(39)||'VRINCENTIVOS'||CHR(39)||')),0)' AS DSFORMULA 
  FROM DUAL
 UNION
SELECT 4 ORD_ITEM, '(-)Seguro' AS DSITEM, 'NVL(SUM(VR_SEGURO),0)' AS DSFORMULA 
  FROM DUAL
 UNION
SELECT 5 ORD_ITEM, '(-)Frete' AS DSITEM, '0' AS DSFORMULA 
--SELECT 5 ORD_ITEM, '(-)Frete' AS DSITEM, 'NVL(SUM(VALOR_DESPESA('||CHR(39)||C_NRORG||CHR(39)||' , '||CHR(39)||C_ORDANOMES||CHR(39)||', '||CHR(39)||C_CDMACROREGIAO||CHR(39)||', '||CHR(39)||C_CDMICROREGIAO||CHR(39)||', '||CHR(39)||'VRFRETE'||CHR(39)||')),0)' AS DSFORMULA 
  FROM DUAL
 UNION
SELECT 6 ORD_ITEM, '(-)Comissões' AS DSITEM, 'NVL(SUM(VR_COMISSOES),0)' AS DSFORMULA 
  FROM DUAL 
 UNION
SELECT 7 ORD_ITEM, '(=)Receita Líquida' AS DSITEM, '(NVL(SUM(VR_BRUTITEM),0)-(NVL(SUM(VR_FECP),0) + NVL(SUM(VR_IPI),0) + NVL(SUM(VR_SEGURO),0) + 0 + NVL(SUM(VR_ICMS),0) + NVL(SUM(VR_ICMSST),0) + NVL(SUM(VR_PIS),0) + NVL(SUM(VR_COFINS),0) + NVL(SUM(VR_COMISSOES),0)))' AS DSFORMULA 
--SELECT 7 ORD_ITEM, '(=)Receita Líquida' AS DSITEM, '(NVL(SUM(VR_BRUTITEM),0)-(NVL(SUM(VR_FECP),0) + NVL(SUM(VR_IPI),0) + NVL(SUM(VR_SEGURO),0) + NVL(SUM(VALOR_DESPESA('||CHR(39)||C_NRORG||CHR(39)||' , '||CHR(39)||C_ORDANOMES||CHR(39)||', '||CHR(39)||C_CDMACROREGIAO||CHR(39)||', '||CHR(39)||C_CDMICROREGIAO||CHR(39)||', '||CHR(39)||'VRFRETE'||CHR(39)||')),0) + NVL(SUM(VR_ICMS),0) + NVL(SUM(VR_ICMSST),0) + NVL(SUM(VR_PIS),0) + NVL(SUM(VR_COFINS),0) + NVL(SUM(VR_COMISSOES),0)))' AS DSFORMULA 
  FROM DUAL
 UNION
SELECT 8 ORD_ITEM, '(-)Custo Variável' AS DSITEM, 'NVL(SUM(VR_CUSTO_VARIAVEL),0)' AS DSFORMULA 
  FROM DUAL
 UNION
SELECT 9 ORD_ITEM, '(-)Marketing' AS DSITEM, '0' AS DSFORMULA  
--SELECT 9 ORD_ITEM, '(-)Marketing' AS DSITEM, 'NVL(SUM(VALOR_DESPESA('||CHR(39)||C_NRORG||CHR(39)||' , '||CHR(39)||C_ORDANOMES||CHR(39)||', '||CHR(39)||C_CDMACROREGIAO||CHR(39)||', '||CHR(39)||C_CDMICROREGIAO||CHR(39)||', '||CHR(39)||'VRMARKETING'||CHR(39)||')),0)' AS DSFORMULA  
  FROM DUAL
 UNION
SELECT 10 ORD_ITEM, '(-)Despesas' AS DSITEM, '0' AS DSFORMULA  
--SELECT 9 ORD_ITEM, '(-)Marketing' AS DSITEM, 'NVL(SUM(VALOR_DESPESA('||CHR(39)||C_NRORG||CHR(39)||' , '||CHR(39)||C_ORDANOMES||CHR(39)||', '||CHR(39)||C_CDMACROREGIAO||CHR(39)||', '||CHR(39)||C_CDMICROREGIAO||CHR(39)||', '||CHR(39)||'VRMARKETING'||CHR(39)||')),0)' AS DSFORMULA  
  FROM DUAL  
 UNION
SELECT 11 ORD_ITEM, '(=)Lucro Bruto' AS DSITEM, '((NVL(SUM(VR_BRUTITEM),0)-(NVL(SUM(VR_FECP),0) + NVL(SUM(VR_IPI),0) + NVL(SUM(VR_SEGURO),0) + 0 + NVL(SUM(VR_ICMS),0) + NVL(SUM(VR_ICMSST),0) + NVL(SUM(VR_PIS),0) + NVL(SUM(VR_COFINS),0) + NVL(SUM(VR_COMISSOES),0))))-NVL(SUM(VR_CUSTO_VARIAVEL),0)- 0' AS DSFORMULA 
--SELECT 10 ORD_ITEM, '(=)Lucro Bruto' AS DSITEM, '((NVL(SUM(VR_BRUTITEM),0)-(NVL(SUM(VR_FECP),0) + NVL(SUM(VR_IPI),0) + NVL(SUM(VR_SEGURO),0) + NVL(SUM(VALOR_DESPESA('||CHR(39)||C_NRORG||CHR(39)||' , '||CHR(39)||C_ORDANOMES||CHR(39)||', '||CHR(39)||C_CDMACROREGIAO||CHR(39)||', '||CHR(39)||C_CDMICROREGIAO||CHR(39)||', '||CHR(39)||'VRFRETE'||CHR(39)||')),0) + NVL(SUM(VR_ICMS),0) + NVL(SUM(VR_ICMSST),0) + NVL(SUM(VR_PIS),0) + NVL(SUM(VR_COFINS),0) + NVL(SUM(VR_COMISSOES),0))))-NVL(SUM(VR_CUSTO_VARIAVEL),0)-NVL(SUM(VALOR_DESPESA('||CHR(39)||C_NRORG||CHR(39)||' , '||CHR(39)||C_ORDANOMES||CHR(39)||', '||CHR(39)||C_CDMACROREGIAO||CHR(39)||', '||CHR(39)||C_CDMICROREGIAO||CHR(39)||', '||CHR(39)||'VRMARKETING'||CHR(39)||')),0)' AS DSFORMULA 
  FROM DUAL;


CURSOR C_DATA (C_START_DATE IN DATE, C_END_DATE IN DATE)IS
SELECT TO_CHAR(DTMES,'YYYY') AS DSANO,
       TO_CHAR(TRUNC((TO_CHAR(DTMES,'MM') - 1) / 6) + 1)||CHR(186)||' Sem' AS DSSEMESTRE,
       TO_CHAR(TRUNC((TO_CHAR(DTMES,'MM') - 1) / 4) + 1)||CHR(186)||' Qua' AS DSQUADRIMESTRE,
       TO_CHAR(TRUNC((TO_CHAR(DTMES,'MM') - 1) / 3) + 1)||CHR(186)||' Tri' AS DSTRIMESTRE,
       TO_CHAR(TRUNC((TO_CHAR(DTMES,'MM') - 1) / 2) + 1)||CHR(186)||' Bim' AS DSBIMESTRE,
       TO_CHAR(DTMES,'MM') AS DSMES,
       TO_CHAR(DTMES,'MM')||'/'||TO_CHAR(DTMES,'YYYY') AS DSMES_ANO,
       TO_CHAR(DTMES,'YYYY')||TO_CHAR(DTMES,'MM') AS ORDANOMES,       
       DTMES INI_DT,
       LAST_DAY(DTMES)FIM_DT
  FROM DATA
 WHERE DTDATA BETWEEN C_START_DATE AND C_END_DATE
 GROUP BY DTMES
 ORDER BY DTMES;

CURSOR C_RECEITA_MENSAL (C_START_DATE IN DATE, C_END_DATE IN DATE)IS
SELECT SUM(VRSEGURO) AS VRSEGURO, 
       SUM(VRFRETE) AS VRFRETE, 
       SUM(VRINCENTIVOS) AS VRINCENTIVOS, 
       SUM(VRMARKETING) AS VRMARKETING, 
       SUM(VRDESPESAS) AS VRDESPESAS, 
       SUM(VR_CUSTO_VARIAVEL) AS VR_CUSTO_VARIAVEL, 
       SUM(QT_PRODUTO) AS QT_PRODUTO, 
       SUM(VR_BRUTITEM) AS VR_BRUTITEM, 
       SUM(VR_FECP) AS VR_FECP, 
       SUM(VR_IPI) AS VR_IPI, 
       SUM(VR_ICMS) AS VR_ICMS, 
       SUM(VR_ICMSST) AS VR_ICMSST, 
       SUM(VR_PIS) AS VR_PIS, 
       SUM(VR_COFINS) AS VR_COFINS, 
       SUM(VR_COMISSOES) AS VR_COMISSOES
  FROM FAT_ANALISE_RESULTADO
 WHERE DSDATA BETWEEN C_START_DATE AND C_END_DATE
 GROUP BY NRORG, DSDATA, DSANO, DSSEMESTRE, DSTRIMESTRE, DSBIMESTRE, DSQUADRIMESTRE, DSMES, DSMES_ANO, ORDANOMES;

CURSOR C_FAT_PEDIDO(C_IDENTRSAIDOP IN VARCHAR2, C_IDSTATUSNFE IN VARCHAR2, C_CDTIPOOPER IN VARCHAR, C_CDGRUPPROD IN VARCHAR, C_START_DATE IN DATE, C_END_DATE IN DATE) IS
SELECT IT.DTEMISSAO,
	      IT.NRLANCTONF,
       IT.CDFILIALNF,
       IT.NRNOTAFISC,
       IT.CDEMPRESA,
       IT.NMEMPRESA,
       IT.NMRAZSOCEMPR,
	      IT.CDMACROREGIAO,
	      IT.NMMACROREGIAO,
       IT.CDMICROREGIAO,
       IT.NMMICROREGIAO,
       IT.CDVENDEDOR,
       IT.NMVENDEDOR,
       IT.SGESTADO,
       IT.NMESTADO,
       IT.CDMUNICIPIO,
       IT.NMMUNICIPIO,
       IT.CDFILIAL,
       IT.NMFILIAL,       
       IT.CDCLIENTE,
       IT.NMRAZSOCCLIE,
       IT.NMFANTCLIE,
       IT.NRINSJURCLIE,
       IT.CDSEGMER,
       NVL(IT.DSSEGMER,'SEM CADASTRO') AS DSSEGMER,
       IT.CDGRUPCLIE,
       NVL(IT.NMGRUPCLIE,'SEM CADASTRO') AS NMGRUPCLIE,
       IT.CDATIVCLI,
       NVL(IT.DSATIVCLI,'SEM CADASTRO') AS DSATIVCLI, 
       IT.CDGRUPPROD, 
       NVL(IT.NMGRUPPROD,'SEM CADASTRO') AS NMGRUPPROD, 
       IT.CDSUBGRPROD, 
       NVL(IT.NMSUBGRPROD,'SEM CADASTRO') AS NMSUBGRPROD,
       IT.CDPRODUTO,
       IT.CDARVPROD,
       IT.NMPRODUTO,
       IT.QT_PRODUTO,
       IT.VR_BRUTITEM,
       IT.QT_METAVENDA AS QT_OBJETIVO_FIS, 
       IT.VR_METAVENDA AS QT_OBJETIVO_FIN,
       IT.QTTOTAL_ITENS,
       IT.VR_CUSTO_PROD AS VR_CUSTO_VARIAVEL,
       IT.NRSEQITPROD,
       IT.NRPEDIDO,
       IT.NRITEMPED
     FROM (SELECT EM.CDEMPRESA,
                  EM.NMEMPRESA,
                  EM.NMRAZSOCEMPR,
                  MACROREG.CDMACROREGIAO,
				              NVL(MACROREG.NMMACROREGIAO,'SEM CADASTRO') NMMACROREGIAO,
				              REGPED.CDREGIAOPED AS CDMICROREGIAO,
                  REGPED.NMREGIAOPED AS NMMICROREGIAO,
                  VE.CDVENDEDOR,
                  VE.NMFANVEN AS NMVENDEDOR,
                  E.SGESTADO,
                  E.NMESTADO,
                  M.CDMUNICIPIO,
                  M.NMMUNICIPIO,
                  FIL.CDFILIAL,
                  FIL.NMFILIAL,
                  CLI.CDCLIENTE,
                  CLI.NMRAZSOCCLIE,
                  CLI.NMFANTCLIE,
                  CLI.NRINSJURCLIE,
                  S.CDSEGMER,
                  S.DSSEGMER,
                  G.CDGRUPCLIE,
                  G.NMGRUPCLIE,
                  A.CDATIVCLI,
                  A.DSATIVCLI,
                  GRUPO_PROD.CDGRUPPROD, 
                  GRUPO_PROD.NMGRUPPROD, 
                  GRUPO_PROD.CDSUBGRPROD, 
                  GRUPO_PROD.NMSUBGRPROD,
                  P.CDPRODUTO,
                  P.CDARVPROD,
                  P.NMPRODUTO,
                  I.QTITEMPROD AS QT_PRODUTO,
                  I.VRBRUTITEM AS VR_BRUTITEM,
                  (MVD.QTMETAVENDA/DECODE(SUM(1) OVER (PARTITION BY VE.CDVENDEDOR, P.CDPRODUTO, CLI.CDCLIENTE, TO_CHAR(NF.DTEMISSAO,'YYYYMM')),0,1,SUM(1) OVER (PARTITION BY VE.CDVENDEDOR, P.CDPRODUTO, CLI.CDCLIENTE, TO_CHAR(NF.DTEMISSAO,'YYYYMM')))) AS QT_METAVENDA,
                  (MVD.VRMETAVENDA/DECODE(SUM(1) OVER (PARTITION BY VE.CDVENDEDOR, P.CDPRODUTO, CLI.CDCLIENTE, TO_CHAR(NF.DTEMISSAO,'YYYYMM')),0,1,SUM(1) OVER (PARTITION BY VE.CDVENDEDOR, P.CDPRODUTO, CLI.CDCLIENTE, TO_CHAR(NF.DTEMISSAO,'YYYYMM')))) AS VR_METAVENDA,
                  CUSTO_PRODUTO(FIL.CDFILIAL,P.CDPRODUTO,(SELECT NVL(CDTIPCUSTEST,'03') FROM PARAMFILIAL WHERE CDFILIAL = FIL.CDFILIAL), NF.DTEMISSAO,SYSDATE)*I.QTITEMPROD AS VR_CUSTO_PROD,
                  TOTITEM.QTTOTAL_ITENS,
                  NF.DTEMISSAO,
				              NF.NRLANCTONF,
                  NF.CDFILIAL AS CDFILIALNF,
                  NF.NRNOTAFISC,
                  I.NRSEQITPROD,
                  PED.NRPEDIDO,
                  ITP.NRITEMPED
             FROM NOTAFISCAL NF

                  LEFT JOIN (SELECT CL.NRINSJURCLIE, CL.CDCLIENTE, ENCLI.SGESTADO AS SGEST, CL.CDREGIAOPED, ENCLI.CDMUNICIPIO, CL.NMFANTCLIE, CL.NMRAZSOCCLIE,
                                    CL.CDSEGMER, CL.CDGRUPCLIE, CL.CDATIVCLI , ENCLI.CDPAIS, CL.CDCENTCUSTCLI, SUBSTR(CL.CDCENTCUSTCLI,1,3) CDMACROREGIAO
                               FROM CLIENTE CL, ENDECLIE ENCLI, MUNICIPIO MUN
                              WHERE CL.CDCLIENTE = ENCLI.CDCLIENTE
                                AND ENCLI.CDPAIS = MUN.CDPAIS
                                AND ENCLI.SGESTADO = MUN.SGESTADO
                                AND ENCLI.CDMUNICIPIO = MUN.CDMUNICIPIO
                                AND ENCLI.IDTPENDECLIE = 'P') CLI
                    ON CLI.CDCLIENTE = NF.CDCLIENTE

                  LEFT JOIN (SELECT CL.NRINSJURFORN, CL.CDFORNECED, ENCLI.SGESTADO AS SGEST, ENCLI.CDMUNICIPIO, ENCLI.CDPAIS
                               FROM FORNECEDOR CL, ENDEFORN ENCLI, MUNICIPIO MUN
                              WHERE CL.CDFORNECED = ENCLI.CDFORNECED
                                AND ENCLI.CDPAIS = MUN.CDPAIS
                                AND ENCLI.SGESTADO = MUN.SGESTADO
                                AND ENCLI.CDMUNICIPIO = MUN.CDMUNICIPIO
                                AND ENCLI.IDTPENDEFORN = 'P') FORN
                    ON FORN.CDFORNECED = NF.CDFORNECED

                  LEFT JOIN (SELECT CL.NRINSJURFILI, CL.CDFILIAL, ENCLI.SGESTADO AS SGEST, ENCLI.CDMUNICIPIO, CL.NMFILIAL, ENCLI.CDPAIS
                               FROM FILIAL CL, ENDEFILI ENCLI, MUNICIPIO MUN
                              WHERE CL.CDFILIAL = ENCLI.CDFILIAL
                                AND ENCLI.CDPAIS = MUN.CDPAIS
                                AND ENCLI.SGESTADO = MUN.SGESTADO
                                AND ENCLI.CDMUNICIPIO = MUN.CDMUNICIPIO
                                AND ENCLI.IDTPENDEFILI = 'P') FIL
                    ON FIL.CDFILIAL = NF.CDFILIEMIT

                 INNER JOIN ITEMPRODUTO I
                    ON I.CDFILIAL = NF.CDFILIAL
                   AND I.NRLANCTONF = NF.NRLANCTONF

				             INNER JOIN (SELECT CDFILIAL, NRLANCTONF, COUNT(1) AS QTTOTAL_ITENS 
				                           FROM ITEMPRODUTO
							                       GROUP BY CDFILIAL, NRLANCTONF) TOTITEM
                    ON TOTITEM.CDFILIAL = NF.CDFILIAL
                   AND TOTITEM.NRLANCTONF = NF.NRLANCTONF	                   

                 INNER JOIN EMPRESA EM
			                 ON EM.CDEMPRESA = NF.CDEMPRESA

                 LEFT JOIN REGIAOPED REGPED
                   ON REGPED.CDREGIAOPED = CLI.CDREGIAOPED

                 LEFT JOIN MACROREGIAO MACROREG
                   ON MACROREG.CDMACROREGIAO = REGPED.CDMACROREGIAO

                  LEFT JOIN ITEMPEDIDO ITP
                    ON ITP.CDFILIAL = I.CDFILIALPED
                   AND ITP.NRPEDIDO = I.NRPEDIDO
                   AND ITP.NRITEMPED = I.NRITEMPED

                  LEFT JOIN PEDIDO PED
                    ON PED.CDFILIAL = ITP.CDFILIAL
                   AND PED.NRPEDIDO = ITP.NRPEDIDO

                  LEFT JOIN VENDEDOR VE
                    ON VE.CDVENDEDOR = PED.CDVENDEDOR

                  LEFT JOIN (SELECT MVD.CDVENDEDOR, PMV.CDPRODUTO, MVD.CDMETAVENDA, MV.NMMETAVENDA, MVD.DTINIMETVEND, MVD.DTFINMETAVEND, NVL(MVD.QTMETAVENDA,0) AS QTMETAVENDA, NVL(MVD.VRMETAVENDA,0) AS VRMETAVENDA
                               FROM METAVENDEDOR MVD, METAVENDA MV, PRODMETAVEND PMV
                              WHERE MVD.CDMETAVENDA = MV.CDMETAVENDA
                                AND MV.CDMETAVENDA = PMV.CDMETAVENDA
                                AND ((DTINIMETVEND BETWEEN C_START_DATE AND C_END_DATE) OR (DTFINMETAVEND BETWEEN C_START_DATE AND C_END_DATE))) MVD
                    ON MVD.CDVENDEDOR = VE.CDVENDEDOR
                   AND MVD.CDPRODUTO = I.CDPRODUTO                                   

                  LEFT JOIN ESTADO E
                    ON E.CDPAIS = DECODE(NVL(NF.IDORIGDESTNF, 'C'), 'C', CLI.CDPAIS, DECODE(IDORIGDESTNF, 'L', FIL.CDPAIS, FORN.CDPAIS))
                   AND E.SGESTADO = DECODE(NVL(NF.IDORIGDESTNF, 'C'), 'C', CLI.SGEST, DECODE(IDORIGDESTNF, 'L', FIL.SGEST, FORN.SGEST))

                  LEFT JOIN MUNICIPIO M
                    ON M.CDPAIS = DECODE(NVL(NF.IDORIGDESTNF, 'C'), 'C', CLI.CDPAIS, DECODE(IDORIGDESTNF, 'L', FIL.CDPAIS, FORN.CDPAIS))
                   AND M.SGESTADO = DECODE(NVL(NF.IDORIGDESTNF, 'C'), 'C', CLI.SGEST, DECODE(IDORIGDESTNF, 'L', FIL.SGEST, FORN.SGEST))
                   AND M.CDMUNICIPIO = DECODE(NVL(NF.IDORIGDESTNF, 'C'), 'C', CLI.CDMUNICIPIO, DECODE(IDORIGDESTNF, 'L', FIL.CDMUNICIPIO, FORN.CDMUNICIPIO))

                  LEFT JOIN SEGMERCADO S
                    ON S.CDSEGMER = CLI.CDSEGMER

                  LEFT JOIN GRUPCLIE G
                    ON G.CDGRUPCLIE = CLI.CDGRUPCLIE

                  LEFT JOIN ATIVCLIENTE A
                    ON A.CDATIVCLI = CLI.CDATIVCLI

                 INNER JOIN PRODUTO P
                    ON P.CDPRODUTO = I.CDPRODUTO

                  LEFT JOIN (SELECT GRUPPROD.CDGRUPPROD, GRUPPROD.NMGRUPPROD, SUBGRUPPROD.CDSUBGRPROD, SUBGRUPPROD.NMSUBGRPROD, PRSUBGRPROD.CDPRODUTO
                               FROM GRUPPROD, SUBGRUPPROD, PRSUBGRPROD
                              WHERE PRSUBGRPROD.CDSUBGRPROD = SUBGRUPPROD.CDSUBGRPROD
                                AND GRUPPROD.CDGRUPPROD = SUBGRUPPROD.CDGRUPPROD
                                AND GRUPPROD.CDGRUPPROD = C_CDGRUPPROD)GRUPO_PROD
                    ON GRUPO_PROD.CDPRODUTO = I.CDPRODUTO 

            WHERE NF.IDENTRSAIDOP = C_IDENTRSAIDOP
              AND NF.IDSTATUSNFE  = 'A'
			           AND (INSTR(C_CDTIPOOPER, NF.CDTIPOOPER) > 0)
              AND NF.DTEMISSAO BETWEEN C_START_DATE AND C_END_DATE
          )IT
			ORDER BY IT.DTEMISSAO DESC;

CURSOR C_ROMANEIO_NF(C_IDENTRSAIDOP IN VARCHAR2, C_IDSTATUSNFE IN VARCHAR2, C_CDGRUPPROD IN VARCHAR, C_START_DATE IN DATE, C_END_DATE IN DATE) IS
SELECT IT.DTEMISSAO,
	      IT.NRLANCTONF,
       IT.CDFILIALNF,
       IT.NRNOTAFISC,
       IT.CDTIPOOPER,
       IT.NMTIPOOPER,
       IT.CDEMPRESA,
       IT.NMEMPRESA,
       IT.NMRAZSOCEMPR,
	      IT.CDMACROREGIAO,
	      IT.NMMACROREGIAO,
       IT.CDMICROREGIAO,
       IT.NMMICROREGIAO,
       IT.CDVENDEDOR,
       IT.NMVENDEDOR,
       IT.SGESTADO,
       IT.NMESTADO,
       IT.CDMUNICIPIO,
       IT.NMMUNICIPIO,
       IT.CDFILIAL,
       IT.NMFILIAL,       
       IT.CDCLIENTE,
       IT.NMRAZSOCCLIE,
       IT.NMFANTCLIE,
       IT.NRINSJURCLIE,
       IT.CDSEGMER,
       NVL(IT.DSSEGMER,'SEM CADASTRO') AS DSSEGMER,
       IT.CDGRUPCLIE,
       NVL(IT.NMGRUPCLIE,'SEM CADASTRO') AS NMGRUPCLIE,
       IT.CDATIVCLI,
       NVL(IT.DSATIVCLI,'SEM CADASTRO') AS DSATIVCLI, 
       IT.CDGRUPPROD, 
       NVL(IT.NMGRUPPROD,'SEM CADASTRO') AS NMGRUPPROD, 
       IT.CDSUBGRPROD, 
       NVL(IT.NMSUBGRPROD,'SEM CADASTRO') AS NMSUBGRPROD,
       IT.CDPRODUTO,
       IT.CDARVPROD,
       IT.NMPRODUTO,
       IT.QT_PRODUTO,
       IT.VR_BRUTITEM,
       IT.QT_METAVENDA AS QT_OBJETIVO_FIS, 
       IT.VR_METAVENDA AS QT_OBJETIVO_FIN,
       IT.QTTOTAL_ITENS,
       IT.VR_CUSTO_PROD AS VR_CUSTO_VARIAVEL,
       IT.NRSEQITPROD,
       IT.NRPEDIDO
     FROM (SELECT EM.CDEMPRESA,
                  EM.NMEMPRESA,
                  EM.NMRAZSOCEMPR,
                  MACROREG.CDMACROREGIAO,
				              NVL(MACROREG.NMMACROREGIAO, 'SEM CADASTRO') AS NMMACROREGIAO,
				              REGPED.CDREGIAOPED AS CDMICROREGIAO,
                  REGPED.NMREGIAOPED AS NMMICROREGIAO,
                  VE.CDVENDEDOR,
                  VE.NMFANVEN AS NMVENDEDOR,
                  E.SGESTADO,
                  E.NMESTADO,
                  M.CDMUNICIPIO,
                  M.NMMUNICIPIO,
                  FIL.CDFILIAL,
                  FIL.NMFILIAL,
                  CLI.CDCLIENTE,
                  CLI.NMRAZSOCCLIE,
                  CLI.NMFANTCLIE,
                  CLI.NRINSJURCLIE,
                  S.CDSEGMER,
                  S.DSSEGMER,
                  G.CDGRUPCLIE,
                  G.NMGRUPCLIE,
                  A.CDATIVCLI,
                  A.DSATIVCLI,
                  GRUPO_PROD.CDGRUPPROD, 
                  GRUPO_PROD.NMGRUPPROD, 
                  GRUPO_PROD.CDSUBGRPROD, 
                  GRUPO_PROD.NMSUBGRPROD,
                  P.CDPRODUTO,
                  P.CDARVPROD,
                  P.NMPRODUTO,
                  I.QTITEMPROD AS QT_PRODUTO,
                  I.VRBRUTITEM AS VR_BRUTITEM,
                  (MVD.QTMETAVENDA/RETORNA_DIA_UTIL(FIL.CDFILIAL, C_START_DATE, C_END_DATE)) AS QT_METAVENDA, 
                  (MVD.VRMETAVENDA/RETORNA_DIA_UTIL(FIL.CDFILIAL, C_START_DATE, C_END_DATE)) AS VR_METAVENDA,
                  CUSTO_PRODUTO(FIL.CDFILIAL,P.CDPRODUTO,(SELECT NVL(CDTIPCUSTEST,'03') FROM PARAMFILIAL WHERE CDFILIAL = FIL.CDFILIAL), NF.DTEMISSAO,SYSDATE)*I.QTITEMPROD AS VR_CUSTO_PROD,
                  TOTITEM.QTTOTAL_ITENS,
                  NF.DTEMISSAO,
				              NF.NRLANCTONF,
                  NF.CDFILIAL AS CDFILIALNF,
                  NF.NRNOTAFISC,
                  I.NRSEQITPROD,
                  PED.NRPEDIDO,
                  TOPER.CDTIPOOPER,
                  TOPER.NMTIPOOPER
             FROM NOTAFISCAL NF

                  LEFT JOIN (SELECT CL.NRINSJURCLIE, CL.CDCLIENTE, ENCLI.SGESTADO AS SGEST, CL.CDREGIAOPED, ENCLI.CDMUNICIPIO, CL.NMFANTCLIE, CL.NMRAZSOCCLIE,
                                    CL.CDSEGMER, CL.CDGRUPCLIE, CL.CDATIVCLI , ENCLI.CDPAIS, CL.CDCENTCUSTCLI, SUBSTR(CL.CDCENTCUSTCLI,1,3) CDMACROREGIAO
                               FROM CLIENTE CL, ENDECLIE ENCLI, MUNICIPIO MUN
                              WHERE CL.CDCLIENTE = ENCLI.CDCLIENTE
                                AND ENCLI.CDPAIS = MUN.CDPAIS
                                AND ENCLI.SGESTADO = MUN.SGESTADO
                                AND ENCLI.CDMUNICIPIO = MUN.CDMUNICIPIO
                                AND ENCLI.IDTPENDECLIE = 'P') CLI
                    ON CLI.CDCLIENTE = NF.CDCLIENTE

                  LEFT JOIN (SELECT CL.NRINSJURFORN, CL.CDFORNECED, ENCLI.SGESTADO AS SGEST, ENCLI.CDMUNICIPIO, ENCLI.CDPAIS
                               FROM FORNECEDOR CL, ENDEFORN ENCLI, MUNICIPIO MUN
                              WHERE CL.CDFORNECED = ENCLI.CDFORNECED
                                AND ENCLI.CDPAIS = MUN.CDPAIS
                                AND ENCLI.SGESTADO = MUN.SGESTADO
                                AND ENCLI.CDMUNICIPIO = MUN.CDMUNICIPIO
                                AND ENCLI.IDTPENDEFORN = 'P') FORN
                    ON FORN.CDFORNECED = NF.CDFORNECED

                  LEFT JOIN (SELECT CL.NRINSJURFILI, CL.CDFILIAL, ENCLI.SGESTADO AS SGEST, ENCLI.CDMUNICIPIO, CL.NMFILIAL, ENCLI.CDPAIS
                               FROM FILIAL CL, ENDEFILI ENCLI, MUNICIPIO MUN
                              WHERE CL.CDFILIAL = ENCLI.CDFILIAL
                                AND ENCLI.CDPAIS = MUN.CDPAIS
                                AND ENCLI.SGESTADO = MUN.SGESTADO
                                AND ENCLI.CDMUNICIPIO = MUN.CDMUNICIPIO
                                AND ENCLI.IDTPENDEFILI = 'P') FIL
                    ON FIL.CDFILIAL = NF.CDFILIEMIT

                 INNER JOIN ITEMPRODUTO I
                    ON I.CDFILIAL = NF.CDFILIAL
                   AND I.NRLANCTONF = NF.NRLANCTONF

                 INNER JOIN TIPOOPERAC TOPER
                    ON NF.IDENTRSAIDOP = TOPER.IDENTRSAIDOP
                   AND NF.CDTIPOOPER = TOPER.CDTIPOOPER

				             INNER JOIN (SELECT CDFILIAL, NRLANCTONF, COUNT(1) AS QTTOTAL_ITENS 
				                           FROM ITEMPRODUTO
							                       GROUP BY CDFILIAL, NRLANCTONF) TOTITEM
                    ON TOTITEM.CDFILIAL = NF.CDFILIAL
                   AND TOTITEM.NRLANCTONF = NF.NRLANCTONF	                   

                 INNER JOIN EMPRESA EM
			                 ON EM.CDEMPRESA = NF.CDEMPRESA

                 LEFT JOIN REGIAOPED REGPED
                   ON REGPED.CDREGIAOPED = CLI.CDREGIAOPED

                 LEFT JOIN MACROREGIAO MACROREG
                   ON MACROREG.CDMACROREGIAO = REGPED.CDMACROREGIAO

                  LEFT JOIN ITEMPEDIDO ITP
                    ON ITP.CDFILIAL = I.CDFILIALPED
                   AND ITP.NRPEDIDO = I.NRPEDIDO
                   AND ITP.NRITEMPED = I.NRITEMPED

                  LEFT JOIN PEDIDO PED
                    ON PED.CDFILIAL = ITP.CDFILIAL
                   AND PED.NRPEDIDO = ITP.NRPEDIDO

                  LEFT JOIN VENDEDOR VE
                    ON VE.CDVENDEDOR = PED.CDVENDEDOR

                  LEFT JOIN (SELECT MVD.CDVENDEDOR, PMV.CDPRODUTO, MVD.CDMETAVENDA, MV.NMMETAVENDA, MVD.DTINIMETVEND, MVD.DTFINMETAVEND, NVL(MVD.QTMETAVENDA,0) AS QTMETAVENDA, NVL(MVD.VRMETAVENDA,0) AS VRMETAVENDA
                               FROM METAVENDEDOR MVD, METAVENDA MV, PRODMETAVEND PMV
                              WHERE MVD.CDMETAVENDA = MV.CDMETAVENDA
                                AND MV.CDMETAVENDA = PMV.CDMETAVENDA
                                AND ((DTINIMETVEND BETWEEN C_START_DATE AND C_END_DATE) OR (DTFINMETAVEND BETWEEN C_START_DATE AND C_END_DATE))) MVD
                    ON MVD.CDVENDEDOR = VE.CDVENDEDOR
                   AND MVD.CDPRODUTO = I.CDPRODUTO                                   

                  LEFT JOIN ESTADO E
                    ON E.CDPAIS = DECODE(NVL(NF.IDORIGDESTNF, 'C'), 'C', CLI.CDPAIS, DECODE(IDORIGDESTNF, 'L', FIL.CDPAIS, FORN.CDPAIS))
                   AND E.SGESTADO = DECODE(NVL(NF.IDORIGDESTNF, 'C'), 'C', CLI.SGEST, DECODE(IDORIGDESTNF, 'L', FIL.SGEST, FORN.SGEST))

                  LEFT JOIN MUNICIPIO M
                    ON M.CDPAIS = DECODE(NVL(NF.IDORIGDESTNF, 'C'), 'C', CLI.CDPAIS, DECODE(IDORIGDESTNF, 'L', FIL.CDPAIS, FORN.CDPAIS))
                   AND M.SGESTADO = DECODE(NVL(NF.IDORIGDESTNF, 'C'), 'C', CLI.SGEST, DECODE(IDORIGDESTNF, 'L', FIL.SGEST, FORN.SGEST))
                   AND M.CDMUNICIPIO = DECODE(NVL(NF.IDORIGDESTNF, 'C'), 'C', CLI.CDMUNICIPIO, DECODE(IDORIGDESTNF, 'L', FIL.CDMUNICIPIO, FORN.CDMUNICIPIO))

                  LEFT JOIN SEGMERCADO S
                    ON S.CDSEGMER = CLI.CDSEGMER

                  LEFT JOIN GRUPCLIE G
                    ON G.CDGRUPCLIE = CLI.CDGRUPCLIE

                  LEFT JOIN ATIVCLIENTE A
                    ON A.CDATIVCLI = CLI.CDATIVCLI

                 INNER JOIN PRODUTO P
                    ON P.CDPRODUTO = I.CDPRODUTO

                  LEFT JOIN (SELECT GRUPPROD.CDGRUPPROD, GRUPPROD.NMGRUPPROD, SUBGRUPPROD.CDSUBGRPROD, SUBGRUPPROD.NMSUBGRPROD, PRSUBGRPROD.CDPRODUTO
                               FROM GRUPPROD, SUBGRUPPROD, PRSUBGRPROD
                              WHERE PRSUBGRPROD.CDSUBGRPROD = SUBGRUPPROD.CDSUBGRPROD
                                AND GRUPPROD.CDGRUPPROD = SUBGRUPPROD.CDGRUPPROD
                                AND GRUPPROD.CDGRUPPROD = C_CDGRUPPROD)GRUPO_PROD
                    ON GRUPO_PROD.CDPRODUTO = I.CDPRODUTO 

            WHERE NF.IDENTRSAIDOP = C_IDENTRSAIDOP
              AND NF.IDSTATUSNFE  = 'A'
              AND NF.DTEMISSAO BETWEEN C_START_DATE AND C_END_DATE
          )IT
			ORDER BY IT.DTEMISSAO DESC;   

CURSOR C_IMPOSTO IS
SELECT CDIMPOSTO, SGIMPOSTONFE
  FROM IMPOSTO I, IMPOSTONFE IM
 WHERE I.CDIMPOSTOXML = IM.CDIMPOSTONFE
   AND IM.SGIMPOSTONFE IN ('ICMS','IPI','ISSQN-E','PIS','COFINS', 'II', 'ICMS ST', 'PIS ST', 'COFINS ST','FECP');

CURSOR C_ENCARGO IS   
SELECT E.CDENCARGO, UPPER(EN.NMENCARGONFE) AS NMENCARGONFE
  FROM ENCARGO E, ENCARGONFE EN
 WHERE EN.CDENCARGONFE = E.CDENCARGONFE;

CURSOR C_COMISSAO(C_CDFILIAL IN VARCHAR, C_NRLANCTONF IN VARCHAR, C_CDPRODUTO IN VARCHAR)IS
 SELECT ROUND(BUSCA_BASE_COMISSAO(IT.CDFILIAL,IT.NRLANCTONF, IT.NRSEQITPROD) * ((DECODE(IP.VRDESCCOMISS , null, decode(C.VRDESCCOMISS, null, NVL(VE.VRPECOMITPED, 0), NVL(VE.VRPECOMITPED, 0) - C.VRDESCCOMISS),NVL(VE.VRPECOMITPED, 0))) /100),2) AS VRCOMISSAO 
   FROM NOTAFISCAL NF, ITEMPRODUTO IT,  PEDIDO PE, CLIENTE C,  MODPGTO M, PRODUTO PR, VENDITEMPED VE, ITEMPEDIDO IP, VENDEDOR V, FILIAL F
  WHERE NF.CDFILIAL    = IT.CDFILIAL
    AND NF.NRLANCTONF  = IT.NRLANCTONF
    AND IT.CDFILIALPED = PE.CDFILIAL
    AND IT.NRPEDIDO    = PE.NRPEDIDO
    and NF.CDFILIAL    = C_CDFILIAL
    and NF.NRLANCTONF  = C_NRLANCTONF
    and pr.cdproduto   = C_CDPRODUTO
    AND NF.CDCLIENTE   = C.CDCLIENTE(+)
    AND PE.CDMODPGTO   = M.CDMODPGTO
    AND IT.CDPRODUTO   = PR.CDPRODUTO
    AND IT.CDFILIALPED = VE.CDFILIAL(+)
    AND IT.NRPEDIDO    = VE.NRPEDIDO(+)
    AND IT.NRITEMPED   = VE.NRITEMPED(+)
    AND PE.CDVENDEDOR  = VE.CDVENDEDOR
    AND IT.CDFILIALPED = IP.CDFILIAL
    AND IT.NRPEDIDO    = IP.NRPEDIDO
    AND IT.NRITEMPED   = IP.NRITEMPED
    AND PE.CDVENDEDOR  = V.CDVENDEDOR
    AND NF.CDFILIEMIT  = F.CDFILIAL
  ORDER BY NF.CDCLIENTE, NF.DTEMISSAO, NF.NRNOTAFISC, PR.CDARVPROD; 


CURSOR C_DESPESAS(C_START_DATE IN DATE, C_END_DATE IN DATE) IS
SELECT IT.DTEMISSAO,
       IT.NRLANCTONF,
	      IT.NRNOTAFISC,
       IT.CDEMPRESA,
       IT.NMEMPRESA,
       IT.NMRAZSOCEMPR,
       IT.SGESTADO,
       IT.NMESTADO,
       IT.CDMUNICIPIO,
       IT.NMMUNICIPIO,
       IT.CDFILIAL,
       IT.NMFILIAL,       
       IT.CDCLIENTE,
       IT.NMRAZSOCCLIE,
       IT.NMFANTCLIE,
       IT.NRINSJURCLIE,
	      IT.CDMACROREGIAO,
	      IT.NMMACROREGIAO,
	      IT.CDMICROREGIAO,
	      IT.NMMICROREGIAO,
       IT.CDSEGMER,
       IT.DSSEGMER,
       IT.CDGRUPCLIE,
       IT.NMGRUPCLIE,
       IT.CDATIVCLI,
       IT.DSATIVCLI,	   
       IT.VRFRETE,
       IT.VRINCENTIVOS,
       IT.VRMARKETING,
       IT.VRDESPESAS     
     FROM (SELECT EM.CDEMPRESA,
                  EM.NMEMPRESA,
                  EM.NMRAZSOCEMPR,
                  E.SGESTADO,
                  E.NMESTADO,
                  M.CDMUNICIPIO,
                  M.NMMUNICIPIO,
                  FIL.CDFILIAL,
                  FIL.NMFILIAL,
                  CLI.CDCLIENTE,
                  CLI.NMRAZSOCCLIE,
                  CLI.NMFANTCLIE,
                  CLI.NRINSJURCLIE,
                  NF.VRFRETE,
                  NF.VRINCENTIVOS,
                  NF.VRMARKETING,
                  NF.VRDESPESAS,
                  NF.IDORIGDESTNF,
                  NF.DTEMISSAO,
				              NF.NRLANCTONF,
                  NF.NRNOTAFISC,
                  MACROREG.CDMACROREGIAO,
				              NVL(MACROREG.NMMACROREGIAO,'SEM CADASTRO') AS NMMACROREGIAO,
				              REGPED.CDREGIAOPED AS CDMICROREGIAO,
                  REGPED.NMREGIAOPED AS NMMICROREGIAO,    
                  S.CDSEGMER,
                  S.DSSEGMER,
                  G.CDGRUPCLIE,
                  G.NMGRUPCLIE,
                  A.CDATIVCLI,
                  A.DSATIVCLI
             FROM (SELECT CDFILIAL,
                          CDFILIRECE,
                          CDFILIRAT,
                          NMCENTCUST,
                          CDFORNECED,
                          CDCLIENTE,
                          CDEMPRESA,
                          CDTPCTPAGAR,
                          CDCLASSFINA,
                          DTEMISSAO,
                          IDORIGDESTNF,
                          IDENTRSAIDOP,
						                    NRLANCTONF,
                          NRNOTAFISC,
                          CASE WHEN IDTPDESPESA IN ('FRETE')      THEN SUM(VRBAIXADO) ELSE 0 END AS VRFRETE,
                          CASE WHEN IDTPDESPESA IN ('INCENTIVOS') THEN SUM(VRBAIXADO) ELSE 0 END AS VRINCENTIVOS,
                          CASE WHEN IDTPDESPESA IN ('VMKT')       THEN SUM(VRBAIXADO) ELSE 0 END AS VRMARKETING,
                          CASE WHEN IDTPDESPESA IN ('DESPESAS')   THEN SUM(VRBAIXADO) ELSE 0 END AS VRDESPESAS
                     FROM (SELECT RT.CDFILIAL, RT.CDFILIRECE, RT.CDFILIRAT, RT.NMCENTCUST, RT.CDFORNECED, RT.CDCLIENTE, RT.CDEMPRESA, RT.CDTPCTPAGAR, RT.CDCLASSFINA, 
                                  RT.DTEMISSAO, RT.IDENTRSAIDOP, RT.IDORIGDESTNF, RT.CDCONTCTBL, RT.VRBAIXADO,
                                  CTBL.IDTPDESPESA, RT.NRLANCTONF, RT.NRNOTAFISC
                             FROM (SELECT DISTINCT CP.CDFILIAL,
                                           NF.CDFILIRECE,
                                           RT.CDFIRATCTPAG AS CDFILIRAT,
                                           CC.NMCENTCUST,
                                           CL.CDCENTCUSTCLI,
                                           NF.CDFORNECED,
                                           RTCLI.CDCLIENTE,
                                           CP.CDEMPRESA,
                                           CP.CDTPCTPAGAR,
                                           CP.CDCLASSFINA,
                                           NF.DTEMISSAO,
                                           NF.IDENTRSAIDOP,
                                           NF.IDORIGDESTNF,
                                           TC.CDCONTCTBL,
										                                 NF.NRLANCTONF,
                                           NF.NRNOTAFISC,
                                           (CP.VRORIGPAG * ((RTCLI.VRRATCCCTPAG*100)/CP.VRORIGPAG) /100) AS VRBAIXADO
                                      FROM CONTAPAGAR CP
                                     INNER  JOIN NOTAFISCAL NF
                                        ON CP.CDFILIAL     = NF.CDFILIAL
                                       AND CP.NRLANCTONF   = NF.NRLANCTONF
                                      LEFT JOIN RATCTPAGAR RT
                                        ON RT.CDFILIAL     = CP.CDFILIAL
                                       AND RT.NRLANCTONF   = CP.NRLANCTONF
                                       AND RT.NRPARCELAPAG = CP.NRPARCELAPAG
                                       AND RT.NRSEQVENPAG  = CP.NRSEQVENPAG
                                     INNER JOIN TIPOOPERAC OP
                                        ON OP.CDTIPOOPER   = NF.CDTIPOOPER
                                     INNER JOIN TIPOCTPAGAR TC
                                        ON CP.CDTPCTPAGAR  = TC.CDTPCTPAGAR
                                     INNER JOIN RATCTPAGARCLI RTCLI
                                        ON RT.CDFILIAL     = RTCLI.CDFILIAL
                                       AND RT.NRLANCTONF   = RTCLI.NRLANCTONF
                                       AND RT.NRPARCELAPAG = RTCLI.NRPARCELAPAG
                                       AND RT.NRSEQVENPAG  = RTCLI.NRSEQVENPAG
                                     INNER JOIN CLIENTE CL
                                        ON RTCLI.CDCLIENTE = CL.CDCLIENTE
                                     INNER JOIN CENTCUST CC
                                        ON CL.CDCENTCUSTCLI   = CC.CDCENTCUST                                        
                                     WHERE NF.IDENTRSAIDOP = 'E'
                                       AND NOT(NF.IDSTATUS IN('C','G','P','R'))
                                       AND CP.CDEMPRESA IS NOT NULL
                                       AND CP.VRATUAPAG > 0
                                       AND TRUNC(NF.DTEMISSAO) BETWEEN C_START_DATE AND C_END_DATE

                                       UNION

                                      SELECT DISTINCT NF.CDFILIAL,
                                           NF.CDFILIEMIT,
                                           NF.CDFILIAL AS CDFILIRAT,
                                           CC.NMCENTCUST,
                                           CL.CDCENTCUSTCLI,
                                           NF.CDFORNECED,
                                           NF.CDCLIENTE,
                                           NF.CDEMPRESA,
                                           '' AS CDTPCTPAGAR,
                                           '' AS CDCLASSFINA,
                                           NF.DTEMISSAO,
                                           NF.IDENTRSAIDOP,
                                           NF.IDORIGDESTNF,
                                           NF.CDTIPOOPER AS CDCONTCTBL,
										                                 NF.NRLANCTONF,
                                           NF.NRNOTAFISC,
                                           VRNOTAFISC AS VRBAIXADO 
                                          FROM NOTAFISCAL NF
                                         INNER JOIN CLIENTE CL
                                            ON NF.CDCLIENTE = CL.CDCLIENTE                                           
                                         INNER JOIN CENTCUST CC
                                            ON CL.CDCENTCUSTCLI   = CC.CDCENTCUST                                           
                                         WHERE NF.IDENTRSAIDOP = 'S'
                                           AND TRUNC(NF.DTEMISSAO) BETWEEN C_START_DATE AND C_END_DATE

                                       ) RT

                                       LEFT JOIN (SELECT IDTPDESPESA, CDCONTCTBL 
                                                    FROM PAR_CTB_DESPESAS 
                                                   WHERE IDTPDESPESA = 'FRETE'
                                                   UNION
                                                  SELECT IDTPDESPESA, CDCONTCTBL 
                                                    FROM PAR_CTB_DESPESAS 
                                                   WHERE IDTPDESPESA = 'INCENTIVOS'                                                   
                                                   UNION
                                                  SELECT IDTPDESPESA, CDCONTCTBL 
                                                    FROM PAR_CTB_DESPESAS 
                                                   WHERE IDTPDESPESA = 'VMKT'
                                                   UNION   
                                                  SELECT IDTPDESPESA, CDCONTCTBL 
                                                    FROM PAR_CTB_DESPESAS 
                                                   WHERE IDTPDESPESA = 'DESPESAS')CTBL

                                         ON RT.CDCONTCTBL = CTBL.CDCONTCTBL                                       
                                       )
                            GROUP BY CDFILIAL, CDFILIRECE, CDFILIRAT, NMCENTCUST, CDFORNECED, CDCLIENTE, CDEMPRESA, CDTPCTPAGAR, CDCLASSFINA, DTEMISSAO, 
                                     IDENTRSAIDOP, IDORIGDESTNF, IDTPDESPESA, NRLANCTONF, NRNOTAFISC
                            ) NF

                  LEFT JOIN (SELECT CL.NRINSJURCLIE, CL.CDCLIENTE, ENCLI.SGESTADO AS SGEST, CL.CDREGIAOPED, ENCLI.CDMUNICIPIO, CL.NMFANTCLIE, CL.NMRAZSOCCLIE,
                                    CL.CDSEGMER, CL.CDGRUPCLIE, CL.CDATIVCLI , ENCLI.CDPAIS, CL.CDCENTCUSTCLI, SUBSTR(CL.CDCENTCUSTCLI,1,3) CDMACROREGIAO
                               FROM CLIENTE CL, ENDECLIE ENCLI, MUNICIPIO MUN
                              WHERE CL.CDCLIENTE = ENCLI.CDCLIENTE
                                AND ENCLI.CDPAIS = MUN.CDPAIS
                                AND ENCLI.SGESTADO = MUN.SGESTADO
                                AND ENCLI.CDMUNICIPIO = MUN.CDMUNICIPIO
                                AND ENCLI.IDTPENDECLIE = 'P') CLI
                    ON CLI.CDCLIENTE = NF.CDCLIENTE

                  LEFT JOIN (SELECT CL.NRINSJURFILI, CL.CDFILIAL, ENCLI.SGESTADO AS SGEST, ENCLI.CDMUNICIPIO, CL.NMFILIAL, ENCLI.CDPAIS
                               FROM FILIAL CL, ENDEFILI ENCLI, MUNICIPIO MUN
                              WHERE CL.CDFILIAL = ENCLI.CDFILIAL
                                AND ENCLI.CDPAIS = MUN.CDPAIS
                                AND ENCLI.SGESTADO = MUN.SGESTADO
                                AND ENCLI.CDMUNICIPIO = MUN.CDMUNICIPIO
                                AND ENCLI.IDTPENDEFILI = 'P') FIL
                    ON FIL.CDFILIAL = NF.CDFILIRECE

                 INNER JOIN EMPRESA EM
			                 ON EM.CDEMPRESA = NF.CDEMPRESA

                 LEFT JOIN REGIAOPED REGPED
                   ON REGPED.CDREGIAOPED = CLI.CDREGIAOPED

                 LEFT JOIN MACROREGIAO MACROREG
                   ON MACROREG.CDMACROREGIAO = REGPED.CDMACROREGIAO

                  LEFT JOIN SEGMERCADO S
                    ON S.CDSEGMER = CLI.CDSEGMER

                  LEFT JOIN GRUPCLIE G
                    ON G.CDGRUPCLIE = CLI.CDGRUPCLIE

                  LEFT JOIN ATIVCLIENTE A
                    ON A.CDATIVCLI = CLI.CDATIVCLI                   

                  LEFT JOIN ESTADO E
                    ON E.CDPAIS = CLI.CDPAIS
                   AND E.SGESTADO = CLI.SGEST

                  LEFT JOIN MUNICIPIO M
                    ON M.CDPAIS = CLI.CDPAIS
                   AND M.SGESTADO = CLI.SGEST
                   AND M.CDMUNICIPIO = CLI.CDMUNICIPIO
            ) IT;

CURSOR C_ANALISE_RESULTADO(C_START_DATE IN DATE, C_END_DATE IN DATE) IS
SELECT 
       CDMACROREGIAO, 
       NMMACROREGIAO, 
       CDMICROREGIAO, 
       NMMICROREGIAO,
	      CDVENDEDOR,
	      NMVENDEDOR,
       CDEMPRESA, 
       NMEMPRESA, 
       NMRAZSOCEMPR,
       SGESTADO, 
       NMESTADO, 
       CDMUNICIPIO, 
       NMMUNICIPIO, 
       SUM(VR_SEGURO) AS VRSEGURO, 
       0 AS VRFRETE, 
       0 AS VRINCENTIVOS, 
       0 AS VRMARKETING,
	      0 AS VRDESPESAS,
	      SUM(VR_CUSTO_VARIAVEL) AS VR_CUSTO_VARIAVEL,
	      0 AS QT_OBJETIVO_FIS, 
	      0 AS QT_OBJETIVO_FIN,
	      SUM(QT_PRODUTO)   AS QT_PRODUTO,
       SUM(VR_BRUTITEM)  AS VR_BRUTITEM, 
       SUM(VR_FECP)      AS VR_FECP, 
       SUM(VR_IPI)       AS VR_IPI, 
       SUM(VR_ICMS)      AS VR_ICMS, 
       SUM(VR_ICMSST)    AS VR_ICMSST, 
       SUM(VR_PIS)       AS VR_PIS, 
       SUM(VR_COFINS)    AS VR_COFINS, 
       SUM(VR_COMISSOES) AS VR_COMISSOES 
   FROM FATURAMENTO_PRODVENDIDO
  WHERE DTEMISSAO BETWEEN C_START_DATE AND C_END_DATE
  GROUP BY CDEMPRESA, NMEMPRESA, NMRAZSOCEMPR, 
           CDMACROREGIAO, NMMACROREGIAO, CDMICROREGIAO, NMMICROREGIAO, CDVENDEDOR, NMVENDEDOR, SGESTADO, NMESTADO, CDMUNICIPIO, NMMUNICIPIO
  UNION ALL          
 SELECT 

       CDMACROREGIAO, 
       NMMACROREGIAO, 
       CDMICROREGIAO, 
       NMMICROREGIAO,   
	      '' CDVENDEDOR,
	      '' NMVENDEDOR,	   
        CDEMPRESA, 
        NMEMPRESA, 
        NMRAZSOCEMPR, 
        SGESTADO, 
        NMESTADO, 
        CDMUNICIPIO, 
        NMMUNICIPIO,
        0 AS VRSEGURO, 
        VRFRETE, 
        VRINCENTIVOS, 
        VRMARKETING,
		      VRDESPESAS,
		      0 AS VR_CUSTO_VARIAVEL,
		      0 AS QT_OBJETIVO_FIS, 
		      0 AS QT_OBJETIVO_FIN,
		      0 AS QT_PRODUTO,
        0 AS VR_BRUTITEM, 
        0 AS VR_FECP, 
        0 AS VR_IPI, 
        0 AS VR_ICMS, 
        0 AS VR_ICMSST, 
        0 AS VR_PIS, 
        0 AS VR_COFINS, 
        0 AS VR_COMISSOES
   FROM FATURAMENTO_DESPESACLI
  WHERE DTEMISSAO BETWEEN C_START_DATE AND C_END_DATE; 

CURSOR C_PEDIDOS(C_CDGRUPPROD IN VARCHAR, C_START_DATE IN DATE, C_END_DATE IN DATE) IS    
SELECT P.DTPEDIDO, 
       F.CDFILIAL,
       P.DTENTPED, 
       I.QTITEMPED, 
       I.VRPREUNITPED,
       I.NRPEDIDO,
       PR.CDARVPROD, 
       I.CDPRODUTO, 
       PR.NMPRODUTO,        
       C.CDCLIENTE, 
       C.NMRAZSOCCLIE, 
       C.NMFANTCLIE, 
       F.NMFILIAL,
       S.CDSEGMER,
       S.DSSEGMER,
       G.CDGRUPCLIE,
       G.NMGRUPCLIE,
       A.CDATIVCLI,
       A.DSATIVCLI,
       VE.CDVENDEDOR,
       VE.NMFANVEN AS NMVENDEDOR,
       GRUPO_PROD.CDGRUPPROD, 
       GRUPO_PROD.NMGRUPPROD, 
       GRUPO_PROD.CDSUBGRPROD, 
       GRUPO_PROD.NMSUBGRPROD,  
       C.SGEST,
       C.NMESTADO,
       C.CDMUNICIPIO,
       C.NMMUNICIPIO,

       EM.CDEMPRESA,
       EM.NMEMPRESA,
       EM.NMRAZSOCEMPR,

       MACROREG.CDMACROREGIAO,
				   NVL(MACROREG.NMMACROREGIAO,'SEM CADASTRO') AS NMMACROREGIAO,

       REGPED.CDREGIAOPED AS CDMICROREGIAO,
       REGPED.NMREGIAOPED AS NMMICROREGIAO,


       CASE WHEN IDSITPEDIDO = '1' THEN 'Pendente'
            WHEN IDSITPEDIDO = '2' THEN 'Em Andamento'
            WHEN IDSITPEDIDO = '3' THEN 'Liquidado'
            WHEN IDSITPEDIDO = '4' THEN 'Cancelado'
            WHEN IDSITPEDIDO = '5' THEN 'Liquidação Forçada' 
         ELSE 'Parcialmente Atendido' END IDSITPED

  FROM PEDIDO P 
 INNER JOIN ITEMPEDIDO I
    ON P.CDFILIAL   = I.CDFILIAL
   AND P.NRPEDIDO   = I.NRPEDIDO 

 INNER JOIN PRODUTO PR
    ON PR.CDPRODUTO = I.CDPRODUTO

 INNER JOIN (SELECT CL.NRINSJURCLIE, CL.CDCLIENTE, ENCLI.SGESTADO AS SGEST, E.NMESTADO, CL.CDREGIAOPED, ENCLI.CDMUNICIPIO, MUN.NMMUNICIPIO, CL.NMFANTCLIE, CL.NMRAZSOCCLIE,
                    CL.CDSEGMER, CL.CDGRUPCLIE, CL.CDATIVCLI , ENCLI.CDPAIS, CL.CDCENTCUSTCLI, SUBSTR(CL.CDCENTCUSTCLI,1,3) CDMACROREGIAO
               FROM CLIENTE CL, ENDECLIE ENCLI, MUNICIPIO MUN, ESTADO E
              WHERE CL.CDCLIENTE = ENCLI.CDCLIENTE
                AND ENCLI.CDPAIS = MUN.CDPAIS
                AND ENCLI.SGESTADO = MUN.SGESTADO
                AND ENCLI.CDMUNICIPIO = MUN.CDMUNICIPIO
                AND MUN.CDPAIS = E.CDPAIS
                AND MUN.SGESTADO = E.SGESTADO
                AND ENCLI.IDTPENDECLIE = 'P') C
    ON P.CDCLIENTE  = C.CDCLIENTE

 INNER JOIN FILIAL F
    ON P.CDFILIAL   = F.CDFILIAL

 INNER JOIN EMPRESA EM
	   ON EM.CDEMPRESA = F.CDEMPRESA    

  LEFT JOIN SEGMERCADO S
    ON S.CDSEGMER = C.CDSEGMER

  LEFT JOIN GRUPCLIE G
    ON G.CDGRUPCLIE = C.CDGRUPCLIE 

  LEFT JOIN ATIVCLIENTE A
    ON A.CDATIVCLI = C.CDATIVCLI    

  LEFT JOIN VENDEDOR VE
    ON VE.CDVENDEDOR = P.CDVENDEDOR    

  LEFT JOIN REGIAOPED REGPED
    ON REGPED.CDREGIAOPED = C.CDREGIAOPED   

  LEFT JOIN MACROREGIAO MACROREG
    ON MACROREG.CDMACROREGIAO = REGPED.CDMACROREGIAO   

  LEFT JOIN (SELECT GRUPPROD.CDGRUPPROD, GRUPPROD.NMGRUPPROD, SUBGRUPPROD.CDSUBGRPROD, SUBGRUPPROD.NMSUBGRPROD, PRSUBGRPROD.CDPRODUTO
               FROM GRUPPROD, SUBGRUPPROD, PRSUBGRPROD
              WHERE PRSUBGRPROD.CDSUBGRPROD = SUBGRUPPROD.CDSUBGRPROD
                AND GRUPPROD.CDGRUPPROD = SUBGRUPPROD.CDGRUPPROD
                AND GRUPPROD.CDGRUPPROD = C_CDGRUPPROD)GRUPO_PROD
    ON GRUPO_PROD.CDPRODUTO = I.CDPRODUTO     

 WHERE P.DTPEDIDO BETWEEN C_START_DATE AND C_END_DATE
 ORDER BY F.CDFILIAL, CDCLIENTE, NRPEDIDO, DTPEDIDO, PR.CDARVPROD ;   

CURSOR C_RESULTADO_FAMILIA (C_START_DATE IN DATE, C_END_DATE IN DATE) IS 
SELECT DISTINCT CDEMPRESA, NMEMPRESA, NMRAZSOCEMPR, CDMACROREGIAO, NMMACROREGIAO, CDMICROREGIAO, NMMICROREGIAO, CDVENDEDOR, NMVENDEDOR, 
       SGESTADO, NMESTADO, CDMUNICIPIO, NMMUNICIPIO, CDFILIAL, NMFILIAL, 
       CDCLIENTE, NMRAZSOCCLIE, NMFANTCLIE, NRINSJURCLIE, CDSEGMER, DSSEGMER, CDGRUPCLIE, NMGRUPCLIE, CDATIVCLI, DSATIVCLI, CDPRODUTO
  FROM FATURAMENTO_PRODVENDIDO
 WHERE DSDATA BETWEEN C_START_DATE AND C_END_DATE;

CURSOR C_METAS_NALCANCADA(C_CDGRUPPROD IN VARCHAR, C_START_DATE IN DATE, C_END_DATE IN DATE) IS 
SELECT C_START_DATE AS DTEMISSAO, 
       '' AS NRLANCTONF, 
       '' AS NRNOTAFISC, 
       '' AS CDEMPRESA, 
       '' AS NMEMPRESA, 
       '' AS NMRAZSOCEMPR, 
       'ZMA' AS CDMACROREGIAO, 
       'META NÃO ALCANÇADA' AS NMMACROREGIAO, 
				   REGPED.CDREGIAOPED AS CDMICROREGIAO,
       REGPED.NMREGIAOPED AS NMMICROREGIAO,
       VE.CDVENDEDOR, 
       VE.NMFANVEN AS NMVENDEDOR, 
       '' AS SGESTADO, 
       '' AS NMESTADO, 
       '' AS CDMUNICIPIO, 
       '' AS NMMUNICIPIO, 
       'ZMAR' AS CDFILIAL, 
       'ZMART - META NÃO ALCANÇADA' AS NMFILIAL, 
       '' AS CDCLIENTE, 
       '' AS NMRAZSOCCLIE, 
       '' AS NMFANTCLIE, 
       '' AS NRINSJURCLIE, 
       '' AS CDSEGMER, 
       '' AS DSSEGMER, 
       '' AS CDGRUPCLIE, 
       '' AS NMGRUPCLIE, 
       '' AS CDATIVCLI, 
       '' AS DSATIVCLI, 
       GRUPO_PROD.CDGRUPPROD, 
       GRUPO_PROD.NMGRUPPROD, 
       GRUPO_PROD.CDSUBGRPROD, 
       GRUPO_PROD.NMSUBGRPROD, 
       META.CDPRODUTO, 
       META.CDARVPROD, 
       META.NMPRODUTO, 
       0  AS QT_PRODUTO, 
       0  AS VR_BRUTITEM,
       (META.QTMETAVENDA/DECODE(SUM(1) OVER (PARTITION BY VE.CDVENDEDOR,META.CDPRODUTO),0,1,SUM(1) OVER (PARTITION BY VE.CDVENDEDOR,META.CDPRODUTO))) AS QT_OBJETIVO_FIS, 
       (META.VRMETAVENDA/DECODE(SUM(1) OVER (PARTITION BY VE.CDVENDEDOR,META.CDPRODUTO),0,1,SUM(1) OVER (PARTITION BY VE.CDVENDEDOR,META.CDPRODUTO))) AS QT_OBJETIVO_FIN, 
       0  AS QTTOTAL_ITENS, 
       0  AS VR_CUSTO_VARIAVEL, 
       '' AS NRSEQITPROD, 
       '' AS NRPEDIDO
    FROM VENDEDOR VE

    LEFT JOIN (SELECT MVD.CDVENDEDOR, PMV.CDPRODUTO, MVD.CDMETAVENDA, PR.CDARVPROD, PR.NMPRODUTO, NVL(MVD.QTMETAVENDA,0) AS QTMETAVENDA, NVL(MVD.VRMETAVENDA,0) AS VRMETAVENDA
                 FROM METAVENDEDOR MVD, METAVENDA MV, PRODMETAVEND PMV, PRODUTO PR
                WHERE MVD.CDMETAVENDA = MV.CDMETAVENDA
                  AND MV.CDMETAVENDA  = PMV.CDMETAVENDA
                  AND PMV.CDPRODUTO   = PR.CDPRODUTO
                  AND ((MVD.DTINIMETVEND BETWEEN C_START_DATE AND C_END_DATE) AND (MVD.DTFINMETAVEND BETWEEN C_START_DATE AND C_END_DATE))) META
      ON VE.CDVENDEDOR = META.CDVENDEDOR

   INNER JOIN (SELECT GRUPPROD.CDGRUPPROD, GRUPPROD.NMGRUPPROD, SUBGRUPPROD.CDSUBGRPROD, SUBGRUPPROD.NMSUBGRPROD, PRSUBGRPROD.CDPRODUTO
                 FROM GRUPPROD, SUBGRUPPROD, PRSUBGRPROD
                WHERE PRSUBGRPROD.CDSUBGRPROD = SUBGRUPPROD.CDSUBGRPROD
                  AND GRUPPROD.CDGRUPPROD = SUBGRUPPROD.CDGRUPPROD
                  AND GRUPPROD.CDGRUPPROD = C_CDGRUPPROD)GRUPO_PROD
      ON GRUPO_PROD.CDPRODUTO = META.CDPRODUTO 

    LEFT JOIN REGIAOPEDVEN REGVEND
      ON REGVEND.CDVENDEDOR = VE.CDVENDEDOR

    LEFT JOIN REGIAOPED REGPED
      ON REGVEND.CDREGIAOPED = REGPED.CDREGIAOPED      

   WHERE CDMETAVENDA IS NOT NULL
     AND VE.CDVENDEDOR||META.CDPRODUTO NOT IN (SELECT DISTINCT CDVENDEDOR||CDPRODUTO
                                                 FROM FATURAMENTO_PRODVENDIDO
                                                WHERE DSDATA BETWEEN C_START_DATE AND C_END_DATE);

BEGIN

/*ROTINA DE DATA*/
   OPEN C_DATA(P_DTINI, P_DTFIM);
      LOOP
         FETCH C_DATA INTO V_DSANO, V_DSSEMESTRE, V_DSQUADRIMESTRE, V_DSTRIMESTRE, V_DSBIMESTRE, V_DSMES, V_DSMES_ANO, V_ORDANOMES, V_INI_DT, V_FIM_DT;
         EXIT WHEN C_DATA%NOTFOUND; 

         DELETE FATURAMENTO_PRODVENDIDO
         WHERE DSDATA BETWEEN V_INI_DT AND V_FIM_DT;

         COMMIT;         

         /*ROTINA DE GRAVACAO DO FATURAMENTO*/  
         OPEN C_FAT_PEDIDO('S', 'A', P_TP_OPER_FAT, P_GRUPPROD, V_INI_DT, V_FIM_DT);
            LOOP
               FETCH C_FAT_PEDIDO INTO V_DTEMISSAO, V_NRLANCTONF, V_CDFILIALNF, V_NRNOTAFISC, V_CDEMPRESA, V_NMEMPRESA, V_NMRAZSOCEMPR, V_CDMACROREGIAO, V_NMMACROREGIAO, V_CDMICROREGIAO, V_NMMICROREGIAO, 
                                       V_CDVENDEDOR, V_NMVENDEDOR, V_SGESTADO, V_NMESTADO, V_CDMUNICIPIO, V_NMMUNICIPIO, V_CDFILIAL, V_NMFILIAL, V_CDCLIENTE, V_NMRAZSOCCLIE, V_NMFANTCLIE, 
                                       V_NRINSJURCLIE, V_CDSEGMER, V_DSSEGMER, V_CDGRUPCLIE, V_NMGRUPCLIE, V_CDATIVCLI, V_DSATIVCLI, V_CDGRUPPROD, V_NMGRUPPROD, V_CDSUBGRPROD, V_NMSUBGRPROD, 
                                       V_CDPRODUTO, V_CDARVPROD, V_NMPRODUTO, V_QT_PRODUTO, V_VR_BRUTITEM, V_QT_OBJETIVO_FIS, V_QT_OBJETIVO_FIN, V_QTTOTAL_ITENS, V_VR_CUSTO_VARIAVEL, V_NRSEQITPROD, V_NRPEDIDO, V_NRITEMPED;
               EXIT WHEN C_FAT_PEDIDO%NOTFOUND; 

                  /*IMPOSTO DO PRODUTO*/
                  OPEN C_IMPOSTO;
                     LOOP
                        FETCH C_IMPOSTO INTO V_CDIMPOSTO, V_SGIMPOSTONFE;
                        EXIT WHEN C_IMPOSTO%NOTFOUND; 

                       IF V_SGIMPOSTONFE <> 'FECP' THEN                        
                          BEGIN 
                              SELECT SUM(VRIMPOSTOIT)
                               INTO V_VRIMPOSTO
							                        FROM ITEMPROIMPOS
							                       WHERE CDIMPOSTO   = V_CDIMPOSTO
                                AND CDFILIAL    = V_CDFILIALNF
                                AND NRLANCTONF  = V_NRLANCTONF
                                AND NRSEQITPROD = V_NRSEQITPROD;
                           EXCEPTION
                              WHEN NO_DATA_FOUND THEN
                                 V_VRIMPOSTO := 0;
                           END; 
                        ELSE
                           BEGIN 
                              SELECT SUM(ITEMPROIMPOS.VRADICFECP)
                               INTO V_VRIMPOSTO
							                        FROM ITEMPROIMPOS 
                              INNER JOIN IMPOSTO
                                 ON ITEMPROIMPOS.CDIMPOSTO = IMPOSTO.CDIMPOSTO
                                AND IMPOSTO.CDIMPOSTONFE = '80'
                                AND ITEMPROIMPOS.CDFILIAL    = V_CDFILIALNF
                                AND ITEMPROIMPOS.NRLANCTONF  = V_NRLANCTONF
                                AND ITEMPROIMPOS.NRSEQITPROD = V_NRSEQITPROD;                                
                           EXCEPTION
                              WHEN NO_DATA_FOUND THEN
                                 V_VRIMPOSTO := 0;
                           END;
                        END IF;

                        CASE V_SGIMPOSTONFE
                           WHEN 'ICMS'      THEN V_VR_ICMS       := V_VRIMPOSTO;
                           WHEN 'FECP'      THEN V_VR_FECP       := V_VRIMPOSTO;
                           WHEN 'IPI'       THEN V_VR_IPI        := V_VRIMPOSTO;
                           WHEN 'II'        THEN V_VR_II         := V_VRIMPOSTO;
                           WHEN 'ISSQN-E'   THEN V_VR_ISSQNE     := V_VRIMPOSTO;
                           WHEN 'PIS'       THEN V_VR_PIS        := V_VRIMPOSTO;
                           WHEN 'COFINS'    THEN V_VR_COFINS     := V_VRIMPOSTO;
                           WHEN 'ICMS ST'   THEN V_VR_ICMS_ST    := V_VRIMPOSTO;
                           WHEN 'PIS ST'    THEN V_VR_PIS_ST     := V_VRIMPOSTO;
                           WHEN 'COFINS ST' THEN V_VR_COFINS_ST  := V_VRIMPOSTO;
                        END CASE; 

                  END LOOP;--FIM DO LOOP DE C_IMPOSTO
                  CLOSE C_IMPOSTO;-- CLOSE DO CURSOR C_IMPOSTO  

                  /*ENCARGOS*/
                  OPEN C_ENCARGO;
                     LOOP
                        FETCH C_ENCARGO INTO V_CDENCARGO, V_NMENCARGONFE;
                        EXIT WHEN C_ENCARGO%NOTFOUND; 

                        BEGIN 
                           SELECT SUM(VRITEMENCA) 
                             INTO V_VRENCARGO
				                         FROM ITEMENCARGO
				   	                    WHERE CDENCARGO  = V_CDENCARGO
				   	                      AND CDFILIAL   = V_CDFILIALNF
				                          AND NRLANCTONF = V_NRLANCTONF;
                        EXCEPTION
                           WHEN NO_DATA_FOUND THEN
                              V_VRENCARGO := 0;
                        END;

                        CASE V_NMENCARGONFE
                           WHEN 'FRETE'               THEN V_VRFRETE               := V_VRENCARGO/V_QTTOTAL_ITENS;          
                           WHEN 'SEGURO'              THEN V_VRSEGURO              := V_VRENCARGO/V_QTTOTAL_ITENS;
                           WHEN 'DESCONTOS'           THEN V_VRDESCONTOS           := V_VRENCARGO/V_QTTOTAL_ITENS;
                           WHEN 'OUTRAS DESPESAS'     THEN V_VROUTRAS_DESPESAS     := V_VRENCARGO/V_QTTOTAL_ITENS;
                           WHEN 'DESPESAS ADUANEIRAS' THEN V_VRDESPESAS_ADUANEIRAS := V_VRENCARGO/V_QTTOTAL_ITENS;
                        END CASE;


                  END LOOP;--FIM DO LOOP DE C_ENCARGO
                  CLOSE C_ENCARGO;-- CLOSE DO CURSOR C_ENCARGO

                  V_VRCOMISSAO := 0;
                  
                  OPEN C_COMISSAO(V_CDFILIALNF, V_NRLANCTONF, V_CDPRODUTO);
                    FETCH C_COMISSAO INTO V_VRCOMISSAO;
                  CLOSE C_COMISSAO;                  

                  INSERT INTO FATURAMENTO_PRODVENDIDO(NRORG, DSDATA, DSMES_ANO, ORDANOMES, DSANO, DSMES, DSBIMESTRE, DSTRIMESTRE, DSSEMESTRE, DSQUADRIMESTRE,
                                                      DTEMISSAO, NRLANCTONF, NRNOTAFISC, CDEMPRESA, NMEMPRESA, NMRAZSOCEMPR, CDMACROREGIAO, NMMACROREGIAO, CDMICROREGIAO,
                                                      NMMICROREGIAO, CDVENDEDOR, NMVENDEDOR, SGESTADO, NMESTADO, CDMUNICIPIO, NMMUNICIPIO, CDFILIAL, NMFILIAL,
                                                      CDCLIENTE, NMRAZSOCCLIE, NMFANTCLIE, NRINSJURCLIE, CDSEGMER, DSSEGMER, CDGRUPCLIE, NMGRUPCLIE, CDATIVCLI,
                                                      DSATIVCLI, CDGRUPPROD, NMGRUPPROD, CDSUBGRPROD, NMSUBGRPROD, CDPRODUTO, CDARVPROD, NMPRODUTO, QT_PRODUTO,
                                                      VR_BRUTITEM, QT_OBJETIVO_FIS, QT_OBJETIVO_FIN, VR_FECP, VR_IPI, VR_ICMS, VR_ICMSST, VR_PIS, VR_PISST, VR_COFINS,
                                                      VR_COFINS_ST, VR_II, VR_ISSQNE, VR_SEGURO, VR_DESCONTOS, VR_OUTRAS_DESP, VR_DESPESAS_ADU, VR_COMISSOES, VR_CUSTO_VARIAVEL, NRPEDIDO, NRITEMPED, NRSEQITPROD)

                              VALUES(P_NRORG,V_INI_DT, V_DSMES_ANO, V_ORDANOMES, V_DSANO, V_DSMES, V_DSBIMESTRE, V_DSTRIMESTRE, V_DSSEMESTRE, V_DSQUADRIMESTRE,
                                     V_DTEMISSAO, V_NRLANCTONF, V_NRNOTAFISC, V_CDEMPRESA, V_NMEMPRESA, V_NMRAZSOCEMPR, V_CDMACROREGIAO, V_NMMACROREGIAO, V_CDMICROREGIAO, 
                                     V_NMMICROREGIAO, V_CDVENDEDOR, V_NMVENDEDOR, V_SGESTADO, V_NMESTADO, V_CDMUNICIPIO, V_NMMUNICIPIO, V_CDFILIAL, V_NMFILIAL,
                                     V_CDCLIENTE, V_NMRAZSOCCLIE, V_NMFANTCLIE, V_NRINSJURCLIE, V_CDSEGMER, V_DSSEGMER, V_CDGRUPCLIE, V_NMGRUPCLIE, V_CDATIVCLI,
                                     V_DSATIVCLI, V_CDGRUPPROD, V_NMGRUPPROD, V_CDSUBGRPROD, V_NMSUBGRPROD, V_CDPRODUTO, V_CDARVPROD, V_NMPRODUTO, V_QT_PRODUTO,
                                     V_VR_BRUTITEM, V_QT_OBJETIVO_FIS, V_QT_OBJETIVO_FIN, V_VR_FECP, V_VR_IPI, V_VR_ICMS, V_VR_ICMS_ST, V_VR_PIS, V_VR_PIS_ST, V_VR_COFINS,
                                     V_VR_COFINS_ST, V_VR_II, V_VR_ISSQNE, V_VRSEGURO, V_VRDESCONTOS, V_VROUTRAS_DESPESAS, V_VRDESPESAS_ADUANEIRAS, V_VRCOMISSAO, V_VR_CUSTO_VARIAVEL, V_NRPEDIDO, V_NRITEMPED, V_NRSEQITPROD);
                  COMMIT;

         END LOOP;--FIM DO LOOP DE C_FAT_PEDIDO
         CLOSE C_FAT_PEDIDO;-- CLOSE DO CURSOR C_FAT_PEDIDO 

         V_DTEMISSAO         := ''; 
         V_NRLANCTONF        := ''; 
         V_NRNOTAFISC        := ''; 
         V_CDEMPRESA         := ''; 
         V_NMEMPRESA         := ''; 
         V_NMRAZSOCEMPR      := ''; 
         V_CDMACROREGIAO     := ''; 
         V_NMMACROREGIAO     := ''; 
         V_CDMICROREGIAO     := ''; 
         V_NMMICROREGIAO     := ''; 
         V_CDVENDEDOR        := ''; 
         V_NMVENDEDOR        := ''; 
         V_SGESTADO          := ''; 
         V_NMESTADO          := ''; 
         V_CDMUNICIPIO       := ''; 
         V_NMMUNICIPIO       := ''; 
         V_CDFILIAL          := ''; 
         V_NMFILIAL          := ''; 
         V_CDCLIENTE         := ''; 
         V_NMRAZSOCCLIE      := ''; 
         V_NMFANTCLIE        := ''; 
         V_NRINSJURCLIE      := ''; 
         V_CDSEGMER          := ''; 
         V_DSSEGMER          := ''; 
         V_CDGRUPCLIE        := ''; 
         V_NMGRUPCLIE        := ''; 
         V_CDATIVCLI         := ''; 
         V_DSATIVCLI         := ''; 
         V_CDGRUPPROD        := ''; 
         V_NMGRUPPROD        := ''; 
         V_CDSUBGRPROD       := ''; 
         V_NMSUBGRPROD       := ''; 
         V_CDPRODUTO         := ''; 
         V_CDARVPROD         := ''; 
         V_NMPRODUTO         := ''; 
         V_QT_PRODUTO        := ''; 
         V_VR_BRUTITEM       := ''; 
         V_QT_OBJETIVO_FIS   := ''; 
         V_QT_OBJETIVO_FIN   := ''; 
         V_QTTOTAL_ITENS     := ''; 
         V_VR_CUSTO_VARIAVEL := ''; 
         V_NRSEQITPROD       := ''; 
         V_NRPEDIDO          := '';  
         V_NRITEMPED         := ''; 


         /*ROTINA DE GRAVACAO DE FATURAMENTOS NAO REALIZADOS(METAS NAO ALCANCADAS)*/  
         OPEN C_METAS_NALCANCADA(P_GRUPPROD, V_INI_DT, V_FIM_DT);
            LOOP
               FETCH C_METAS_NALCANCADA INTO V_DTEMISSAO, V_NRLANCTONF, V_NRNOTAFISC, V_CDEMPRESA, V_NMEMPRESA, V_NMRAZSOCEMPR, V_CDMACROREGIAO, V_NMMACROREGIAO, V_CDMICROREGIAO, V_NMMICROREGIAO, 
                                             V_CDVENDEDOR, V_NMVENDEDOR, V_SGESTADO, V_NMESTADO, V_CDMUNICIPIO, V_NMMUNICIPIO, V_CDFILIAL, V_NMFILIAL, V_CDCLIENTE, V_NMRAZSOCCLIE, V_NMFANTCLIE, 
                                             V_NRINSJURCLIE, V_CDSEGMER, V_DSSEGMER, V_CDGRUPCLIE, V_NMGRUPCLIE, V_CDATIVCLI, V_DSATIVCLI, V_CDGRUPPROD, V_NMGRUPPROD, V_CDSUBGRPROD, V_NMSUBGRPROD, 
                                             V_CDPRODUTO, V_CDARVPROD, V_NMPRODUTO, V_QT_PRODUTO, V_VR_BRUTITEM, V_QT_OBJETIVO_FIS, V_QT_OBJETIVO_FIN, V_QTTOTAL_ITENS, V_VR_CUSTO_VARIAVEL, V_NRSEQITPROD, V_NRPEDIDO;
               EXIT WHEN C_METAS_NALCANCADA%NOTFOUND;  


                  INSERT INTO FATURAMENTO_PRODVENDIDO(NRORG, DSDATA, DSMES_ANO, ORDANOMES, DSANO, DSMES, DSBIMESTRE, DSTRIMESTRE, DSSEMESTRE, DSQUADRIMESTRE,
                                                      DTEMISSAO, NRLANCTONF, NRNOTAFISC, CDEMPRESA, NMEMPRESA, NMRAZSOCEMPR, CDMACROREGIAO, NMMACROREGIAO, CDMICROREGIAO,
                                                      NMMICROREGIAO, CDVENDEDOR, NMVENDEDOR, SGESTADO, NMESTADO, CDMUNICIPIO, NMMUNICIPIO, CDFILIAL, NMFILIAL,
                                                      CDCLIENTE, NMRAZSOCCLIE, NMFANTCLIE, NRINSJURCLIE, CDSEGMER, DSSEGMER, CDGRUPCLIE, NMGRUPCLIE, CDATIVCLI,
                                                      DSATIVCLI, CDGRUPPROD, NMGRUPPROD, CDSUBGRPROD, NMSUBGRPROD, CDPRODUTO, CDARVPROD, NMPRODUTO, QT_PRODUTO,
                                                      VR_BRUTITEM, QT_OBJETIVO_FIS, QT_OBJETIVO_FIN, VR_FECP, VR_IPI, VR_ICMS, VR_ICMSST, VR_PIS, VR_PISST, VR_COFINS,
                                                      VR_COFINS_ST, VR_II, VR_ISSQNE, VR_SEGURO, VR_DESCONTOS, VR_OUTRAS_DESP, VR_DESPESAS_ADU, VR_COMISSOES, VR_CUSTO_VARIAVEL, NRPEDIDO)

                              VALUES(P_NRORG,V_INI_DT, V_DSMES_ANO, V_ORDANOMES, V_DSANO, V_DSMES, V_DSBIMESTRE, V_DSTRIMESTRE, V_DSSEMESTRE, V_DSQUADRIMESTRE,
                                     V_DTEMISSAO, V_NRLANCTONF, V_NRNOTAFISC, V_CDEMPRESA, V_NMEMPRESA, V_NMRAZSOCEMPR, V_CDMACROREGIAO, V_NMMACROREGIAO, V_CDMICROREGIAO, 
                                     V_NMMICROREGIAO, V_CDVENDEDOR, V_NMVENDEDOR, V_SGESTADO, V_NMESTADO, V_CDMUNICIPIO, V_NMMUNICIPIO, V_CDFILIAL, V_NMFILIAL,
                                     V_CDCLIENTE, V_NMRAZSOCCLIE, V_NMFANTCLIE, V_NRINSJURCLIE, V_CDSEGMER, V_DSSEGMER, V_CDGRUPCLIE, V_NMGRUPCLIE, V_CDATIVCLI,
                                     V_DSATIVCLI, V_CDGRUPPROD, V_NMGRUPPROD, V_CDSUBGRPROD, V_NMSUBGRPROD, V_CDPRODUTO, V_CDARVPROD, V_NMPRODUTO, V_QT_PRODUTO,
                                     V_VR_BRUTITEM, V_QT_OBJETIVO_FIS, V_QT_OBJETIVO_FIN, V_VR_FECP, V_VR_IPI, V_VR_ICMS, V_VR_ICMS_ST, V_VR_PIS, V_VR_PIS_ST, V_VR_COFINS,
                                     V_VR_COFINS_ST, V_VR_II, V_VR_ISSQNE, V_VRSEGURO, V_VRDESCONTOS, V_VROUTRAS_DESPESAS, V_VRDESPESAS_ADUANEIRAS, 0, V_VR_CUSTO_VARIAVEL, V_NRPEDIDO);

                  COMMIT;

         END LOOP;--FIM DO LOOP DE C_METAS_NALCANCADA
         CLOSE C_METAS_NALCANCADA;-- CLOSE DO CURSOR C_METAS_NALCANCADA            


         /*ROTINA DE GRAVACAO DE METAS PRODUTO A PRODUTO*/  
         BEGIN
            FOR PROD IN (SELECT DISTINCT CDVENDEDOR, CDPRODUTO, SUM(1) OVER (PARTITION BY CDVENDEDOR, CDPRODUTO) PESO
                           FROM FATURAMENTO_PRODVENDIDO
                          WHERE ORDANOMES = V_ORDANOMES) LOOP

                  BEGIN
                     SELECT NVL(MVD.QTMETAVENDA,0), NVL(MVD.VRMETAVENDA,0)
                       INTO V_QTMETAVENDA, V_VRMETAVENDA
                       FROM METAVENDEDOR MVD, METAVENDA MV, PRODMETAVEND PMV
                      WHERE MVD.CDMETAVENDA = MV.CDMETAVENDA
                        AND MV.CDMETAVENDA = PMV.CDMETAVENDA
                        AND ((DTINIMETVEND BETWEEN V_INI_DT AND V_FIM_DT) OR (DTFINMETAVEND BETWEEN V_INI_DT AND V_FIM_DT))
                        AND MVD.CDVENDEDOR = PROD.CDVENDEDOR
                        AND PMV.CDPRODUTO = PROD.CDPRODUTO;   
                  EXCEPTION
                     WHEN NO_DATA_FOUND THEN
                        V_QTMETAVENDA := 0;
                        V_VRMETAVENDA := 0;
                  END; 

                  V_RATEIO_QT := (V_QTMETAVENDA/PROD.PESO);
                  V_RATEIO_VR := (V_VRMETAVENDA/PROD.PESO);

                  UPDATE FATURAMENTO_PRODVENDIDO
                     SET QT_OBJETIVO_FIS = V_RATEIO_QT,
                         QT_OBJETIVO_FIN = V_RATEIO_VR
                   WHERE ORDANOMES = V_ORDANOMES
                     AND CDVENDEDOR = PROD.CDVENDEDOR
                     AND CDPRODUTO = PROD.CDPRODUTO;

                  COMMIT;   
            END LOOP;
         END;                                   

         DELETE ROMANEIO_NF
          WHERE DSDATA BETWEEN V_INI_DT AND V_FIM_DT;         


         /*ROTINA DE GRAVACAO DO ROMANEIO DE NF's*/  
         OPEN C_ROMANEIO_NF('S', 'A', P_GRUPPROD, V_INI_DT, V_FIM_DT);
            LOOP
               FETCH C_ROMANEIO_NF INTO V_DTEMISSAO, V_NRLANCTONF, V_CDFILIALNF, V_NRNOTAFISC, V_CDTIPOOPER, V_NMTIPOOPER, V_CDEMPRESA, V_NMEMPRESA, V_NMRAZSOCEMPR, V_CDMACROREGIAO, V_NMMACROREGIAO, V_CDMICROREGIAO, V_NMMICROREGIAO, 
                                       V_CDVENDEDOR, V_NMVENDEDOR, V_SGESTADO, V_NMESTADO, V_CDMUNICIPIO, V_NMMUNICIPIO, V_CDFILIAL, V_NMFILIAL, V_CDCLIENTE, V_NMRAZSOCCLIE, V_NMFANTCLIE, 
                                       V_NRINSJURCLIE, V_CDSEGMER, V_DSSEGMER, V_CDGRUPCLIE, V_NMGRUPCLIE, V_CDATIVCLI, V_DSATIVCLI, V_CDGRUPPROD, V_NMGRUPPROD, V_CDSUBGRPROD, V_NMSUBGRPROD, 
                                       V_CDPRODUTO, V_CDARVPROD, V_NMPRODUTO, V_QT_PRODUTO, V_VR_BRUTITEM, V_QT_OBJETIVO_FIS, V_QT_OBJETIVO_FIN, V_QTTOTAL_ITENS, V_VR_CUSTO_VARIAVEL, V_NRSEQITPROD, V_NRPEDIDO;
               EXIT WHEN C_ROMANEIO_NF%NOTFOUND; 

                  /*IMPOSTO DO PRODUTO*/
                  OPEN C_IMPOSTO;
                     LOOP
                        FETCH C_IMPOSTO INTO V_CDIMPOSTO, V_SGIMPOSTONFE;
                        EXIT WHEN C_IMPOSTO%NOTFOUND; 

                       IF V_SGIMPOSTONFE <> 'FECP' THEN                        
                          BEGIN 
                              SELECT SUM(VRIMPOSTOIT)
                               INTO V_VRIMPOSTO
							                        FROM ITEMPROIMPOS
							                       WHERE CDIMPOSTO   = V_CDIMPOSTO
                                AND CDFILIAL    = V_CDFILIALNF
                                AND NRLANCTONF  = V_NRLANCTONF
                                AND NRSEQITPROD = V_NRSEQITPROD;
                           EXCEPTION
                              WHEN NO_DATA_FOUND THEN
                                 V_VRIMPOSTO := 0;
                           END; 
                        ELSE
                           BEGIN 
                              SELECT SUM(ITEMPROIMPOS.VRADICFECP)
                               INTO V_VRIMPOSTO
							                        FROM ITEMPROIMPOS 
                              INNER JOIN IMPOSTO
                                 ON ITEMPROIMPOS.CDIMPOSTO = IMPOSTO.CDIMPOSTO
                                AND IMPOSTO.CDIMPOSTONFE = '80'
                                AND ITEMPROIMPOS.CDFILIAL    = V_CDFILIALNF
                                AND ITEMPROIMPOS.NRLANCTONF  = V_NRLANCTONF
                                AND ITEMPROIMPOS.NRSEQITPROD = V_NRSEQITPROD;                                
                           EXCEPTION
                              WHEN NO_DATA_FOUND THEN
                                 V_VRIMPOSTO := 0;
                           END;
                        END IF;

                        CASE V_SGIMPOSTONFE
                           WHEN 'ICMS'      THEN V_VR_ICMS       := V_VRIMPOSTO;
                           WHEN 'FECP'      THEN V_VR_FECP       := V_VRIMPOSTO;
                           WHEN 'IPI'       THEN V_VR_IPI        := V_VRIMPOSTO;
                           WHEN 'II'        THEN V_VR_II         := V_VRIMPOSTO;
                           WHEN 'ISSQN-E'   THEN V_VR_ISSQNE     := V_VRIMPOSTO;
                           WHEN 'PIS'       THEN V_VR_PIS        := V_VRIMPOSTO;
                           WHEN 'COFINS'    THEN V_VR_COFINS     := V_VRIMPOSTO;
                           WHEN 'ICMS ST'   THEN V_VR_ICMS_ST    := V_VRIMPOSTO;
                           WHEN 'PIS ST'    THEN V_VR_PIS_ST     := V_VRIMPOSTO;
                           WHEN 'COFINS ST' THEN V_VR_COFINS_ST  := V_VRIMPOSTO;
                        END CASE; 

                  END LOOP;--FIM DO LOOP DE C_IMPOSTO
                  CLOSE C_IMPOSTO;-- CLOSE DO CURSOR C_IMPOSTO  

                  /*ENCARGOS*/
                  OPEN C_ENCARGO;
                     LOOP
                        FETCH C_ENCARGO INTO V_CDENCARGO, V_NMENCARGONFE;
                        EXIT WHEN C_ENCARGO%NOTFOUND; 

                        BEGIN 
                           SELECT SUM(VRITEMENCA) 
                             INTO V_VRENCARGO
				                         FROM ITEMENCARGO
				   	                    WHERE CDENCARGO  = V_CDENCARGO
				   	                      AND CDFILIAL   = V_CDFILIALNF
				                          AND NRLANCTONF = V_NRLANCTONF;
                        EXCEPTION
                           WHEN NO_DATA_FOUND THEN
                              V_VRENCARGO := 0;
                        END;

                        CASE V_NMENCARGONFE
                           WHEN 'FRETE'               THEN V_VRFRETE               := V_VRENCARGO/V_QTTOTAL_ITENS;          
                           WHEN 'SEGURO'              THEN V_VRSEGURO              := V_VRENCARGO/V_QTTOTAL_ITENS;
                           WHEN 'DESCONTOS'           THEN V_VRDESCONTOS           := V_VRENCARGO/V_QTTOTAL_ITENS;
                           WHEN 'OUTRAS DESPESAS'     THEN V_VROUTRAS_DESPESAS     := V_VRENCARGO/V_QTTOTAL_ITENS;
                           WHEN 'DESPESAS ADUANEIRAS' THEN V_VRDESPESAS_ADUANEIRAS := V_VRENCARGO/V_QTTOTAL_ITENS;
                        END CASE;


                  END LOOP;--FIM DO LOOP DE C_ENCARGO
                  CLOSE C_ENCARGO;-- CLOSE DO CURSOR C_ENCARGO

                  V_VRCOMISSAO := 0;
                  
                  OPEN C_COMISSAO(V_CDFILIALNF, V_NRLANCTONF, V_CDPRODUTO);
                    FETCH C_COMISSAO INTO V_VRCOMISSAO;
                  CLOSE C_COMISSAO;                  

                  INSERT INTO ROMANEIO_NF(NRORG, DSDATA, DSMES_ANO, ORDANOMES, DSANO, DSMES, DSBIMESTRE, DSTRIMESTRE, DSSEMESTRE, DSQUADRIMESTRE,
                                                      DTEMISSAO, NRLANCTONF, NRNOTAFISC, CDEMPRESA, NMEMPRESA, NMRAZSOCEMPR, CDMACROREGIAO, NMMACROREGIAO, CDMICROREGIAO,
                                                      NMMICROREGIAO, CDVENDEDOR, NMVENDEDOR, SGESTADO, NMESTADO, CDMUNICIPIO, NMMUNICIPIO, CDFILIAL, NMFILIAL,
                                                      CDCLIENTE, NMRAZSOCCLIE, NMFANTCLIE, NRINSJURCLIE, CDSEGMER, DSSEGMER, CDGRUPCLIE, NMGRUPCLIE, CDATIVCLI,
                                                      DSATIVCLI, CDGRUPPROD, NMGRUPPROD, CDSUBGRPROD, NMSUBGRPROD, CDPRODUTO, CDARVPROD, NMPRODUTO, QT_PRODUTO,
                                                      VR_BRUTITEM, QT_OBJETIVO_FIS, QT_OBJETIVO_FIN, VR_FECP, VR_IPI, VR_ICMS, VR_ICMSST, VR_PIS, VR_PISST, VR_COFINS,
                                                      VR_COFINS_ST, VR_II, VR_ISSQNE, VR_SEGURO, VR_DESCONTOS, VR_OUTRAS_DESP, VR_DESPESAS_ADU, VR_COMISSOES, VR_CUSTO_VARIAVEL, NRPEDIDO, CDTIPOOPER, NMTIPOOPER)

                              VALUES(P_NRORG,V_INI_DT, V_DSMES_ANO, V_ORDANOMES, V_DSANO, V_DSMES, V_DSBIMESTRE, V_DSTRIMESTRE, V_DSSEMESTRE, V_DSQUADRIMESTRE,
                                     V_DTEMISSAO, V_NRLANCTONF, V_NRNOTAFISC, V_CDEMPRESA, V_NMEMPRESA, V_NMRAZSOCEMPR, V_CDMACROREGIAO, V_NMMACROREGIAO, V_CDMICROREGIAO, 
                                     V_NMMICROREGIAO, V_CDVENDEDOR, V_NMVENDEDOR, V_SGESTADO, V_NMESTADO, V_CDMUNICIPIO, V_NMMUNICIPIO, V_CDFILIAL, V_NMFILIAL,
                                     V_CDCLIENTE, V_NMRAZSOCCLIE, V_NMFANTCLIE, V_NRINSJURCLIE, V_CDSEGMER, V_DSSEGMER, V_CDGRUPCLIE, V_NMGRUPCLIE, V_CDATIVCLI,
                                     V_DSATIVCLI, V_CDGRUPPROD, V_NMGRUPPROD, V_CDSUBGRPROD, V_NMSUBGRPROD, V_CDPRODUTO, V_CDARVPROD, V_NMPRODUTO, V_QT_PRODUTO,
                                     V_VR_BRUTITEM, V_QT_OBJETIVO_FIS, V_QT_OBJETIVO_FIN, V_VR_FECP, V_VR_IPI, V_VR_ICMS, V_VR_ICMS_ST, V_VR_PIS, V_VR_PIS_ST, V_VR_COFINS,
                                     V_VR_COFINS_ST, V_VR_II, V_VR_ISSQNE, V_VRSEGURO, V_VRDESCONTOS, V_VROUTRAS_DESPESAS, V_VRDESPESAS_ADUANEIRAS, V_VRCOMISSAO, V_VR_CUSTO_VARIAVEL, V_NRPEDIDO, V_CDTIPOOPER, V_NMTIPOOPER);

                  COMMIT;

         END LOOP;--FIM DO LOOP DE C_ROMANEIO_NF
         CLOSE C_ROMANEIO_NF;-- CLOSE DO CURSOR C_ROMANEIO_NF            

         /*ROTINA DE GRAVACAO DE DEVOLUCAO DE VENDAS*/

         DELETE FAT_ANALISE_RESULTADO
          WHERE DSDATA BETWEEN V_INI_DT AND V_FIM_DT;
            --AND CDCLIENTE  = V_CDCLIENTE;
         COMMIT;

         OPEN C_ANALISE_RESULTADO(V_INI_DT, V_FIM_DT);
            LOOP
               FETCH C_ANALISE_RESULTADO INTO V_CDMACROREGIAO, V_NMMACROREGIAO, V_CDMICROREGIAO, V_NMMICROREGIAO, V_CDVENDEDOR, V_NMVENDEDOR, V_CDEMPRESA, V_NMEMPRESA, V_NMRAZSOCEMPR, V_SGESTADO, 
                                              V_NMESTADO, V_CDMUNICIPIO, V_NMMUNICIPIO, --V_CDFILIAL, V_NMFILIAL, V_CDCLIENTE, V_NMRAZSOCCLIE, V_NMFANTCLIE, V_NRINSJURCLIE,  
                                              V_VRSEGURO, V_VRFRETE, V_VRINCENTIVOS, V_VRMARKETING, V_VRDESPESAS, V_VR_CUSTO_VARIAVEL, V_QT_OBJETIVO_FIS, V_QT_OBJETIVO_FIN, V_QT_PRODUTO, 
                                              V_VR_BRUTITEM, V_VR_FECP, V_VR_IPI, V_VR_ICMS, V_VR_ICMS_ST, V_VR_PIS, V_VR_COFINS, V_VRCOMISSOES;
               EXIT WHEN C_ANALISE_RESULTADO%NOTFOUND; 

               INSERT INTO FAT_ANALISE_RESULTADO(NRORG,DSDATA, DSMES_ANO, ORDANOMES, DSANO, DSMES, DSBIMESTRE, DSTRIMESTRE, DSSEMESTRE, DSQUADRIMESTRE, CDEMPRESA, 
                                                  NMEMPRESA, NMRAZSOCEMPR, CDMACROREGIAO, NMMACROREGIAO, CDMICROREGIAO, NMMICROREGIAO,SGESTADO, NMESTADO, CDMUNICIPIO, NMMUNICIPIO, 
                                                  VRFRETE, VRINCENTIVOS, VRMARKETING, VRDESPESAS, VR_CUSTO_VARIAVEL, QT_OBJETIVO_FIS, QT_OBJETIVO_FIN, QT_PRODUTO, 
                                                  VR_BRUTITEM, VR_FECP, VR_IPI, VR_ICMS, VR_ICMSST, VR_PIS, VR_COFINS, VR_COMISSOES, CDVENDEDOR, NMVENDEDOR, VRSEGURO)

                 VALUES(P_NRORG, V_INI_DT, V_DSMES_ANO, V_ORDANOMES, V_DSANO, V_DSMES, V_DSBIMESTRE, V_DSTRIMESTRE, V_DSSEMESTRE, V_DSQUADRIMESTRE, V_CDEMPRESA, 
                        V_NMEMPRESA, V_NMRAZSOCEMPR, V_CDMACROREGIAO, V_NMMACROREGIAO, V_CDMICROREGIAO, V_NMMICROREGIAO,	V_SGESTADO, V_NMESTADO, V_CDMUNICIPIO, V_NMMUNICIPIO, 
                        V_VRFRETE, V_VRINCENTIVOS, V_VRMARKETING, V_VRDESPESAS, V_VR_CUSTO_VARIAVEL, V_QT_OBJETIVO_FIS, V_QT_OBJETIVO_FIN, V_QT_PRODUTO,
                        V_VR_BRUTITEM, V_VR_FECP, V_VR_IPI, V_VR_ICMS, V_VR_ICMS_ST, V_VR_PIS, V_VR_COFINS, V_VRCOMISSOES, V_CDVENDEDOR, V_NMVENDEDOR, V_VRSEGURO);

               COMMIT;

         END LOOP;--FIM DO LOOP DE C_ANALISE_RESULTADO
         CLOSE C_ANALISE_RESULTADO;-- CLOSE DO CURSOR C_ANALISE_RESULTADO                        

         DELETE FATURAMENTO_DESPESACLI
          WHERE DSDATA BETWEEN V_INI_DT AND V_FIM_DT;

         COMMIT;

         /*ROTINA DE GRAVACAO DA PARAMETRIZACAO DE DESPESAS*/
         DELETE PAR_CTB_DESPESAS;

         IF P_CTB_FRETE IS NOT NULL THEN 
            FOR C_PARAMS IN (SELECT REGEXP_SUBSTR(P_CTB_FRETE,'[^_]+', 1, LEVEL) AS PARAM FROM DUAL
                                    CONNECT BY REGEXP_SUBSTR(P_CTB_FRETE, '[^_]+', 1, LEVEL) IS NOT NULL) LOOP

              FOR  C_RES IN (SELECT CDCONTCTBL 
                               FROM CONTCTBL 
                              WHERE (CDCONTCTBL LIKE (C_PARAMS.PARAM||'%'))
                                AND IDTIPOCONT = 'A') LOOP

                 INSERT INTO PAR_CTB_DESPESAS(IDTPDESPESA, CDCONTCTBL)
                       VALUES('FRETE', C_RES.CDCONTCTBL);

                 COMMIT;

              END LOOP;
            END LOOP;                    
         END IF;


         IF P_TPOP_INCENTIVOS IS NOT NULL THEN 
            FOR C_PARAMS IN (SELECT REGEXP_SUBSTR(P_TPOP_INCENTIVOS,'[^_]+', 1, LEVEL) AS PARAM FROM DUAL
                                    CONNECT BY REGEXP_SUBSTR(P_TPOP_INCENTIVOS, '[^_]+', 1, LEVEL) IS NOT NULL) LOOP                   

                 INSERT INTO PAR_CTB_DESPESAS(IDTPDESPESA, CDCONTCTBL)
                       VALUES('INCENTIVOS', C_PARAMS.PARAM);

                 COMMIT;

            END LOOP;                    
         END IF;                  

         IF P_CTB_INCENTIVOS IS NOT NULL THEN 
            FOR C_PARAMS IN (SELECT REGEXP_SUBSTR(P_CTB_INCENTIVOS,'[^_]+', 1, LEVEL) AS PARAM FROM DUAL
                                    CONNECT BY REGEXP_SUBSTR(P_CTB_INCENTIVOS, '[^_]+', 1, LEVEL) IS NOT NULL) LOOP

              FOR  C_RES IN (SELECT CDCONTCTBL 
                               FROM CONTCTBL 
                              WHERE (CDCONTCTBL LIKE (C_PARAMS.PARAM||'%'))
                                AND IDTIPOCONT = 'A') LOOP

                 INSERT INTO PAR_CTB_DESPESAS(IDTPDESPESA, CDCONTCTBL)
                       VALUES('INCENTIVOS', C_RES.CDCONTCTBL);

                 COMMIT;

              END LOOP;
            END LOOP;                    
         END IF;

         IF P_TPOP_MARKETING IS NOT NULL THEN 
            FOR C_PARAMS IN (SELECT REGEXP_SUBSTR(P_TPOP_MARKETING,'[^_]+', 1, LEVEL) AS PARAM FROM DUAL
                                    CONNECT BY REGEXP_SUBSTR(P_TPOP_MARKETING, '[^_]+', 1, LEVEL) IS NOT NULL) LOOP                      

                 INSERT INTO PAR_CTB_DESPESAS(IDTPDESPESA, CDCONTCTBL)
                       VALUES('VMKT', C_PARAMS.PARAM);

                 COMMIT;

            END LOOP;                    
         END IF;                  

         IF P_CTB_MARKETING IS NOT NULL THEN 
            FOR C_PARAMS IN (SELECT REGEXP_SUBSTR(P_CTB_MARKETING,'[^_]+', 1, LEVEL) AS PARAM FROM DUAL
                                    CONNECT BY REGEXP_SUBSTR(P_CTB_MARKETING, '[^_]+', 1, LEVEL) IS NOT NULL) LOOP

              FOR  C_RES IN (SELECT CDCONTCTBL 
                               FROM CONTCTBL 
                              WHERE (CDCONTCTBL LIKE (C_PARAMS.PARAM||'%'))
                                AND IDTIPOCONT = 'A') LOOP

                 INSERT INTO PAR_CTB_DESPESAS(IDTPDESPESA, CDCONTCTBL)
                       VALUES('VMKT', C_RES.CDCONTCTBL);

                 COMMIT;

              END LOOP;
            END LOOP;                    
         END IF;

         IF P_CTB_DESPESAS IS NOT NULL THEN 
            FOR C_PARAMS IN (SELECT REGEXP_SUBSTR(P_CTB_DESPESAS,'[^_]+', 1, LEVEL) AS PARAM FROM DUAL
                                    CONNECT BY REGEXP_SUBSTR(P_CTB_DESPESAS, '[^_]+', 1, LEVEL) IS NOT NULL) LOOP

              FOR  C_RES IN (SELECT CDCONTCTBL 
                               FROM CONTCTBL 
                              WHERE (CDCONTCTBL LIKE (C_PARAMS.PARAM||'%'))
                                AND IDTIPOCONT = 'A') LOOP

                 INSERT INTO PAR_CTB_DESPESAS(IDTPDESPESA, CDCONTCTBL)
                       VALUES('DESPESAS', C_RES.CDCONTCTBL);

                 COMMIT;

              END LOOP;
            END LOOP;                    
         END IF;                  

         /*ROTINA DE GRAVACAO DE DESPESAS*/                  
         OPEN C_DESPESAS(V_INI_DT, V_FIM_DT);
            LOOP
               FETCH C_DESPESAS INTO V_DTEMISSAO, V_NRLANCTONF, V_NRNOTAFISC, V_CDEMPRESA, V_NMEMPRESA, V_NMRAZSOCEMPR, V_SGESTADO, V_NMESTADO, V_CDMUNICIPIO, V_NMMUNICIPIO, 
                                     V_CDFILIAL, V_NMFILIAL, V_CDCLIENTE, V_NMRAZSOCCLIE, V_NMFANTCLIE, V_NRINSJURCLIE, V_CDMACROREGIAO, V_NMMACROREGIAO, V_CDMICROREGIAO, V_NMMICROREGIAO, 
                                     V_CDSEGMER, V_DSSEGMER, V_CDGRUPCLIE, V_NMGRUPCLIE, V_CDATIVCLI, V_DSATIVCLI, V_VRFRETE, V_VRINCENTIVOS, V_VRMARKETING, V_VRDESPESAS;
               EXIT WHEN C_DESPESAS%NOTFOUND; 

               INSERT INTO FATURAMENTO_DESPESACLI(NRORG, DSDATA, DSMES_ANO, ORDANOMES, DSANO, DSMES, DSBIMESTRE, DSTRIMESTRE, DSSEMESTRE, DSQUADRIMESTRE,
                                                  DTEMISSAO, NRLANCTONF, NRNOTAFISC, CDEMPRESA, NMEMPRESA, NMRAZSOCEMPR, CDMACROREGIAO, NMMACROREGIAO, CDMICROREGIAO, NMMICROREGIAO,
                                                  SGESTADO, NMESTADO, CDMUNICIPIO, NMMUNICIPIO, CDFILIAL, NMFILIAL, CDCLIENTE, NMRAZSOCCLIE, NMFANTCLIE, NRINSJURCLIE, 
                                                  CDSEGMER, DSSEGMER, CDGRUPCLIE, NMGRUPCLIE, CDATIVCLI, DSATIVCLI, VRFRETE, VRINCENTIVOS, VRMARKETING, VRDESPESAS)

                 VALUES(P_NRORG, V_INI_DT, V_DSMES_ANO, V_ORDANOMES, V_DSANO, V_DSMES, V_DSBIMESTRE, V_DSTRIMESTRE, V_DSSEMESTRE, V_DSQUADRIMESTRE,
                        V_DTEMISSAO, V_NRLANCTONF, V_NRNOTAFISC, V_CDEMPRESA, V_NMEMPRESA, V_NMRAZSOCEMPR, V_CDMACROREGIAO, V_NMMACROREGIAO, V_CDMICROREGIAO, V_NMMICROREGIAO,	
                        V_SGESTADO, V_NMESTADO, V_CDMUNICIPIO, V_NMMUNICIPIO, V_CDFILIAL, V_NMFILIAL, V_CDCLIENTE, V_NMRAZSOCCLIE, V_NMFANTCLIE, V_NRINSJURCLIE, 
                        V_CDSEGMER, V_DSSEGMER, V_CDGRUPCLIE, V_NMGRUPCLIE, V_CDATIVCLI, V_DSATIVCLI, V_VRFRETE, V_VRINCENTIVOS, V_VRMARKETING, V_VRDESPESAS);

               COMMIT;

            END LOOP;--FIM DO LOOP DE C_DESPESAS
         CLOSE C_DESPESAS;-- CLOSE DO CURSOR C_DESPESAS 

         /*ROTINA DE GRAVACAO DO RESUMO DO RESULTADO GERAL*/
         DELETE FROM FAT_RESUMO_RESULTADO
          WHERE ORDANOMES = V_ORDANOMES;

         COMMIT;          

         V_COUNT := 0;
         --RESUMO GERAL
         OPEN C_DADOS_ESTRUTURA;  
           LOOP 
              FETCH C_DADOS_ESTRUTURA BULK COLLECT INTO V_ARRAY_ESTRUTURA;

                 V_QRY_RESUMO_GERAL := NULL;

                 FOR vnContador IN V_ARRAY_ESTRUTURA.FIRST .. V_ARRAY_ESTRUTURA.LAST LOOP

                    CASE V_ARRAY_ESTRUTURA(vnContador).ORD_ITEM 
                       WHEN 3  THEN V_TIPO_DESPESA := 'VRINCENTIVOS';
                       WHEN 5  THEN V_TIPO_DESPESA := 'VRFRETE';
                       WHEN 9  THEN V_TIPO_DESPESA := 'VRMARKETING';
                       WHEN 10 THEN V_TIPO_DESPESA := 'VRDESPESAS';
                     ELSE V_TIPO_DESPESA := 0;
                    END CASE;

                    V_VRDESPESA := 0;

                    IF V_ARRAY_ESTRUTURA(vnContador).ORD_ITEM IN (3,5,9,10) THEN 

                        V_QRY := 'SELECT SUM('||V_TIPO_DESPESA||') 
                                    FROM FATURAMENTO_DESPESACLI
                                   WHERE NRORG     = '||CHR(39)||P_NRORG||CHR(39)||'
                                     AND ORDANOMES = '||CHR(39)||V_ORDANOMES||CHR(39)||'
                                     AND CDEMPRESA IS NOT NULL';

                       OPEN CUR_RESUMO FOR V_QRY; 
                         FETCH CUR_RESUMO INTO V_VRDESPESA;
                       CLOSE CUR_RESUMO;

                       CASE V_ARRAY_ESTRUTURA(vnContador).ORD_ITEM 
                          WHEN 3  THEN V_VRINCENTIVOS  := NVL(V_VRDESPESA,0);
                          WHEN 5  THEN V_VRFRETE       := NVL(V_VRDESPESA,0);
                          WHEN 9  THEN V_VRMARKETING   := NVL(V_VRDESPESA,0);
                          WHEN 10 THEN V_VRDESPESAS    := NVL(V_VRDESPESA,0);
                       END CASE;

                    END IF;                    

                    V_QRY_RESUMO_GERAL := 'SELECT ' 
                                                  ||V_ARRAY_ESTRUTURA(vnContador).ORD_ITEM ||' AS ORD_ITEM, '
                                                  ||CHR(39)||V_ARRAY_ESTRUTURA(vnContador).DSITEM ||CHR(39)||' AS DSITEM, '
                                                  ||V_ARRAY_ESTRUTURA(vnContador).DSFORMULA||' AS VR_ITEM
                                             FROM FATURAMENTO_PRODVENDIDO V
                                            WHERE NRORG       = '||CHR(39)||P_NRORG||CHR(39)||'
                                              AND V.ORDANOMES = '||CHR(39)||V_ORDANOMES||CHR(39)||'
                                              AND V.CDEMPRESA IS NOT NULL
                                            GROUP BY V.NRORG'; 

                       OPEN CUR_RESUMO 
                          FOR V_QRY_RESUMO_GERAL;
                             FETCH CUR_RESUMO INTO V_ORD_ITEM, V_DSITEM, V_VR_ITEM;

                                IF CUR_RESUMO%ROWCOUNT = V_COUNT THEN
                                   EXIT;
                                END IF;

                                CASE V_ARRAY_ESTRUTURA(vnContador).ORD_ITEM
                                   WHEN 1   THEN V_VR_REC_BRUTA := V_VR_ITEM;                                
                                   WHEN 3   THEN V_VR_ITEM      := V_VRINCENTIVOS;
                                   WHEN 5   THEN V_VR_ITEM      := V_VRFRETE;
                                   WHEN 9   THEN V_VR_ITEM      := V_VRMARKETING;
                                   WHEN 10  THEN V_VR_ITEM      := V_VRDESPESAS;
                                   WHEN 7   THEN V_VR_ITEM      := V_VR_ITEM - (V_VRINCENTIVOS + V_VRFRETE);
                                   WHEN 11  THEN V_VR_ITEM      := V_VR_ITEM - (V_VRINCENTIVOS + V_VRFRETE + V_VRMARKETING + V_VRDESPESAS);
                                 ELSE V_VR_ITEM := V_VR_ITEM;
                                END CASE;

                                IF V_VR_REC_BRUTA = 0 THEN
                                   V_VR_REC_BRUTA := 1;
                                END IF;

                                V_PERC_SOBRE_RECBRUTA := (V_VR_ITEM/V_VR_REC_BRUTA)*100;

                                INSERT INTO FAT_RESUMO_RESULTADO(NRORG, NMORGANIZACAO, DSANO, DSSEMESTRE, DSTRIMESTRE, DSBIMESTRE, DSMES, DSMES_ANO, ORDANOMES, DSDATA, ORD_ITEM, DSITEM, VR_ITEM, VR_PERC_RECBRUT)
                                   VALUES(P_NRORG, 'ORGANIZACAO',  V_DSANO, V_DSSEMESTRE, V_DSTRIMESTRE, V_DSBIMESTRE, V_DSMES, V_DSMES_ANO, V_ORDANOMES, V_INI_DT, V_ORD_ITEM, V_DSITEM, V_VR_ITEM, V_PERC_SOBRE_RECBRUTA);

                                COMMIT;
                                V_COUNT := V_COUNT +1;                                 

                       CLOSE CUR_RESUMO;--CLOSE DO CURSOR CUR_RESUMO

                    V_COUNT := 0;

                 END LOOP;--FIM DO LOOP V_ARRAY_ESTRUTURA
              EXIT WHEN C_DADOS_ESTRUTURA%NOTFOUND;
           END LOOP;--FIM DO LOOP C_DADOS_ESTRUTURA
         CLOSE C_DADOS_ESTRUTURA;--CLOSE DO LOOP C_DADOS_ESTRUTURA          

         /*ROTINA DE GRAVACAO DO RESUMO DO RESULTADO POR EMPRESA*/
         DELETE FROM FAT_RESUMO_RESULTADO_EMP
          WHERE ORDANOMES = V_ORDANOMES;


         V_COUNT := 0;
         --RESUMO POR EMPRESA
         FOR C_RESULTADO IN (SELECT DISTINCT NRORG, CDEMPRESA, NMEMPRESA
                               FROM FATURAMENTO_PRODVENDIDO
                              WHERE NRORG = P_NRORG
                                AND ORDANOMES = V_ORDANOMES
                                AND CDEMPRESA IS NOT NULL) LOOP         

            V_COUNT := 0;
            OPEN C_DADOS_ESTRUTURA;  
              LOOP 
                 FETCH C_DADOS_ESTRUTURA BULK COLLECT INTO V_ARRAY_ESTRUTURA;

                    V_QRY_RESUMO_MACROREG := NULL;               

                    FOR vnContador IN V_ARRAY_ESTRUTURA.FIRST .. V_ARRAY_ESTRUTURA.LAST LOOP     

                          CASE V_ARRAY_ESTRUTURA(vnContador).ORD_ITEM 
                             WHEN 3  THEN V_TIPO_DESPESA := 'VRINCENTIVOS';
                             WHEN 5  THEN V_TIPO_DESPESA := 'VRFRETE';
                             WHEN 9  THEN V_TIPO_DESPESA := 'VRMARKETING';
                             WHEN 10 THEN V_TIPO_DESPESA := 'VRDESPESAS';
                           ELSE V_TIPO_DESPESA := 0;
                          END CASE;

                          V_VRDESPESA := 0;

                          IF V_ARRAY_ESTRUTURA(vnContador).ORD_ITEM IN (3,5,9,10) THEN 

                              V_QRY := 'SELECT SUM('||V_TIPO_DESPESA||') 
                                          FROM FATURAMENTO_DESPESACLI
                                         WHERE NRORG     = '||CHR(39)||P_NRORG||CHR(39)||'
                                           AND ORDANOMES = '||CHR(39)||V_ORDANOMES||CHR(39)||'
                                           AND CDEMPRESA = '||CHR(39)||C_RESULTADO.CDEMPRESA||CHR(39);

                             OPEN CUR_RESUMO FOR V_QRY; 
                               FETCH CUR_RESUMO INTO V_VRDESPESA;
                             CLOSE CUR_RESUMO;

                             CASE V_ARRAY_ESTRUTURA(vnContador).ORD_ITEM 
                                WHEN 3  THEN V_VRINCENTIVOS := NVL(V_VRDESPESA,0);
                                WHEN 5  THEN V_VRFRETE      := NVL(V_VRDESPESA,0);
                                WHEN 9  THEN V_VRMARKETING  := NVL(V_VRDESPESA,0);
                                WHEN 10 THEN V_VRDESPESAS   := NVL(V_VRDESPESA,0);
                             END CASE;

                          END IF;

                          V_QRY_RESUMO_MACROREG := 'SELECT '
                                                         ||V_ARRAY_ESTRUTURA(vnContador).ORD_ITEM ||' AS ORD_ITEM, '
                                                         ||CHR(39)||V_ARRAY_ESTRUTURA(vnContador).DSITEM  ||CHR(39)||' AS DSITEM, '
                                                         ||V_ARRAY_ESTRUTURA(vnContador).DSFORMULA||' AS VR_ITEM
                                                    FROM FATURAMENTO_PRODVENDIDO V
                                                   WHERE V.NRORG     = '||CHR(39)||P_NRORG||CHR(39)||'
                                                     AND V.CDEMPRESA = '||CHR(39)||C_RESULTADO.CDEMPRESA||CHR(39)||'   
                                                     AND V.ORDANOMES = '||CHR(39)||V_ORDANOMES||CHR(39)||'                                           
                                                   GROUP BY V.CDEMPRESA';  

                          OPEN CUR_RESUMO
                             FOR V_QRY_RESUMO_MACROREG; 
                                FETCH CUR_RESUMO INTO V_ORD_ITEM, V_DSITEM, V_VR_ITEM;

                                   IF CUR_RESUMO%ROWCOUNT = V_COUNT THEN
                                      EXIT;
                                   END IF;

                                   CASE V_ARRAY_ESTRUTURA(vnContador).ORD_ITEM 
                                      WHEN 1   THEN V_VR_REC_BRUTA := V_VR_ITEM; 
                                      WHEN 3   THEN V_VR_ITEM      := V_VRINCENTIVOS;
                                      WHEN 5   THEN V_VR_ITEM      := V_VRFRETE;
                                      WHEN 9   THEN V_VR_ITEM      := V_VRMARKETING;
                                      WHEN 10  THEN V_VR_ITEM      := V_VRDESPESAS;
                                      WHEN 7   THEN V_VR_ITEM      := V_VR_ITEM - (V_VRINCENTIVOS + V_VRFRETE);
                                      WHEN 11  THEN V_VR_ITEM      := V_VR_ITEM - (V_VRINCENTIVOS + V_VRFRETE + V_VRMARKETING + V_VRDESPESAS);
                                    ELSE V_VR_ITEM := V_VR_ITEM;
                                   END CASE;                                   

                                   IF V_VR_REC_BRUTA = 0 THEN 
                                      V_VR_REC_BRUTA := 1;
                                   END IF;

                                   V_PERC_SOBRE_RECBRUTA := (V_VR_ITEM/V_VR_REC_BRUTA)*100;

                                   INSERT INTO FAT_RESUMO_RESULTADO_EMP(NRORG, NMORGANIZACAO, CDEMPRESA, NMEMPRESA, DSANO, DSSEMESTRE, DSTRIMESTRE, DSBIMESTRE, DSMES, DSMES_ANO, ORDANOMES, DSDATA, ORD_ITEM, DSITEM, VR_ITEM, VR_PERC_RECBRUT)
                                         VALUES(P_NRORG, 'ORGANIZACAO', C_RESULTADO.CDEMPRESA, C_RESULTADO.NMEMPRESA, V_DSANO, V_DSSEMESTRE, V_DSTRIMESTRE, V_DSBIMESTRE, V_DSMES, V_DSMES_ANO, V_ORDANOMES, V_INI_DT, V_ORD_ITEM, V_DSITEM, V_VR_ITEM, V_PERC_SOBRE_RECBRUTA);

                                   COMMIT;
                                   V_COUNT := V_COUNT +1;

                          CLOSE CUR_RESUMO;--CLOSE DO CURSOR CUR_RESUMO
                          V_COUNT := 0;

                    END LOOP; -- FIM DO LOOP ARRAY_ESTRUTURA
                 EXIT WHEN C_DADOS_ESTRUTURA%NOTFOUND;
              END LOOP; --FIM DO LOOP DE C_DADOS_ESTRUTURA
            CLOSE C_DADOS_ESTRUTURA;--FIM DO LOOP C_DADOS_ESTRUTURA   
         END LOOP; --FIM DO LOOP C_RESULTADO         


         /*ROTINA DE GRAVACAO DO RESUMO DO RESULTADO POR MACROREGIAO*/
         DELETE FROM FAT_RESUMO_RESULTADO_MAC
          WHERE ORDANOMES = V_ORDANOMES;         

         V_COUNT := 0;
         --RESUMO POR MACROREGIAO
         FOR C_RESULTADO IN (SELECT DISTINCT NRORG, CDEMPRESA, NMEMPRESA, CDMACROREGIAO AS CDMACROREGIAO, NMMACROREGIAO
                                FROM FATURAMENTO_PRODVENDIDO
                               WHERE ORDANOMES = V_ORDANOMES
                                 AND CDEMPRESA IS NOT NULL) LOOP         

            V_COUNT := 0;
            OPEN C_DADOS_ESTRUTURA;  
              LOOP 
                 FETCH C_DADOS_ESTRUTURA BULK COLLECT INTO V_ARRAY_ESTRUTURA;

                    V_QRY_RESUMO_MACROREG := NULL;               

                    FOR vnContador IN V_ARRAY_ESTRUTURA.FIRST .. V_ARRAY_ESTRUTURA.LAST LOOP     

                          CASE V_ARRAY_ESTRUTURA(vnContador).ORD_ITEM 
                             WHEN 3  THEN V_TIPO_DESPESA := 'VRINCENTIVOS';
                             WHEN 5  THEN V_TIPO_DESPESA := 'VRFRETE';
                             WHEN 9  THEN V_TIPO_DESPESA := 'VRMARKETING';
                             WHEN 10 THEN V_TIPO_DESPESA := 'VRDESPESAS';
                           ELSE V_TIPO_DESPESA := 0;
                          END CASE;

                          V_VRDESPESA := 0;

                          IF V_ARRAY_ESTRUTURA(vnContador).ORD_ITEM IN (3,5,9,10) THEN 

                              V_QRY := 'SELECT SUM('||V_TIPO_DESPESA||') 
                                          FROM FATURAMENTO_DESPESACLI
                                         WHERE NRORG         = '||CHR(39)||P_NRORG||CHR(39)||'
                                           AND ORDANOMES     = '||CHR(39)||V_ORDANOMES||CHR(39)||'
                                           AND CDMACROREGIAO = '||CHR(39)||C_RESULTADO.CDMACROREGIAO||CHR(39)||'
                                           AND CDEMPRESA     = '||CHR(39)||C_RESULTADO.CDEMPRESA||CHR(39) ;

                             OPEN CUR_RESUMO FOR V_QRY; 
                               FETCH CUR_RESUMO INTO V_VRDESPESA;
                             CLOSE CUR_RESUMO;

                             CASE V_ARRAY_ESTRUTURA(vnContador).ORD_ITEM 
                                WHEN 3  THEN V_VRINCENTIVOS := NVL(V_VRDESPESA,0);
                                WHEN 5  THEN V_VRFRETE      := NVL(V_VRDESPESA,0);
                                WHEN 9  THEN V_VRMARKETING  := NVL(V_VRDESPESA,0);
                                WHEN 10 THEN V_VRDESPESAS   := NVL(V_VRDESPESA,0);
                             END CASE;

                          END IF;

                          V_QRY_RESUMO_MACROREG := 'SELECT '
                                                         ||V_ARRAY_ESTRUTURA(vnContador).ORD_ITEM ||' AS ORD_ITEM, '
                                                         ||CHR(39)||V_ARRAY_ESTRUTURA(vnContador).DSITEM  ||CHR(39)||' AS DSITEM, '
                                                         ||V_ARRAY_ESTRUTURA(vnContador).DSFORMULA||' AS VR_ITEM
                                                    FROM FATURAMENTO_PRODVENDIDO V
                                                   WHERE V.NRORG         = '||CHR(39)||P_NRORG||CHR(39)||'
                                                     AND V.CDMACROREGIAO = '||CHR(39)||C_RESULTADO.CDMACROREGIAO||CHR(39)||'   
                                                     AND V.ORDANOMES     = '||CHR(39)||V_ORDANOMES||CHR(39)||'  
                                                     AND V.CDEMPRESA     = '||CHR(39)||C_RESULTADO.CDEMPRESA||CHR(39)||'
                                                   GROUP BY V.NRORG, V.CDEMPRESA, V.CDMACROREGIAO';  

                          OPEN CUR_RESUMO
                             FOR V_QRY_RESUMO_MACROREG; 
                                FETCH CUR_RESUMO INTO V_ORD_ITEM, V_DSITEM, V_VR_ITEM;

                                   IF CUR_RESUMO%ROWCOUNT = V_COUNT THEN
                                      EXIT;
                                   END IF;

                                   CASE V_ARRAY_ESTRUTURA(vnContador).ORD_ITEM 
                                      WHEN 1   THEN V_VR_REC_BRUTA := V_VR_ITEM; 
                                      WHEN 3   THEN V_VR_ITEM      := V_VRINCENTIVOS;
                                      WHEN 5   THEN V_VR_ITEM      := V_VRFRETE;
                                      WHEN 9   THEN V_VR_ITEM      := V_VRMARKETING;
                                      WHEN 10  THEN V_VR_ITEM      := V_VRDESPESAS;
                                      WHEN 7   THEN V_VR_ITEM      := V_VR_ITEM - (V_VRINCENTIVOS + V_VRFRETE);
                                      WHEN 11  THEN V_VR_ITEM      := V_VR_ITEM - (V_VRINCENTIVOS + V_VRFRETE + V_VRMARKETING + V_VRDESPESAS);
                                    ELSE V_VR_ITEM := V_VR_ITEM;
                                   END CASE;                                   

                                   IF V_VR_REC_BRUTA = 0 THEN 
                                      V_VR_REC_BRUTA := 1;
                                   END IF;

                                   V_PERC_SOBRE_RECBRUTA := (V_VR_ITEM/V_VR_REC_BRUTA)*100;

                                   INSERT INTO FAT_RESUMO_RESULTADO_MAC(NRORG, NMORGANIZACAO, CDEMPRESA, CDMACROREGIAO, NMMACROREGIAO, DSANO, DSSEMESTRE, DSTRIMESTRE, DSBIMESTRE, DSMES, DSMES_ANO, ORDANOMES, DSDATA, ORD_ITEM, DSITEM, VR_ITEM, VR_PERC_RECBRUT)
                                         VALUES(P_NRORG, 'ORGANIZACAO', C_RESULTADO.CDEMPRESA, C_RESULTADO.CDMACROREGIAO, C_RESULTADO.NMMACROREGIAO, V_DSANO, V_DSSEMESTRE, V_DSTRIMESTRE, V_DSBIMESTRE, V_DSMES, V_DSMES_ANO, V_ORDANOMES, V_INI_DT, V_ORD_ITEM, V_DSITEM, V_VR_ITEM, V_PERC_SOBRE_RECBRUTA);

                                   COMMIT;
                                   V_COUNT := V_COUNT +1;

                          CLOSE CUR_RESUMO;--CLOSE DO CURSOR CUR_RESUMO
                          V_COUNT := 0;

                    END LOOP; -- FIM DO LOOP ARRAY_ESTRUTURA
                 EXIT WHEN C_DADOS_ESTRUTURA%NOTFOUND;
              END LOOP; --FIM DO LOOP DE C_DADOS_ESTRUTURA
            CLOSE C_DADOS_ESTRUTURA;--FIM DO LOOP C_DADOS_ESTRUTURA   
         END LOOP; --FIM DO LOOP C_RESULTADO     

         /*ROTINA DE GRAVACAO DO RESUMO DO RESULTADO POR UF*/
         DELETE FROM FAT_RESUMO_RESULTADO_UF
          WHERE ORDANOMES = V_ORDANOMES;         

         V_COUNT := 0;
         --RESUMO POR UF
         FOR C_RESULTADO IN (SELECT DISTINCT NRORG, CDEMPRESA, NMEMPRESA, CDMACROREGIAO AS CDMACROREGIAO, NMMACROREGIAO, SGESTADO, NMESTADO
                                FROM FATURAMENTO_PRODVENDIDO
                               WHERE ORDANOMES = V_ORDANOMES
                                 AND CDEMPRESA IS NOT NULL) LOOP         

            V_COUNT := 0;
            OPEN C_DADOS_ESTRUTURA;  
              LOOP 
                 FETCH C_DADOS_ESTRUTURA BULK COLLECT INTO V_ARRAY_ESTRUTURA;

                    V_QRY_RESUMO_MACROREG := NULL;               

                    FOR vnContador IN V_ARRAY_ESTRUTURA.FIRST .. V_ARRAY_ESTRUTURA.LAST LOOP     

                          CASE V_ARRAY_ESTRUTURA(vnContador).ORD_ITEM 
                             WHEN 3  THEN V_TIPO_DESPESA := 'VRINCENTIVOS';
                             WHEN 5  THEN V_TIPO_DESPESA := 'VRFRETE';
                             WHEN 9  THEN V_TIPO_DESPESA := 'VRMARKETING';
                             WHEN 10 THEN V_TIPO_DESPESA := 'VRDESPESAS';
                           ELSE V_TIPO_DESPESA := 0;
                          END CASE;

                          V_VRDESPESA := 0;

                          IF V_ARRAY_ESTRUTURA(vnContador).ORD_ITEM IN (3,5,9,10) THEN 

                              V_QRY := 'SELECT SUM('||V_TIPO_DESPESA||') 
                                          FROM FATURAMENTO_DESPESACLI
                                         WHERE NRORG         = '||CHR(39)||P_NRORG||CHR(39)||'
                                           AND ORDANOMES     = '||CHR(39)||V_ORDANOMES||CHR(39)||'
                                           AND CDMACROREGIAO = '||CHR(39)||C_RESULTADO.CDMACROREGIAO||CHR(39)||'
                                           AND CDEMPRESA     = '||CHR(39)||C_RESULTADO.CDEMPRESA||CHR(39)||'
                                           AND SGESTADO      = '||CHR(39)||C_RESULTADO.SGESTADO||CHR(39);

                             OPEN CUR_RESUMO FOR V_QRY; 
                               FETCH CUR_RESUMO INTO V_VRDESPESA;
                             CLOSE CUR_RESUMO;

                             CASE V_ARRAY_ESTRUTURA(vnContador).ORD_ITEM 
                                WHEN 3  THEN V_VRINCENTIVOS := NVL(V_VRDESPESA,0);
                                WHEN 5  THEN V_VRFRETE      := NVL(V_VRDESPESA,0);
                                WHEN 9  THEN V_VRMARKETING  := NVL(V_VRDESPESA,0);
                                WHEN 10 THEN V_VRDESPESAS   := NVL(V_VRDESPESA,0);
                             END CASE;

                          END IF;

                          V_QRY_RESUMO_MACROREG := 'SELECT '
                                                         ||V_ARRAY_ESTRUTURA(vnContador).ORD_ITEM ||' AS ORD_ITEM, '
                                                         ||CHR(39)||V_ARRAY_ESTRUTURA(vnContador).DSITEM  ||CHR(39)||' AS DSITEM, '
                                                         ||V_ARRAY_ESTRUTURA(vnContador).DSFORMULA||' AS VR_ITEM
                                                    FROM FATURAMENTO_PRODVENDIDO V
                                                   WHERE V.NRORG         = '||CHR(39)||P_NRORG||CHR(39)||'
                                                     AND V.CDMACROREGIAO = '||CHR(39)||C_RESULTADO.CDMACROREGIAO||CHR(39)||'   
                                                     AND V.ORDANOMES     = '||CHR(39)||V_ORDANOMES||CHR(39)||'  
                                                     AND V.CDEMPRESA     = '||CHR(39)||C_RESULTADO.CDEMPRESA||CHR(39)||'
                                                     AND V.SGESTADO      = '||CHR(39)||C_RESULTADO.SGESTADO||CHR(39)||'
                                                   GROUP BY V.NRORG, V.CDEMPRESA, V.CDMACROREGIAO, V.SGESTADO';  

                          OPEN CUR_RESUMO
                             FOR V_QRY_RESUMO_MACROREG; 
                                FETCH CUR_RESUMO INTO V_ORD_ITEM, V_DSITEM, V_VR_ITEM;

                                   IF CUR_RESUMO%ROWCOUNT = V_COUNT THEN
                                      EXIT;
                                   END IF;

                                   CASE V_ARRAY_ESTRUTURA(vnContador).ORD_ITEM 
                                      WHEN 1   THEN V_VR_REC_BRUTA := V_VR_ITEM; 
                                      WHEN 3   THEN V_VR_ITEM      := V_VRINCENTIVOS;
                                      WHEN 5   THEN V_VR_ITEM      := V_VRFRETE;
                                      WHEN 9   THEN V_VR_ITEM      := V_VRMARKETING;
                                      WHEN 10  THEN V_VR_ITEM      := V_VRDESPESAS;
                                      WHEN 7   THEN V_VR_ITEM      := V_VR_ITEM - (V_VRINCENTIVOS + V_VRFRETE);
                                      WHEN 11  THEN V_VR_ITEM      := V_VR_ITEM - (V_VRINCENTIVOS + V_VRFRETE + V_VRMARKETING + V_VRDESPESAS);
                                    ELSE V_VR_ITEM := V_VR_ITEM;
                                   END CASE;                                   

                                   IF V_VR_REC_BRUTA = 0 THEN 
                                      V_VR_REC_BRUTA := 1;
                                   END IF;

                                   V_PERC_SOBRE_RECBRUTA := (V_VR_ITEM/V_VR_REC_BRUTA)*100;

                                   INSERT INTO FAT_RESUMO_RESULTADO_UF(NRORG, NMORGANIZACAO, CDEMPRESA, CDMACROREGIAO, NMMACROREGIAO, SGESTADO, NMESTADO, DSANO, DSSEMESTRE, DSTRIMESTRE, DSBIMESTRE, DSMES, DSMES_ANO, ORDANOMES, DSDATA, ORD_ITEM, DSITEM, VR_ITEM, VR_PERC_RECBRUT)
                                         VALUES(P_NRORG, 'ORGANIZACAO', C_RESULTADO.CDEMPRESA, C_RESULTADO.CDMACROREGIAO, C_RESULTADO.NMMACROREGIAO, C_RESULTADO.SGESTADO, C_RESULTADO.NMESTADO, V_DSANO, V_DSSEMESTRE, V_DSTRIMESTRE, V_DSBIMESTRE, V_DSMES, V_DSMES_ANO, V_ORDANOMES, V_INI_DT, V_ORD_ITEM, V_DSITEM, V_VR_ITEM, V_PERC_SOBRE_RECBRUTA);

                                   COMMIT;
                                   V_COUNT := V_COUNT +1;

                          CLOSE CUR_RESUMO;--CLOSE DO CURSOR CUR_RESUMO
                          V_COUNT := 0;

                    END LOOP; -- FIM DO LOOP ARRAY_ESTRUTURA
                 EXIT WHEN C_DADOS_ESTRUTURA%NOTFOUND;
              END LOOP; --FIM DO LOOP DE C_DADOS_ESTRUTURA
            CLOSE C_DADOS_ESTRUTURA;--FIM DO LOOP C_DADOS_ESTRUTURA   
         END LOOP; --FIM DO LOOP C_RESULTADO            

         /*ROTINA DE GRAVACAO DO RESUMO DO RESULTADO POR VENDEDOR*/
         DELETE FROM FAT_RESUMO_RESULTADO_VEN
          WHERE ORDANOMES = V_ORDANOMES;         

         V_COUNT := 0;
         --RESUMO POR VENDEDOR
         FOR C_RESULTADO IN (SELECT DISTINCT NRORG, CDEMPRESA, NMEMPRESA, CDMACROREGIAO AS CDMACROREGIAO, NMMACROREGIAO, SGESTADO, NMESTADO, CDVENDEDOR, NMVENDEDOR
                               FROM FATURAMENTO_PRODVENDIDO
                              WHERE ORDANOMES = V_ORDANOMES
                                AND CDEMPRESA IS NOT NULL) LOOP         

            V_COUNT := 0;
            OPEN C_DADOS_ESTRUTURA;  
              LOOP 
                 FETCH C_DADOS_ESTRUTURA BULK COLLECT INTO V_ARRAY_ESTRUTURA;

                    V_QRY_RESUMO_MACROREG := NULL;               

                    FOR vnContador IN V_ARRAY_ESTRUTURA.FIRST .. V_ARRAY_ESTRUTURA.LAST LOOP     

                          CASE V_ARRAY_ESTRUTURA(vnContador).ORD_ITEM 
                             WHEN 3  THEN V_TIPO_DESPESA := 'VRINCENTIVOS';
                             WHEN 5  THEN V_TIPO_DESPESA := 'VRFRETE';
                             WHEN 9  THEN V_TIPO_DESPESA := 'VRMARKETING';
                             WHEN 10 THEN V_TIPO_DESPESA := 'VRDESPESAS';
                           ELSE V_TIPO_DESPESA := 0;
                          END CASE;

                          V_VRDESPESA := 0;

                          IF V_ARRAY_ESTRUTURA(vnContador).ORD_ITEM IN (3,5,9,10) THEN 

                              V_QRY := 'SELECT SUM('||V_TIPO_DESPESA||') 
                                          FROM FATURAMENTO_DESPESACLI
                                         WHERE NRORG         = '||CHR(39)||P_NRORG||CHR(39)||'
                                           AND CDEMPRESA     = '||CHR(39)||C_RESULTADO.CDEMPRESA||CHR(39)||'
                                           AND CDMACROREGIAO = '||CHR(39)||C_RESULTADO.CDMACROREGIAO||CHR(39)||'
                                           AND CDVENDEDOR    = '||CHR(39)||C_RESULTADO.CDVENDEDOR||CHR(39)||'
                                           AND SGESTADO      = '||CHR(39)||C_RESULTADO.SGESTADO||CHR(39)||'
                                           AND ORDANOMES     = '||CHR(39)||V_ORDANOMES||CHR(39);

                             OPEN CUR_RESUMO FOR V_QRY; 
                               FETCH CUR_RESUMO INTO V_VRDESPESA;
                             CLOSE CUR_RESUMO;

                             CASE V_ARRAY_ESTRUTURA(vnContador).ORD_ITEM 
                                WHEN 3  THEN V_VRINCENTIVOS := NVL(V_VRDESPESA,0);
                                WHEN 5  THEN V_VRFRETE      := NVL(V_VRDESPESA,0);
                                WHEN 9  THEN V_VRMARKETING  := NVL(V_VRDESPESA,0);
                                WHEN 10 THEN V_VRDESPESAS   := NVL(V_VRDESPESA,0);
                             END CASE;

                          END IF;


                          V_QRY_RESUMO_MACROREG := 'SELECT '
                                                         ||V_ARRAY_ESTRUTURA(vnContador).ORD_ITEM ||' AS ORD_ITEM, '
                                                         ||CHR(39)||V_ARRAY_ESTRUTURA(vnContador).DSITEM  ||CHR(39)||' AS DSITEM, '
                                                         ||V_ARRAY_ESTRUTURA(vnContador).DSFORMULA||' AS VR_ITEM
                                                    FROM FATURAMENTO_PRODVENDIDO V
                                                   WHERE V.NRORG         = '||CHR(39)||P_NRORG||CHR(39)||'
                                                     AND V.CDMACROREGIAO = '||CHR(39)||C_RESULTADO.CDMACROREGIAO||CHR(39)||'  
                                                     AND V.CDEMPRESA     = '||CHR(39)||C_RESULTADO.CDEMPRESA||CHR(39)||'
                                                     AND V.ORDANOMES     = '||CHR(39)||V_ORDANOMES||CHR(39)||'     
                                                     AND V.CDVENDEDOR    = '||CHR(39)||C_RESULTADO.CDVENDEDOR||CHR(39)||'
                                                     AND V.SGESTADO      = '||CHR(39)||C_RESULTADO.SGESTADO||CHR(39)||'
                                                   GROUP BY V.NRORG, V.CDEMPRESA, V.CDMACROREGIAO, V.CDVENDEDOR';  


                          OPEN CUR_RESUMO
                             FOR V_QRY_RESUMO_MACROREG; 
                                FETCH CUR_RESUMO INTO V_ORD_ITEM, V_DSITEM, V_VR_ITEM;

                                   IF CUR_RESUMO%ROWCOUNT = V_COUNT THEN
                                      EXIT;
                                   END IF;

                                   CASE V_ARRAY_ESTRUTURA(vnContador).ORD_ITEM 
                                      WHEN 1   THEN V_VR_REC_BRUTA := V_VR_ITEM; 
                                      WHEN 3   THEN V_VR_ITEM      := V_VRINCENTIVOS;
                                      WHEN 5   THEN V_VR_ITEM      := V_VRFRETE;
                                      WHEN 9   THEN V_VR_ITEM      := V_VRMARKETING;
                                      WHEN 10  THEN V_VR_ITEM      := V_VRDESPESAS;
                                      WHEN 7   THEN V_VR_ITEM      := V_VR_ITEM - (V_VRINCENTIVOS + V_VRFRETE);
                                      WHEN 11  THEN V_VR_ITEM      := V_VR_ITEM - (V_VRINCENTIVOS + V_VRFRETE + V_VRMARKETING + V_VRDESPESAS);
                                    ELSE V_VR_ITEM := V_VR_ITEM;
                                   END CASE;                                   

                                   IF V_VR_REC_BRUTA = 0 THEN 
                                      V_VR_REC_BRUTA := 1;
                                   END IF;

                                   V_PERC_SOBRE_RECBRUTA := (V_VR_ITEM/V_VR_REC_BRUTA)*100;

                                   INSERT INTO FAT_RESUMO_RESULTADO_VEN(NRORG, NMORGANIZACAO, CDEMPRESA, NMEMPRESA, CDMACROREGIAO, NMMACROREGIAO, SGESTADO, NMESTADO, CDVENDEDOR, NMVENDEDOR, DSANO, DSSEMESTRE, DSTRIMESTRE, DSBIMESTRE, DSMES, DSMES_ANO, ORDANOMES, DSDATA, ORD_ITEM, DSITEM, VR_ITEM, VR_PERC_RECBRUT)
                                         VALUES(P_NRORG, 'ORGANIZACAO', C_RESULTADO.CDEMPRESA, C_RESULTADO.NMEMPRESA, C_RESULTADO.CDMACROREGIAO, C_RESULTADO.NMMACROREGIAO, C_RESULTADO.SGESTADO, C_RESULTADO.NMESTADO,  C_RESULTADO.CDVENDEDOR, C_RESULTADO.NMVENDEDOR, V_DSANO, V_DSSEMESTRE, V_DSTRIMESTRE, V_DSBIMESTRE, V_DSMES, V_DSMES_ANO, V_ORDANOMES, V_INI_DT, V_ORD_ITEM, V_DSITEM, V_VR_ITEM, V_PERC_SOBRE_RECBRUTA);

                                   COMMIT;
                                   V_COUNT := V_COUNT +1;

                          CLOSE CUR_RESUMO;--CLOSE DO CURSOR CUR_RESUMO
                          V_COUNT := 0;

                    END LOOP; -- FIM DO LOOP ARRAY_ESTRUTURA
                 EXIT WHEN C_DADOS_ESTRUTURA%NOTFOUND;
              END LOOP; --FIM DO LOOP DE C_DADOS_ESTRUTURA
            CLOSE C_DADOS_ESTRUTURA;--FIM DO LOOP C_DADOS_ESTRUTURA   
         END LOOP; --FIM DO LOOP C_RESULTADO          

         /*ROTINA DE GRAVACAO DO RESUMO DO RESULTADO POR MICROREGIAO*/
         DELETE FROM FAT_RESUMO_RESULTADO_MIC
          WHERE ORDANOMES = V_ORDANOMES;         

         V_COUNT := 0;
         --RESUMO POR MICROREGIAO
         FOR C_RESULTADO IN (SELECT DISTINCT NRORG, CDEMPRESA, NMEMPRESA, CDMACROREGIAO AS CDMACROREGIAO, NMMACROREGIAO, SGESTADO, NMESTADO, CDVENDEDOR, NMVENDEDOR, CDMICROREGIAO, NMMICROREGIAO
                                FROM FATURAMENTO_PRODVENDIDO
                               WHERE ORDANOMES = V_ORDANOMES
                                 AND CDEMPRESA IS NOT NULL) LOOP         

            V_COUNT := 0;
            OPEN C_DADOS_ESTRUTURA;  
              LOOP 
                 FETCH C_DADOS_ESTRUTURA BULK COLLECT INTO V_ARRAY_ESTRUTURA;

                    V_QRY_RESUMO_MACROREG := NULL;               

                    FOR vnContador IN V_ARRAY_ESTRUTURA.FIRST .. V_ARRAY_ESTRUTURA.LAST LOOP     

                          CASE V_ARRAY_ESTRUTURA(vnContador).ORD_ITEM 
                             WHEN 3  THEN V_TIPO_DESPESA := 'VRINCENTIVOS';
                             WHEN 5  THEN V_TIPO_DESPESA := 'VRFRETE';
                             WHEN 9  THEN V_TIPO_DESPESA := 'VRMARKETING';
                             WHEN 10 THEN V_TIPO_DESPESA := 'VRDESPESAS';
                           ELSE V_TIPO_DESPESA := 0;
                          END CASE;

                          V_VRDESPESA := 0;

                          IF V_ARRAY_ESTRUTURA(vnContador).ORD_ITEM IN (3,5,9,10) THEN 

                              V_QRY := 'SELECT SUM('||V_TIPO_DESPESA||') 
                                          FROM FATURAMENTO_DESPESACLI
                                         WHERE NRORG         = '||CHR(39)||P_NRORG||CHR(39)||'
                                           AND CDMACROREGIAO = '||CHR(39)||C_RESULTADO.CDMACROREGIAO||CHR(39)||'  
                                           AND CDEMPRESA     = '||CHR(39)||C_RESULTADO.CDEMPRESA||CHR(39)||'
                                           AND ORDANOMES     = '||CHR(39)||V_ORDANOMES||CHR(39)||'     
                                           AND CDVENDEDOR    = '||CHR(39)||C_RESULTADO.CDVENDEDOR||CHR(39)||'
                                           AND SGESTADO      = '||CHR(39)||C_RESULTADO.SGESTADO||CHR(39)||'
                                           AND CDMICROREGIAO = '||CHR(39)||C_RESULTADO.CDMICROREGIAO||CHR(39);

                             OPEN CUR_RESUMO FOR V_QRY; 
                               FETCH CUR_RESUMO INTO V_VRDESPESA;
                             CLOSE CUR_RESUMO;

                             CASE V_ARRAY_ESTRUTURA(vnContador).ORD_ITEM 
                                WHEN 3  THEN V_VRINCENTIVOS := NVL(V_VRDESPESA,0);
                                WHEN 5  THEN V_VRFRETE      := NVL(V_VRDESPESA,0);
                                WHEN 9  THEN V_VRMARKETING  := NVL(V_VRDESPESA,0);
                                WHEN 10 THEN V_VRDESPESAS   := NVL(V_VRDESPESA,0);
                             END CASE;

                          END IF;


                          V_QRY_RESUMO_MACROREG := 'SELECT '
                                                         ||V_ARRAY_ESTRUTURA(vnContador).ORD_ITEM ||' AS ORD_ITEM, '
                                                         ||CHR(39)||V_ARRAY_ESTRUTURA(vnContador).DSITEM  ||CHR(39)||' AS DSITEM, '
                                                         ||V_ARRAY_ESTRUTURA(vnContador).DSFORMULA||' AS VR_ITEM
                                                    FROM FATURAMENTO_PRODVENDIDO V
                                                   WHERE V.NRORG         = '||CHR(39)||P_NRORG||CHR(39)||'
                                                     AND V.CDMACROREGIAO = '||CHR(39)||C_RESULTADO.CDMACROREGIAO||CHR(39)||'  
                                                     AND V.CDEMPRESA     = '||CHR(39)||C_RESULTADO.CDEMPRESA||CHR(39)||'
                                                     AND V.ORDANOMES     = '||CHR(39)||V_ORDANOMES||CHR(39)||'     
                                                     AND V.CDVENDEDOR    = '||CHR(39)||C_RESULTADO.CDVENDEDOR||CHR(39)||'
                                                     AND V.CDMICROREGIAO = '||CHR(39)||C_RESULTADO.CDMICROREGIAO||CHR(39)||'  
                                                     AND V.SGESTADO      = '||CHR(39)||C_RESULTADO.SGESTADO||CHR(39)||'                                                     
                                                   GROUP BY V.NRORG, V.CDEMPRESA, V.CDMACROREGIAO, V.CDVENDEDOR, V.CDMICROREGIAO';  


                          OPEN CUR_RESUMO
                             FOR V_QRY_RESUMO_MACROREG; 
                             --LOOP
                                FETCH CUR_RESUMO INTO V_ORD_ITEM, V_DSITEM, V_VR_ITEM;

                                   IF CUR_RESUMO%ROWCOUNT = V_COUNT THEN
                                      EXIT;
                                   END IF;

                                   CASE V_ARRAY_ESTRUTURA(vnContador).ORD_ITEM 
                                      WHEN 1   THEN V_VR_REC_BRUTA := V_VR_ITEM; 
                                      WHEN 3   THEN V_VR_ITEM      := V_VRINCENTIVOS;
                                      WHEN 5   THEN V_VR_ITEM      := V_VRFRETE;
                                      WHEN 9   THEN V_VR_ITEM      := V_VRMARKETING;
                                      WHEN 10  THEN V_VR_ITEM      := V_VRDESPESAS;
                                      WHEN 7   THEN V_VR_ITEM      := V_VR_ITEM - (V_VRINCENTIVOS + V_VRFRETE);
                                      WHEN 11  THEN V_VR_ITEM      := V_VR_ITEM - (V_VRINCENTIVOS + V_VRFRETE + V_VRMARKETING + V_VRDESPESAS);
                                    ELSE V_VR_ITEM := V_VR_ITEM;
                                   END CASE;                                   

                                   IF V_VR_REC_BRUTA = 0 THEN 
                                      V_VR_REC_BRUTA := 1;
                                   END IF;

                                   V_PERC_SOBRE_RECBRUTA := (V_VR_ITEM/V_VR_REC_BRUTA)*100;

                                   INSERT INTO FAT_RESUMO_RESULTADO_MIC(NRORG, NMORGANIZACAO, CDEMPRESA, NMEMPRESA, CDMACROREGIAO, NMMACROREGIAO, SGESTADO, NMESTADO, CDVENDEDOR, NMVENDEDOR, CDMICROREGIAO, NMMICROREGIAO, DSANO, DSSEMESTRE, DSTRIMESTRE, DSBIMESTRE, DSMES, DSMES_ANO, ORDANOMES, DSDATA, ORD_ITEM, DSITEM, VR_ITEM, VR_PERC_RECBRUT)
                                         VALUES(P_NRORG, 'ORGANIZACAO', C_RESULTADO.CDEMPRESA, C_RESULTADO.NMEMPRESA, C_RESULTADO.CDMACROREGIAO, C_RESULTADO.NMMACROREGIAO, C_RESULTADO.SGESTADO, C_RESULTADO.NMESTADO, C_RESULTADO.CDVENDEDOR, C_RESULTADO.NMVENDEDOR, C_RESULTADO.CDMICROREGIAO, C_RESULTADO.NMMICROREGIAO, V_DSANO, V_DSSEMESTRE, V_DSTRIMESTRE, V_DSBIMESTRE, V_DSMES, V_DSMES_ANO, V_ORDANOMES, V_INI_DT, V_ORD_ITEM, V_DSITEM, V_VR_ITEM, V_PERC_SOBRE_RECBRUTA);

                                   COMMIT;
                                   V_COUNT := V_COUNT +1;

                             --END LOOP; --FIM DO LOOP DE V_QRY_RESUMO_MACROREG
                          CLOSE CUR_RESUMO;--CLOSE DO CURSOR CUR_RESUMO
                          V_COUNT := 0;

                    END LOOP; -- FIM DO LOOP ARRAY_ESTRUTURA
                 EXIT WHEN C_DADOS_ESTRUTURA%NOTFOUND;
              END LOOP; --FIM DO LOOP DE C_DADOS_ESTRUTURA
            CLOSE C_DADOS_ESTRUTURA;--FIM DO LOOP C_DADOS_ESTRUTURA   
         END LOOP; --FIM DO LOOP C_RESULTADO                

         /*ROTINA DE GRAVACAO DO RESUMO DO RESULTADO POR CLIENTE*/
         DELETE FROM FAT_RESUMO_RESULTADO_CLI
          WHERE ORDANOMES = V_ORDANOMES;

         COMMIT;         

         V_COUNT := 0;
         /*RESUMO POR DO RESULTADO POR CLIENTE*/
         FOR C_RESULTADO IN (SELECT DISTINCT
                                      CDEMPRESA, NMEMPRESA, NMRAZSOCEMPR,
                                      CDMACROREGIAO, NMMACROREGIAO,
                                      SGESTADO, NMESTADO,
                                      CDVENDEDOR, NMVENDEDOR,
                                      CDMICROREGIAO, NMMICROREGIAO,
                                      CDCLIENTE, NMRAZSOCCLIE, NMFANTCLIE, NRINSJURCLIE
                                 FROM FATURAMENTO_PRODVENDIDO
                                WHERE ORDANOMES = V_ORDANOMES 
                                  AND CDEMPRESA IS NOT NULL) LOOP         

            V_COUNT := 0;
            OPEN C_DADOS_ESTRUTURA;  
              LOOP 
                 FETCH C_DADOS_ESTRUTURA BULK COLLECT INTO V_ARRAY_ESTRUTURA;

                    V_QRY_RESUMO := NULL;               

                    FOR vnContador IN V_ARRAY_ESTRUTURA.FIRST .. V_ARRAY_ESTRUTURA.LAST LOOP     

                          CASE V_ARRAY_ESTRUTURA(vnContador).ORD_ITEM 
                             WHEN 3  THEN V_TIPO_DESPESA := 'VRINCENTIVOS';
                             WHEN 5  THEN V_TIPO_DESPESA := 'VRFRETE';
                             WHEN 9  THEN V_TIPO_DESPESA := 'VRMARKETING';
                             WHEN 10 THEN V_TIPO_DESPESA := 'VRDESPESAS';
                           ELSE V_TIPO_DESPESA := 0;
                          END CASE;

                          V_VRDESPESA := 0;

                          IF V_ARRAY_ESTRUTURA(vnContador).ORD_ITEM IN (3,5,9,10) THEN 

                              V_QRY := 'SELECT SUM('||V_TIPO_DESPESA||') 
                                          FROM FATURAMENTO_DESPESACLI
                                         WHERE NRORG         = '||CHR(39)||P_NRORG||CHR(39)||'
                                           AND CDMACROREGIAO = '||CHR(39)||C_RESULTADO.CDMACROREGIAO||CHR(39)||'  
                                           AND CDEMPRESA     = '||CHR(39)||C_RESULTADO.CDEMPRESA||CHR(39)||'
                                           AND ORDANOMES     = '||CHR(39)||V_ORDANOMES||CHR(39)||'     
                                           AND CDVENDEDOR    = '||CHR(39)||C_RESULTADO.CDVENDEDOR||CHR(39)||'
                                           AND CDMICROREGIAO = '||CHR(39)||C_RESULTADO.CDMICROREGIAO||CHR(39)||'
                                           AND SGESTADO      = '||CHR(39)||C_RESULTADO.SGESTADO||CHR(39)||'
                                           AND CDCLIENTE     = '||CHR(39)||C_RESULTADO.CDCLIENTE||CHR(39);

                             OPEN CUR_RESUMO FOR V_QRY; 
                               FETCH CUR_RESUMO INTO V_VRDESPESA;
                             CLOSE CUR_RESUMO;

                             CASE V_ARRAY_ESTRUTURA(vnContador).ORD_ITEM 
                                WHEN 3  THEN V_VRINCENTIVOS := NVL(V_VRDESPESA,0);
                                WHEN 5  THEN V_VRFRETE      := NVL(V_VRDESPESA,0);
                                WHEN 9  THEN V_VRMARKETING  := NVL(V_VRDESPESA,0);
                                WHEN 10 THEN V_VRDESPESAS   := NVL(V_VRDESPESA,0);
                             END CASE;

                          END IF;


                          V_QRY_RESUMO := 'SELECT '
                                                         ||V_ARRAY_ESTRUTURA(vnContador).ORD_ITEM ||' AS ORD_ITEM, '
                                                         ||CHR(39)||V_ARRAY_ESTRUTURA(vnContador).DSITEM  ||CHR(39)||' AS DSITEM, '
                                                         ||V_ARRAY_ESTRUTURA(vnContador).DSFORMULA||' AS VR_ITEM
                                                    FROM FATURAMENTO_PRODVENDIDO V
                                                   WHERE V.NRORG         = '||CHR(39)||P_NRORG||CHR(39)||'
                                                     AND V.CDMACROREGIAO = '||CHR(39)||C_RESULTADO.CDMACROREGIAO||CHR(39)||'  
                                                     AND V.CDEMPRESA     = '||CHR(39)||C_RESULTADO.CDEMPRESA||CHR(39)||'
                                                     AND V.ORDANOMES     = '||CHR(39)||V_ORDANOMES||CHR(39)||'     
                                                     AND V.CDVENDEDOR    = '||CHR(39)||C_RESULTADO.CDVENDEDOR||CHR(39)||'
                                                     AND V.CDMICROREGIAO = '||CHR(39)||C_RESULTADO.CDMICROREGIAO||CHR(39)||'
                                                     AND V.CDCLIENTE     = '||CHR(39)||C_RESULTADO.CDCLIENTE||CHR(39)||'       
                                                     AND V.SGESTADO      = '||CHR(39)||C_RESULTADO.SGESTADO||CHR(39)||'                                                     
                                                   GROUP BY V.NRORG, V.CDEMPRESA, V.CDMACROREGIAO, V.CDVENDEDOR, V.CDMICROREGIAO, V.CDCLIENTE';  


                          OPEN CUR_RESUMO
                             FOR V_QRY_RESUMO; 
                             --LOOP
                                FETCH CUR_RESUMO INTO V_ORD_ITEM, V_DSITEM, V_VR_ITEM;

                                   IF CUR_RESUMO%ROWCOUNT = V_COUNT THEN
                                      EXIT;
                                   END IF;

                                   CASE V_ARRAY_ESTRUTURA(vnContador).ORD_ITEM 
                                      WHEN 1   THEN V_VR_REC_BRUTA := V_VR_ITEM; 
                                      WHEN 3   THEN V_VR_ITEM      := V_VRINCENTIVOS;
                                      WHEN 5   THEN V_VR_ITEM      := V_VRFRETE;
                                      WHEN 9   THEN V_VR_ITEM      := V_VRMARKETING;
                                      WHEN 10  THEN V_VR_ITEM      := V_VRDESPESAS;
                                      WHEN 7   THEN V_VR_ITEM      := V_VR_ITEM - (V_VRINCENTIVOS + V_VRFRETE);
                                      WHEN 11  THEN V_VR_ITEM      := V_VR_ITEM - (V_VRINCENTIVOS + V_VRFRETE + V_VRMARKETING + V_VRDESPESAS);
                                    ELSE V_VR_ITEM := V_VR_ITEM;
                                   END CASE;                                   

                                   IF V_VR_REC_BRUTA = 0 THEN 
                                      V_VR_REC_BRUTA := 1;
                                   END IF;

                                   V_PERC_SOBRE_RECBRUTA := (V_VR_ITEM/V_VR_REC_BRUTA)*100;

                                   INSERT INTO FAT_RESUMO_RESULTADO_CLI(NRORG, NMORGANIZACAO, DSANO, DSSEMESTRE, DSTRIMESTRE, DSBIMESTRE, DSMES, DSMES_ANO, ORDANOMES, DSDATA, ORD_ITEM, DSITEM, VR_ITEM, VR_PERC_RECBRUT, 
                                                                        CDEMPRESA, NMEMPRESA, CDMACROREGIAO, NMMACROREGIAO, SGESTADO, NMESTADO, CDVENDEDOR, NMVENDEDOR, 
                                                                        CDMICROREGIAO, NMMICROREGIAO, CDCLIENTE, NMRAZSOCCLIE, NMFANTCLIE, NRINSJURCLIE)
                                         VALUES(P_NRORG, 'ORGANIZACAO', V_DSANO, V_DSSEMESTRE, V_DSTRIMESTRE, V_DSBIMESTRE, V_DSMES, V_DSMES_ANO, V_ORDANOMES, V_INI_DT, V_ORD_ITEM, V_DSITEM, V_VR_ITEM, V_PERC_SOBRE_RECBRUTA,
                                                C_RESULTADO.CDEMPRESA, C_RESULTADO.NMEMPRESA, C_RESULTADO.CDMACROREGIAO, C_RESULTADO.NMMACROREGIAO, C_RESULTADO.SGESTADO, C_RESULTADO.NMESTADO, C_RESULTADO.CDVENDEDOR, C_RESULTADO.NMVENDEDOR, 
                                                C_RESULTADO.CDMICROREGIAO, C_RESULTADO.NMMICROREGIAO, C_RESULTADO.CDCLIENTE, C_RESULTADO.NMRAZSOCCLIE, C_RESULTADO.NMFANTCLIE, C_RESULTADO.NRINSJURCLIE);

                                   COMMIT;
                                   V_COUNT := V_COUNT +1;

                             --END LOOP; --FIM DO LOOP DE V_QRY_RESUMO_MACROREG
                          CLOSE CUR_RESUMO;--CLOSE DO CURSOR CUR_RESUMO
                          V_COUNT := 0;

                    END LOOP; -- FIM DO LOOP ARRAY_ESTRUTURA
                 EXIT WHEN C_DADOS_ESTRUTURA%NOTFOUND;
              END LOOP; --FIM DO LOOP DE C_DADOS_ESTRUTURA
            CLOSE C_DADOS_ESTRUTURA;--FIM DO LOOP C_DADOS_ESTRUTURA   
         END LOOP; --FIM DO LOOP C_RESULTADO                  

         DELETE CARTEIRA_DE_PEDIDOS
          WHERE DSDATA BETWEEN V_INI_DT AND V_FIM_DT;

         /*ROTINA DE CARTEIRA DE PEDIDOS*/                  
         OPEN C_PEDIDOS(P_GRUPPROD, V_INI_DT, V_FIM_DT);
            LOOP
               FETCH C_PEDIDOS INTO V_DTPEDIDO, V_CDFILIAL, V_DTENTPED, V_QTITEMPED, V_VRPREUNITPED, V_NRPEDIDO, V_CDARVPROD, V_CDPRODUTO, V_NMPRODUTO, V_CDCLIENTE, 
                        V_NMRAZSOCCLIE, V_NMFANTCLIE, V_NMFILIAL, V_CDSEGMER, V_DSSEGMER, V_CDGRUPCLIE, V_NMGRUPCLIE, V_CDATIVCLI, V_DSATIVCLI, V_CDVENDEDOR, 
                        V_NMVENDEDOR, V_CDGRUPPROD, V_NMGRUPPROD, V_CDSUBGRPROD, V_NMSUBGRPROD, V_SGESTADO, V_NMESTADO, V_CDMUNICIPIO, V_NMMUNICIPIO, V_CDEMPRESA, 
                        V_NMEMPRESA, V_NMRAZSOCEMPR, V_CDMACROREGIAO, V_NMMACROREGIAO, V_CDMICROREGIAO, V_NMMICROREGIAO, V_IDSITPED;
               EXIT WHEN C_PEDIDOS%NOTFOUND; 

               INSERT INTO CARTEIRA_DE_PEDIDOS(NRORG, DSDATA, DSMES_ANO, ORDANOMES, DSANO, DSMES, DSBIMESTRE, DSTRIMESTRE, DSSEMESTRE, DSQUADRIMESTRE,
                                               DTPEDIDO, CDFILIAL, DTENTPED, QTITEMPED, VRPREUNITPED, NRPEDIDO, CDARVPROD, CDPRODUTO, NMPRODUTO, CDCLIENTE, 
                                               NMRAZSOCCLIE, NMFANTCLIE, NMFILIAL, CDSEGMER, DSSEGMER, CDGRUPCLIE, NMGRUPCLIE, CDATIVCLI, DSATIVCLI, CDVENDEDOR, 
                                               NMVENDEDOR, CDGRUPPROD, NMGRUPPROD, CDSUBGRPROD, NMSUBGRPROD, SGESTADO, NMESTADO, CDMUNICIPIO, NMMUNICIPIO, CDEMPRESA, 
                                               NMEMPRESA, NMRAZSOCEMPR, CDMACROREGIAO, NMMACROREGIAO, CDMICROREGIAO, NMMICROREGIAO, IDSITPED)

                 VALUES(P_NRORG, V_INI_DT, V_DSMES_ANO, V_ORDANOMES, V_DSANO, V_DSMES, V_DSBIMESTRE, V_DSTRIMESTRE, V_DSSEMESTRE, V_DSQUADRIMESTRE,
                        V_DTPEDIDO, V_CDFILIAL, V_DTENTPED, V_QTITEMPED, V_VRPREUNITPED, V_NRPEDIDO, V_CDARVPROD, V_CDPRODUTO, V_NMPRODUTO, V_CDCLIENTE, 
                        V_NMRAZSOCCLIE, V_NMFANTCLIE, V_NMFILIAL, V_CDSEGMER, V_DSSEGMER, V_CDGRUPCLIE, V_NMGRUPCLIE, V_CDATIVCLI, V_DSATIVCLI, V_CDVENDEDOR, 
                        V_NMVENDEDOR, V_CDGRUPPROD, V_NMGRUPPROD, V_CDSUBGRPROD, V_NMSUBGRPROD, V_SGESTADO, V_NMESTADO, V_CDMUNICIPIO, V_NMMUNICIPIO, V_CDEMPRESA, 
                        V_NMEMPRESA, V_NMRAZSOCEMPR, V_CDMACROREGIAO, V_NMMACROREGIAO, V_CDMICROREGIAO, V_NMMICROREGIAO, V_IDSITPED);

               COMMIT;

            END LOOP;--FIM DO LOOP DE C_PEDIDOS
         CLOSE C_PEDIDOS;-- CLOSE DO CURSOR C_PEDIDOS 

         /*ROTINA DE RECEITA MENSAL*/                  
         DELETE RECEITA_MENSAL
          WHERE ORDANOMES = V_ORDANOMES;

         COMMIT;

         OPEN C_RECEITA_MENSAL(V_INI_DT, V_FIM_DT);
            LOOP
               FETCH C_RECEITA_MENSAL INTO V_VRSEGURO, V_VRFRETE, V_VRINCENTIVOS, V_VRMARKETING, V_VRDESPESAS, V_VR_CUSTO_VARIAVEL, V_QT_PRODUTO, V_VR_BRUTITEM, V_VR_FECP, 
                                           V_VR_IPI, V_VR_ICMS, V_VR_ICMS_ST, V_VR_PIS, V_VR_COFINS, V_VRCOMISSAO;
               EXIT WHEN C_RECEITA_MENSAL%NOTFOUND; 

               BEGIN 
                  SELECT SUM(NVL(MVD.QTMETAVENDA,0)) AS QTMETAVENDA, SUM(NVL(MVD.VRMETAVENDA,0)) AS VRMETAVENDA
                    INTO V_QT_OBJETIVO_FIS, V_QT_OBJETIVO_FIN
                    FROM METAVENDEDOR MVD, METAVENDA MV, PRODMETAVEND PMV
                   WHERE MVD.CDMETAVENDA = MV.CDMETAVENDA
                     AND MV.CDMETAVENDA  = PMV.CDMETAVENDA
                     AND ((DTINIMETVEND BETWEEN V_INI_DT AND V_FIM_DT) OR (DTFINMETAVEND BETWEEN V_INI_DT AND V_FIM_DT));
               EXCEPTION 
                  WHEN NO_DATA_FOUND THEN                                        

                     V_QT_OBJETIVO_FIS := 0;
                     V_QT_OBJETIVO_FIN := 0;

               END;

               INSERT INTO RECEITA_MENSAL(NRORG, DSDATA, DSANO, DSSEMESTRE, DSTRIMESTRE, DSBIMESTRE, DSQUADRIMESTRE, DSMES, DSMES_ANO, ORDANOMES, 
                                          VRSEGURO, VRFRETE, VRINCENTIVOS, VRMARKETING, VRDESPESAS, VR_CUSTO_VARIAVEL, QT_OBJETIVO_FIS, QT_OBJETIVO_FIN, QT_PRODUTO, 
                                          VR_BRUTITEM, VR_FECP, VR_IPI, VR_ICMS, VR_ICMSST, VR_PIS, VR_COFINS, VR_COMISSOES)

                VALUES(P_NRORG, V_INI_DT, V_DSANO, V_DSSEMESTRE, V_DSTRIMESTRE, V_DSBIMESTRE, V_DSQUADRIMESTRE, V_DSMES, V_DSMES_ANO, V_ORDANOMES, 
                       V_VRSEGURO, V_VRFRETE, V_VRINCENTIVOS, V_VRMARKETING, V_VRDESPESAS, V_VR_CUSTO_VARIAVEL, V_QT_OBJETIVO_FIS, V_QT_OBJETIVO_FIN, V_QT_PRODUTO, 
                       V_VR_BRUTITEM, V_VR_FECP, V_VR_IPI, V_VR_ICMS, V_VR_ICMS_ST, V_VR_PIS, V_VR_COFINS, V_VRCOMISSAO);

               COMMIT;

            END LOOP;--FIM DO LOOP DE C_RECEITA_MENSAL
         CLOSE C_RECEITA_MENSAL;-- CLOSE DO CURSOR C_RECEITA_MENSAL               

               FOR C_COLUMNS IN (SELECT DISTINCT  NVL(CDSUBGRPROD,'_') AS CDSUBGRPROD ,
                                        NMSUBGRPROD, 
                                        'QT_'||REPLACE(REPLACE(TRANSLATE(NMSUBGRPROD,'º''"*-+:.,^~´`]=§><|\!@#$%¨&()?°ª¬¢£³²¹çÇ',' '),' ',''),' ','_') NMCOLUMN_QT, 
                                        'VR_'||REPLACE(REPLACE(TRANSLATE(NMSUBGRPROD,'º''"*-+:.,^~´`]=§><|\!@#$%¨&()?°ª¬¢£³²¹çÇ',' '),' ',''),' ','_') NMCOLUMN_VR
                                   FROM FATURAMENTO_PRODVENDIDO
                                  ORDER BY 1) LOOP
                  BEGIN
                     SELECT 1
                       INTO V_EXISTE
                       FROM ALL_TAB_COLUMNS
                      WHERE OWNER       = P_OWNER
                        AND TABLE_NAME  = 'FATURAMENTO_PRODVENDIDO'
                        AND COLUMN_NAME = C_COLUMNS.NMCOLUMN_QT;
                  EXCEPTION 
                     WHEN NO_DATA_FOUND THEN                                        

                     V_EXISTE := '';

                  END;

                  IF V_EXISTE IS NULL THEN
                     V_COMANDO := 'ALTER TABLE FATURAMENTO_PRODVENDIDO ADD '||C_COLUMNS.NMCOLUMN_QT||' FLOAT';
                     DBMS_UTILITY.EXEC_DDL_STATEMENT(V_COMANDO);
                  END IF;

                  BEGIN
                     SELECT 1
                       INTO V_EXISTE
                       FROM ALL_TAB_COLUMNS
                      WHERE OWNER       = P_OWNER
                        AND TABLE_NAME  = 'FATURAMENTO_PRODVENDIDO'
                        AND COLUMN_NAME = C_COLUMNS.NMCOLUMN_VR;
                  EXCEPTION 
                     WHEN NO_DATA_FOUND THEN                                        

                     V_EXISTE := '';

                  END;                  

                  IF V_EXISTE IS NULL THEN
                     V_COMANDO := 'ALTER TABLE FATURAMENTO_PRODVENDIDO ADD '||C_COLUMNS.NMCOLUMN_VR||' FLOAT';
                     DBMS_UTILITY.EXEC_DDL_STATEMENT(V_COMANDO);       
                  END IF;                  

                  FOR C_PRODUTOS IN (SELECT NRORG, CDEMPRESA, CDMACROREGIAO, CDMICROREGIAO, NVL(CDVENDEDOR,'_') AS CDVENDEDOR, CDCLIENTE, CDPRODUTO, NVL(CDSUBGRPROD,'_') AS CDSUBGRPROD, ORDANOMES, NRPEDIDO, NRITEMPED, NRLANCTONF, NRSEQITPROD
                                       FROM FATURAMENTO_PRODVENDIDO
                                      WHERE DSDATA BETWEEN V_INI_DT AND V_FIM_DT
                                        AND NVL(CDSUBGRPROD,'_') = C_COLUMNS.CDSUBGRPROD
                                        AND NRORG = P_NRORG) LOOP


                     FOR C_RESULT IN (SELECT CASE WHEN NVL(CDSUBGRPROD,'_') = C_PRODUTOS.CDSUBGRPROD THEN (QT_PRODUTO) ELSE 0 END AS QT_PRODUTO,
                                             CASE WHEN NVL(CDSUBGRPROD,'_') = C_PRODUTOS.CDSUBGRPROD THEN (VR_BRUTITEM) ELSE 0 END AS VR_BRUTITEM
                                        FROM FATURAMENTO_PRODVENDIDO
                                       WHERE NRORG         = C_PRODUTOS.NRORG
                                         AND ORDANOMES     = C_PRODUTOS.ORDANOMES
                                         AND CDEMPRESA     = C_PRODUTOS.CDEMPRESA
                                         AND CDMACROREGIAO = C_PRODUTOS.CDMACROREGIAO
                                         AND CDMICROREGIAO = C_PRODUTOS.CDMICROREGIAO
                                         AND NVL(CDVENDEDOR,'_')    = C_PRODUTOS.CDVENDEDOR
                                         AND NVL(CDSUBGRPROD,'_')   = C_PRODUTOS.CDSUBGRPROD
                                         AND CDCLIENTE     = C_PRODUTOS.CDCLIENTE                                                                           
                                         AND CDPRODUTO     = C_PRODUTOS.CDPRODUTO
                                         AND NRLANCTONF    = C_PRODUTOS.NRLANCTONF
                                         AND NRSEQITPROD   = C_PRODUTOS.NRSEQITPROD)LOOP                                         

                        V_COMANDO := 'UPDATE FATURAMENTO_PRODVENDIDO
                                         SET '||C_COLUMNS.NMCOLUMN_QT||' = '||NVL(REPLACE(C_RESULT.QT_PRODUTO,',','.'),0)||', 
                                             '||C_COLUMNS.NMCOLUMN_VR||' = '||NVL(REPLACE(C_RESULT.VR_BRUTITEM,',','.'),0)||
                                     ' WHERE NRORG         = '||CHR(39)||C_PRODUTOS.NRORG||CHR(39)||
                                     '   AND ORDANOMES     = '||CHR(39)||C_PRODUTOS.ORDANOMES||CHR(39)||
                                     '   AND CDEMPRESA     = '||CHR(39)||C_PRODUTOS.CDEMPRESA||CHR(39)||
                                     '   AND CDMACROREGIAO = '||CHR(39)||C_PRODUTOS.CDMACROREGIAO||CHR(39)||
                                     '   AND CDMICROREGIAO = '||CHR(39)||C_PRODUTOS.CDMICROREGIAO||CHR(39)||
                                     '   AND NVL(CDVENDEDOR,'||CHR(39)||'_'||CHR(39)||')    = '||CHR(39)||C_PRODUTOS.CDVENDEDOR||CHR(39)||
                                     '   AND NVL(CDSUBGRPROD,'||CHR(39)||'_'||CHR(39)||')   = '||CHR(39)||C_PRODUTOS.CDSUBGRPROD||CHR(39)||
                                     '   AND CDCLIENTE     = '||CHR(39)||C_PRODUTOS.CDCLIENTE||CHR(39)||
                                     '   AND NRLANCTONF    = '||CHR(39)||C_PRODUTOS.NRLANCTONF||CHR(39)||
                                     '   AND NRSEQITPROD   = '||CHR(39)||C_PRODUTOS.NRSEQITPROD||CHR(39);

                        EXECUTE IMMEDIATE V_COMANDO;                     

                        COMMIT;

                     END LOOP;            

                  END LOOP;

               END LOOP;--FIM DO LOOP C_COLUMNS                  

      END LOOP;--FIM DO LOOP DE C_DATA 
   CLOSE C_DATA;--CLOSE DA ROTINA DO CURSOR C_DATA
END;
/

-- VERSAO --
BEGIN ATUVEROBJ('RESULTADO_GERAL_ERP','6.35.040'); END;
/
