    begin
      vSITUACAOPEDIDO = 'V';

      if (vCFOP='5.949') then
         vSITUACAOPEDIDO='B';

      /* VERIFICA O SALDO DO CLIENTE SE FOR NEGATIVO
         ELE COLOCA O PEDIDO COMO PENDENTE */
      select sum(VALORDOCUMENTO) from RECEBER
        where IDFILIAL = :IDFILIAL
          and IDCLIENTE = :vIDCLIENTE
          and VALORPAGAMENTO is null
       into :vSALDO_RECEBER;

      if (vSALDO_RECEBER is null) then vSALDO_RECEBER = 0;
      if (vLIMITE_CREDITO is null) then vLIMITE_CREDITO = 0;

      if (:vSALDO_RECEBER > vLIMITE_CREDITO) then
         vSITUACAOPEDIDO='P';


      select cast(max(P.IDPEDIDO) as integer)+1 from PEDIDO P
       where P.IDFILIAL = :IDFILIAL
         and P.IDFOLHA = 9
        into :vINC_IDPEDIDO;

      if (vINC_IDPEDIDO is null) then vINC_IDPEDIDO = 1;

      if (not exists (select P.IDPEDIDOPALM from PEDIDO P where P.IDPEDIDOPALM = :vIDPEDIDOPALM
                                                            and p.IDFOLHA=9
                                                            and p.ARQUIVO_PALM = :ARQUIVO_PALM
                                                            and p.IDREPRESENTANTE = :vIDREPRESENTANTE
                                                            and P.IDFILIAL = :vIDFILIAL)) then begin
         insert into PEDIDO (IDFILIAL,IDREPRESENTANTE,IDPEDIDO,IDFOLHA, IDPEDIDOPALM,IDCLIENTE,          DATAPEDIDO, IDFORMAPAGTO,
                             IDCONDICAOPAGTO, IDCFOP, IDTABELAPRECO     ,IDCENTROCUSTO, SITUACAOPEDIDO, PARCELA, DATADIGITACAO,
                             ENTREGARPEDIDO, ARQUIVO_PALM, TOTALDESCONTO, OBS01, TOTALPEDIDO, OBS_EXTENSO)
                      values(:vIDFILIAL,:vIDREPRESENTANTE,:vINC_IDPEDIDO,'9',:vIDPEDIDOPALM,:vIDCLIENTE,:DATAIMPORT, :vIDFORMAPAGTO,
                             :vIDCONDICAOPAGTO, :vIDCFOP, :vIDTABELAPRECO, :vIDCENTROCUSTO, :vSITUACAOPEDIDO,'1', :vDTEMISSAO,
                             'S', :ARQUIVO_PALM, (select sum((IT.VALORUNITARIO/10000)*(IT.QTDEPEDIDO/10000)) from ITENSPEDIDOPALM IT
                                                    where IT.IDFILIAL = :IDFILIAL
                                                      and IT.ITEMTROCA = 'S'
                                                      and IT.IDPEDIDOPALM = :vIDPEDIDOPALM),:VOBS1, :VTOTAL_PEDIDO, :VOBSERVACAO_NFE );
      end

 /*     ITENS PEDIDO  */
      for select ITP.UNIDADEMEDIDA,ITP.QTDEPEDIDO, ITP.IDPRODUTO, UN.FATORCONVERSAO, ITP.VALORUNITARIOTABELA,
                 ITP.VALORUNITARIO, ITP.DESCONTO, ITP.ITEMTROCA from ITENSPEDIDOPALM ITP
             left join UNIDADEMEDIDA UN
               on UN.IDUNIDADEMEDIDA = ITP.UNIDADEMEDIDA
              and UN.IDFILIAL = :vIDFILIAL
           where ITP.IDFILIAL = :vIDFILIAL
             and ITP.IDREPRESENTANTE = :vIDREPRESENTANTE
             and ITP.IDPEDIDOPALM = :vIDPEDIDOPALM
            into :vIDUNIDADEMEDIDA, :vQTDEPEDIDO, :vIDPRODUTO, :vFATORCONVERSAO, :vPRECOTABELA,:vPRECOVENDA,
                 :vTAXADESCONTO, :vITEMTROCA
      do
        begin

          select u.fatorconversao from UNIDADEMEDIDA U
          where u.idfilial = :vidfilial
          and   U.idunidademedida = :vidunidademedida
          into :vfatorconversao1 ;

          if (vfatorconversao <> vfatorconversao1) then
             vfatorconversao = vfatorconversao1;

          vPRECOTABELA = vPRECOTABELA/10000;
          vPRECOVENDA = vPRECOVENDA/10000;
          vQTDEPEDIDO = vQTDEPEDIDO/10000;
          vTAXADESCONTO = vTAXADESCONTO/100;

          if (not exists (select IT.IDPEDIDO from ITENSPEDIDO IT  where IT.IDPEDIDOPALM = :vIDPEDIDOPALM
                                                                    and IT.IDREPRESENTANTE= :vIDREPRESENTANTE
                                                                    and IT.IDPRODUTO = :vIDPRODUTO
                                                                    and IT.ARQUIVO_PALM = :ARQUIVO_PALM
                                                                    and IT.IDUNIDADEMEDIDA = :vIDUNIDADEMEDIDA
                                                                    and IT.IDFILIAL = :vIDFILIAL)) then begin

             insert into ITENSPEDIDO(IDFILIAL, IDPEDIDOPALM, IDPEDIDO, IDFOLHA, IDUNIDADEMEDIDA, QTDEPEDIDO, IDPRODUTO,FATORCONVERSAO,
                                    IDREPRESENTANTE, PRECOTABELA, PRECOVENDA, TAXADESCONTO, DTIMPORT, ARQUIVO_PALM, TROCA)
                             values(:vIDFILIAL,:vIDPEDIDOPALM,:vINC_IDPEDIDO,'9',:vIDUNIDADEMEDIDA, :vQTDEPEDIDO, :vIDPRODUTO,:vFATORCONVERSAO,
                                    :vIDREPRESENTANTE, :vPRECOTABELA, :vPRECOVENDA,((:vPRECOVENDA/:vPRECOTABELA)-1)*100, :DATAIMPORT, :ARQUIVO_PALM, :VITEMTROCA);

            /* ATUALIZA ITENSPEDIDO PRECO*/
            select P.CUSTONOTAUNIT, P.CUSTOTRIBUTOSUNIT, P.CUSTOSENCARGOSUNIT, P.COMISSAOBALCAO, P.COMISSAOINTERIOR, P.COMISSAOPRACA from PRODUTO P
              where P.IDFILIAL = :vIDFILIAL
                and P.IDPRODUTO = :vIDPRODUTO
                into :vCUSTONOTAUNIT, :vCUSTOTRIBUTOUNIT, :vCUSTOSENCARGOS, :vCOMISSAOBALCAO, :vCOMISSAOINTERIOR, :vCOMISSAOPRACA;

            update ITENSPEDIDO IT
               set IT.CUSTONOTA = :vCUSTONOTAUNIT*:vFATORCONVERSAO,
                   IT.CUSTOENCARGOS = :vCUSTOSENCARGOS*:vFATORCONVERSAO,
                   IT.CUSTOTRIBUTADO = :vCUSTOTRIBUTOUNIT*:vFATORCONVERSAO,
                   IT.TAXACOMISSAO = IF_SN(:vCATEGORIA,'=','B',:vCOMISSAOBALCAO,1)*
                                     IF_SN(:vCATEGORIA,'=','I',:vCOMISSAOINTERIOR,1)*
                                     IF_SN(:vCATEGORIA,'=','P',:vCOMISSAOPRACA,1)
               where IT.IDFILIAL = :vIDFILIAL
                 and IT.IDPEDIDO = :vINC_IDPEDIDO
                 and IT.IDREPRESENTANTE= :vIDREPRESENTANTE
                 and IT.IDPRODUTO = :vIDPRODUTO
                 and IT.IDUNIDADEMEDIDA = :vIDUNIDADEMEDIDA;
          end
      end

      /* ATUALIZA PEDIDO PRECO*/
      select sum(IT.PRECOVENDA*IT.QTDEPEDIDO),sum(((IT.PRECOVENDA*IT.QTDEPEDIDO)*IF_SN(R.CATEGORIA,'=','B',P.COMISSAOBALCAO,1)*
                                                                                 IF_SN(R.CATEGORIA,'=','I',P.COMISSAOINTERIOR,1)*
                                                                                 IF_SN(R.CATEGORIA,'=','P',P.COMISSAOPRACA,1)/100))  from ITENSPEDIDO IT
           left join PRODUTO P
             on P.IDFILIAL  = :vIDFILIAL
            and P.IDPRODUTO = IT.IDPRODUTO

           join REPRESENTANTE R
             on R.IDREPRESENTANTE = :vIDREPRESENTANTE

           where IT.IDFILIAL = :vIDFILIAL
             and IT.IDPEDIDO = :vINC_IDPEDIDO
             and IT.IDFOLHA =  9
             into :vTOTALPRODUTO, :vTOTALCOMISSAO;

           update PEDIDO PE
                set PE.TOTALDESCONTO = 0
              where PE.IDFILIAL = :IDFILIAL
                and PE.TOTALDESCONTO is null
                and PE.IDPEDIDO = :vINC_IDPEDIDO
                and PE.IDFOLHA = 9;

           update PEDIDO PE
              set PE.TOTALPRODUTO  = :vTOTALPRODUTO,
                  PE.TOTALPEDIDO   = :vTOTALPRODUTO-PE.TOTALDESCONTO,
                  PE.TOTALCOMISSAO = :vTOTALCOMISSAO,
                  PE.SITUACAOPEDIDO = :vSITUACAOPEDIDO
              where PE.IDFILIAL = :IDFILIAL
                and PE.IDPEDIDO = :vINC_IDPEDIDO
                and PE.IDFOLHA = 9;

      /*  CONTAS A RECEBER */
      if (vGERAFINANCEIRO = 'S') then begin
         if (not exists(select R.IDRECEBER from RECEBER R where R.IDFILIAL = :vIDFILIAL
                                                            and R.IDRECEBER = :vINC_IDPEDIDO
                                                            and R.IDFOLHA = 9
                                                            and R.IDORDEM = 1)) then begin
              insert into RECEBER (IDFILIAL, IDRECEBER, IDFOLHA, IDORDEM, DOCUMENTO, DATAVENCIMENTO, DATAEMISSAO, IDCLIENTE,
                                   IDREPRESENTANTE, IDFORMAPAGTO, VALORDOCUMENTO,IDCENTROCUSTO)
                           values (:vIDFILIAL, :vINC_IDPEDIDO,'9'   ,'1'     ,'PALM'    , :DATAIMPORT+:vPRAZOPAGTO, :vDTEMISSAO, :vIDCLIENTE,
                                   :vIDREPRESENTANTE, :vIDFORMAPAGTO,:vTOTALPRODUTO,:vIDCENTROCUSTO );
         end
      end
   end
   delete from PEDIDOPALM;
   delete from ITENSPEDIDOPALM;
end^


ALTER PROCEDURE RECEBENDO_PALM_AFA (
    IDFILIAL INTEGER,
    DATAIMPORT DATE,
    IDREPRESENTANTE INTEGER)
RETURNS (
    IDPEDIDO INTEGER)
AS
declare variable VIDFILIAL smallint;
declare variable VIDREPRESENTANTE integer;
declare variable VPUXAR_PEDIDO_PENDENTE varchar(1);
declare variable VSIT_CREDITO varchar(1);
declare variable VTAXACOMISSAO numeric(15,2);
declare variable VIDPEDIDOPALM integer;
declare variable VIDPEDIDO integer;
declare variable VCNPJ char(18);
declare variable VIDPEDIDOCLIENTE varchar(20);
declare variable VDTEMISSAO date;
declare variable VIDCLIENTE integer;
declare variable VIDFORMAPAGTO smallint;
declare variable VIDCONDICAOPAGTO smallint;
declare variable VIDCFOP smallint;
declare variable VIDTABELAPRECO smallint;
declare variable VINC_IDPEDIDO integer;
declare variable VIDPRODUTO integer;
declare variable VIDUNIDADEMEDIDA integer;
declare variable VQTDEPEDIDO numeric(10,3);
declare variable VFATORCONVERSAO integer;
declare variable VPRECOTABELA numeric(16,4);
declare variable VPRECOVENDA numeric(16,4);
declare variable VTAXADESCONTO numeric(10,2);
declare variable VCUSTONOTAUNIT numeric(16,2);
declare variable VCUSTOTRIBUTOUNIT numeric(16,2);
declare variable VCUSTOSENCARGOS numeric(16,2);
declare variable VTOTALPRODUTO numeric(16,2);
declare variable VTOTALCOMISSAO numeric(16,2);
declare variable VPRAZOPAGTO integer;
declare variable VIDCENTROCUSTO integer;
declare variable VCFOP varchar(5);
declare variable VSITUACAOPEDIDO char(1);
declare variable VITEMTROCA char(1);
declare variable VGERAFINANCEIRO char(1);
declare variable VCATEGORIA char(1);
declare variable VCOMISSAOBALCAO numeric(10,2);
declare variable VCOMISSAOINTERIOR numeric(10,2);
declare variable VCOMISSAOPRACA numeric(10,2);
declare variable VSALDO_RECEBER numeric(16,2);
declare variable VLIMITE_CREDITO numeric(16,2);
declare variable VQTDEATUAL numeric(10,3);
declare variable VTAXADESC_TAB numeric(10,2);
declare variable VPRECOTABELA_ORI numeric(15,4);
declare variable VFATORPRODUTO integer;
declare variable VPALM_IDFORMAPAGTO_TROCA integer;
declare variable VPALM_IDFORMAPAGTO_BONIF integer;
declare variable VPALM_IDCFOP_TROCA integer;
declare variable VPALM_IDCFOP_BONIF integer;
declare variable VPALM_IDFOLHA smallint;
declare variable VOBS1 varchar(60);
declare variable VOBS2 varchar(60);
declare variable VTOTAL_PEDIDO numeric(16,2);
declare variable VTOTAL_DESCONTO numeric(16,2);
declare variable VTOTAL_COM_DESCONTO numeric(16,2);
declare variable VNRSERIE varchar(15);
declare variable VTAXA_SERIE numeric(10,2);
declare variable RATEIO numeric(10,2);
declare variable VTIPOPEDIDO_PALM varchar(1);
declare variable VTIPOEMPRESA varchar(20);
declare variable VTMP_TOTALPEDIDO numeric(16,2);
declare variable VDATAPEDIDO date;
declare variable VFATORCONVERSAO1 integer;
declare variable VTAXAFRETE numeric(15,2);
declare variable VTAXAFINANCEIRO numeric(15,2);
declare variable VDESCONTO numeric(15,2);
declare variable VPALM_CENTROCUSTO_TROCA integer;
declare variable VPALM_CENTROCUSTO_BONIF integer;
declare variable VPARCELA integer;
declare variable NPARCELA integer;
declare variable NTOTAL_PARCELAS numeric(15,2);
declare variable VIDCONSIGNACAO integer;
declare variable VCONTROLA_PRODUTO_REPRESENTANTE varchar(1);
declare variable VFAZER_CONSISTENCIA_MOBILE varchar(1);
declare variable VCONTADOR integer;
declare variable VVALORDIF integer;
declare variable XPRECOVENDA numeric(16,2);
declare variable XIDPEDIDOPALM integer;
declare variable VTOTALCUSTO numeric(16,2);
declare variable VSITCERTAPEDIDO varchar(1);
declare variable VSIT_PEDIDO_MOBILE varchar(1);
declare variable VESTOQUE_REP varchar(1);
declare variable VPRAZO2 smallint;
declare variable VPRAZO3 smallint;
declare variable VPRAZO4 smallint;
declare variable VPRAZO5 smallint;
declare variable VPRAZO6 smallint;
declare variable VOBSERVACAO_NFE blob sub_type 1 segment size 80;
declare variable VUF varchar(2);
declare variable VIDTRIBUTO integer;
declare variable VTOTAL_BASE numeric(15,2);
declare variable VTOTAL_ICMS numeric(15,2);
declare variable VTOTAL_BASE_ST numeric(15,2);
declare variable VTOTAL_ICMS_ST numeric(15,2);
declare variable VCLFISCAL varchar(3);
declare variable VTAXA_ICMS numeric(15,2);
declare variable VALIQUOTA_ST numeric(15,2);
declare variable VUF_FILIAL varchar(2);
declare variable VCFOP_FORA_ESTADO integer;
declare variable VNMRAZAO varchar(60);
declare variable VNMFANTASIA varchar(60);
declare variable VENDERECO varchar(40);
declare variable VCEP varchar(9);
declare variable VBAIRRO varchar(25);
declare variable VIDCIDADE smallint;
declare variable VTIPOCLIENTE varchar(1);
declare variable VIE varchar(20);
declare variable VCPF varchar(14);
declare variable VRG varchar(18);
declare variable VFONE varchar(13);
declare variable VCELULAR varchar(13);
declare variable VEMAIL varchar(150);
declare variable VIDATIVIDADE smallint;
declare variable VIDCONVENIO smallint;
declare variable VIDREGIAO smallint;
declare variable VCLIENTE_CONTRIBUINTE varchar(1);
declare variable VCPF_CLI varchar(14);
declare variable VCNPJ_CLI varchar(18);
declare variable VIDCLIENTEMAX integer;
declare variable VTAXA_COMISSAO_REP numeric(10,2);
declare variable IDCFOP_CPF integer;
declare variable VOBSERVACAO blob sub_type 1 segment size 80;
declare variable VOBSERVACAO_ITEM varchar(60);
declare variable VPRAZO smallint;
declare variable VDIGITAR_PRAZO_ANDROID varchar(1);
begin
  select F.PALM_IDCENTROCUSTO_TROCA,
         F.PALM_IDCENTROCUSTO_BONIFICACAO,
         F.IDCENTROCUSTOPEDIDO,
         F.PALM_IDFORMAPAGTO_TROCA,
         F.PALM_IDFORMAPAGTO_BONIF,
         F.PALM_IDCFOP_TROCA,
         F.PALM_IDCFOP_BONIF,
         F.PALM_IDFOLHA,
         F.TIPOEMPRESA,
         F.PUXAR_PEDIDO_PALM_PENDENTE,
         F.FAZER_CONSISTENCIA_MOBILE,
         F.UF,
         F.IDCFOP_FORA_ESTADO from FILIAL F
     where F.IDFILIAL = :IDFILIAL

      into :VPALM_CENTROCUSTO_TROCA,
           :VPALM_CENTROCUSTO_BONIF,
           :vIDCENTROCUSTO,
           :VPALM_IDFORMAPAGTO_TROCA,
           :VPALM_IDFORMAPAGTO_BONIF,
           :VPALM_IDCFOP_TROCA,
           :VPALM_IDCFOP_BONIF,
           :VPALM_IDFOLHA,
           :VTIPOEMPRESA,
           :VPUXAR_PEDIDO_PENDENTE,
           :VFAZER_CONSISTENCIA_MOBILE,
           :VUF_FILIAL,
           :VCFOP_FORA_ESTADO;


  select C.OBSERVACAO_NFE, C.IDCFOP_PARA_CPF, C.DIGITAR_PRAZO_ANDROID from CONFIGURACAO C
     where C.IDFILIAL = :IDFILIAL
      into :VOBSERVACAO_NFE, :IDCFOP_CPF, :VDIGITAR_PRAZO_ANDROID;

  if (:VPALM_IDFOLHA is null) then
     VPALM_IDFOLHA = 99 ;

  if(:VDIGITAR_PRAZO_ANDROID is null) then
    VDIGITAR_PRAZO_ANDROID = 'N';

  if(:VPUXAR_PEDIDO_PENDENTE is null) then
    VPUXAR_PEDIDO_PENDENTE = 'N';


  delete from pedidopalm P
  where not exists(select I.IDPEDIDO  from itenspedidopalm I
                  where I.IDFILIAL = P.IDFILIAL
                   and   I.IDPEDIDOPALM = P.IDPEDIDOPALM
                   and   I.IDREPRESENTANTE = :IDREPRESENTANTE)
    and p.IDREPRESENTANTE = :IDREPRESENTANTE;


  delete from pedidopalm P
    WHERE P.total_pedido = 0
       and p.IDREPRESENTANTE = :IDREPRESENTANTE;


      -------------------------
      -- VERIFICA SE EXISTE PEDIDO INCOSISTENTE
      -------------------------

     update PEDIDOPALM PP
        set PP.PEDIDO_INCOSISTENTE = null
      where PP.IDFILIAL = :IDFILIAL
        and PP.IDREPRESENTANTE = :IDREPRESENTANTE
        and not PP.PEDIDO_INCOSISTENTE is null;

      for select PP.IDPEDIDOPALM, PP.TOTAL_PEDIDO from PEDIDOPALM PP
        where PP.IDFILIAL = :IDFILIAL
          and PP.IDREPRESENTANTE = :IDREPRESENTANTE
        into :XIDPEDIDOPALM, :VTOTAL_PEDIDO
      do
      begin
--          select  sum(cast(ip.valorunitario*UN.fatorconversao as numeric(15,4))*ip.qtdepedido)  from ITENSPEDIDOPALM IP
          select  sum(ip.valorunitario*ip.qtdepedido)  from ITENSPEDIDOPALM IP

             left join UNIDADEMEDIDA UN
               on UN.IDUNIDADEMEDIDA = IP.UNIDADEMEDIDA
              and UN.IDFILIAL = :IDFILIAL

           where IP.IDFILIAL = :IDFILIAL
             and IP.IDPEDIDOPALM = :XIDPEDIDOPALM
             and IP.IDREPRESENTANTE = :IDREPRESENTANTE
            into :XPRECOVENDA;
    
          VVALORDIF = XPRECOVENDA-:VTOTAL_PEDIDO;
          if (:VVALORDIF > 2) then
          begin
             update PEDIDOPALM PP
                set PP.PEDIDO_INCOSISTENTE = 'S'
              where PP.IDFILIAL = :IDFILIAL
                and PP.IDPEDIDOPALM = :XIDPEDIDOPALM
                and PP.IDREPRESENTANTE = :IDREPRESENTANTE;

             INSERT INTO HISTORICO_PEDIDO_PALM (IDCONTROLE, IDPEDIDOPALM, HISTORICO) VALUES (0, :XIDPEDIDOPALM, 'ENTROU NO PEDIDO INCOSISTENTE');
          end

    
          if (:VVALORDIF < 0) then
          begin
             update PEDIDOPALM PP
                set PP.PEDIDO_INCOSISTENTE = 'S'
              where PP.IDFILIAL = :IDFILIAL
                and PP.IDPEDIDOPALM = :XIDPEDIDOPALM
                and PP.IDREPRESENTANTE = :IDREPRESENTANTE;
              INSERT INTO HISTORICO_PEDIDO_PALM (IDCONTROLE, IDPEDIDOPALM, HISTORICO) VALUES (0, :XIDPEDIDOPALM, 'ENTROU NO PEDIDO INCOSISTENTE');
          end
      end
      VTOTAL_PEDIDO = null;

      --------------------------
      -- FIM DO PEDIDO INCOSISTENTE
      --------------------------


  for select PM.IDFILIAL, PM.IDREPRESENTANTE, PM.IDPEDIDOPALM, PM.IDPEDIDO, PM.CNPJ,
          PM.IDPEDIDOCLIENTE, PM.DTEMISSAO, PM.IDCLIENTE, PM.IDFORMAPAGTO,PM.IDCONDICAOPAGTO,
          CF.IDCFOP, PM.IDTABELAPRECO, PGT.PRAZO, CF.CFOP, CF.GERAFINANCEIRO, R.CATEGORIA,
          C.LIMITECREDITO, PM.OBS1, PM.OBS2, PM.TOTAL_PEDIDO, PM.TOTAL_DESCONTO, PM.TOTAL_COM_DECONTO,
          PM.NRSERIE, PM.DATAPEDIDO, C.situacaocredito, PM.parcela, PM.IDCONSIGNACAO, PM.sitpedido, pgt.prazo2, pgt.prazo3, pgt.prazo4, pgt.prazo5,
          pgt.prazo6, CI.UF, PM.NMRAZAO, PM.NMFANTASIA, PM.ENDERECO, PM.CEP, PM.BAIRRO, PM.IDCIDADE, PM.TIPOCLIENTE, PM.IE, PM.CPF, PM.RG, PM.FONE, PM.CELULAR,
          PM.EMAIL, PM.IDATIVIDADE,PM.IDCONVENIO,PM.IDREGIAO, PM.CLIENTE_CONTRIBUINTE, R.TAXAESPECIAL, PM.OBS_EXTENSO, PM.PRAZO from PEDIDOPALM  PM

          left join CONDICAOPAGTO PGT
           on  PGT.IDCONDICAOPAGTO = PM.IDCONDICAOPAGTO

          Join REPRESENTANTE R
            on R.IDREPRESENTANTE = PM.IDREPRESENTANTE

          left join CLIENTE C
            on C.IDCLIENTE = PM.IDCLIENTE

          left join CIDADE CI
            on CI.IDCIDADE = C.IDCIDADE


          left join CFOP CF
            on CF.CFOP = PM.NATOPERACAO
           and CF.IDFILIAL = :IDFILIAL

           where PM.IDFILIAL = :IDFILIAL
             and PM.IDREPRESENTANTE = :IDREPRESENTANTE
             and PM.PEDIDO_INCOSISTENTE is null

          into :vIDFILIAL, :vIDREPRESENTANTE, :vIDPEDIDOPALM, :vIDPEDIDO, :vCNPJ,
               :vIDPEDIDOCLIENTE, :vDTEMISSAO, :vIDCLIENTE, :vIDFORMAPAGTO, :vIDCONDICAOPAGTO,
               :vIDCFOP, :vIDTABELAPRECO, :vPRAZOPAGTO, :vCFOP, :vGERAFINANCEIRO, :vCATEGORIA,
               :vLIMITE_CREDITO, :VOBS1, :VOBS2, :VTOTAL_PEDIDO, :VTOTAL_DESCONTO, VTOTAL_COM_DESCONTO,
               :VNRSERIE, :VDATAPEDIDO, :vsit_credito, :vparcela, :VIDCONSIGNACAO, :vsit_pedido_mobile, :vprazo2, :vprazo3, :vprazo4, :vprazo5, :vprazo6, :VUF,
               :VNMRAZAO, :VNMFANTASIA, :VENDERECO, :VCEP, :VBAIRRO, :VIDCIDADE, :VTIPOCLIENTE, :VIE, :VCPF, :VRG, :VFONE, :VCELULAR, :VEMAIL, :VIDATIVIDADE, :VIDCONVENIO, :VIDREGIAO, :VCLIENTE_CONTRIBUINTE, :VTAXA_COMISSAO_REP, :VOBSERVACAO,
               :VPRAZO

  do
    begin


      if (:VPRAZO is null) then
        VPRAZO = -1;


      if (:VPUXAR_PEDIDO_PENDENTE = 'S') then
         vSITUACAOPEDIDO = 'P';
      else
         vSITUACAOPEDIDO = 'V';

      -- VERIFICA O SALDO DO CLIENTE SE FOR NEGATIVO
      --   ELE COLOCA O PEDIDO COMO PENDENTE
      select sum(VALORDOCUMENTO) from RECEBER
        where IDFILIAL = :IDFILIAL
          and IDCLIENTE = :vIDCLIENTE
          and VALORPAGAMENTO is null
       into :vSALDO_RECEBER;

      if (vSALDO_RECEBER is null) then vSALDO_RECEBER = 0;
      if (vLIMITE_CREDITO is null) then vLIMITE_CREDITO = 0;

      if (:VPUXAR_PEDIDO_PENDENTE <> 'S') then
      begin
          if (vsit_credito = 'S') then
             vsituacaopedido = IF_SS(:VFAZER_CONSISTENCIA_MOBILE,'=','S','P','V');
      end

      -- VERIFICANDO FORMAS DE PAGAMENTO
      if (:VPUXAR_PEDIDO_PENDENTE <> 'S') then
      begin
          if (:VPALM_IDFORMAPAGTO_TROCA = :VIDFORMAPAGTO) then begin
             vSITUACAOPEDIDO='T';
             VIDCFOP = :VPALM_IDCFOP_TROCA;
             if (:VPALM_CENTROCUSTO_TROCA > 0) then  VIDCENTROCUSTO = :VPALM_CENTROCUSTO_TROCA;
          end

          if (:VPALM_IDFORMAPAGTO_BONIF = :VIDFORMAPAGTO) then begin
             vSITUACAOPEDIDO='B';
             VIDCFOP = :VPALM_IDCFOP_BONIF;
             if (:VPALM_CENTROCUSTO_BONIF > 0) then  VIDCENTROCUSTO = :VPALM_CENTROCUSTO_BONIF;
          end
      end

      if(:vpuxar_pedido_pendente = 'S')then
      begin
          if (:VPALM_IDFORMAPAGTO_TROCA = :VIDFORMAPAGTO) then begin
             vsit_pedido_mobile = 'T';
             VIDCFOP = :VPALM_IDCFOP_TROCA;
             if (:VPALM_CENTROCUSTO_TROCA > 0) then  VIDCENTROCUSTO = :VPALM_CENTROCUSTO_TROCA;
          end

          if (:VPALM_IDFORMAPAGTO_BONIF = :VIDFORMAPAGTO) then begin
             vsit_pedido_mobile = 'B';
             VIDCFOP = :VPALM_IDCFOP_BONIF;
             if (:VPALM_CENTROCUSTO_BONIF > 0) then  VIDCENTROCUSTO = :VPALM_CENTROCUSTO_BONIF;
          end
      end


      if (:VUF_FILIAL <> :VUF) then -- MUDA PARA CFOP FORA DO ESTADO
      begin
        VIDCFOP = :VCFOP_FORA_ESTADO;
      end


      if (:VTIPOCLIENTE = 'F') then
      begin
         if (:IDCFOP_CPF > 0) then
            VIDCFOP = :IDCFOP_CPF;
      end
      vsitcertapedido = vsituacaopedido;

/*
      vcontador = 0;
      while(vcontador <= 20) do
      begin
          select cast(max(F.INC_IDPEDIDO) as integer)+1 from FILIAL F
           where F.IDFILIAL = :IDFILIAL
            into :vINC_IDPEDIDO;
          if (vINC_IDPEDIDO is null) then vINC_IDPEDIDO = 1;
    
          update FILIAL F
             set F.INC_IDPEDIDO = :VINC_IDPEDIDO
           where F.IDFILIAL = :IDFILIAL;
    
           if (not exists (select P.IDPEDIDO from PEDIDO P
                       where P.idfilial = :vidfilial
                         and P.idpedido = :vinc_idpedido
                         and p.idfolha = :vpalm_idfolha)) then
           begin
             break;
           end

           vcontador = vcontador + 1;
      end
*/


      select REPR.CONTROLA_PRODUTO_REPRESENTANTE from REPRESENTANTE REPR
        where REPR.IDREPRESENTANTE = :VIDREPRESENTANTE
          into :VCONTROLA_PRODUTO_REPRESENTANTE;

      if (:VCONTROLA_PRODUTO_REPRESENTANTE <> 'S') then
      begin
        VIDCONSIGNACAO = null;
        vestoque_rep = 'N';
      end
      else
        vestoque_rep = 'S';


      INSERT INTO HISTORICO_PEDIDO_PALM (IDCONTROLE, IDPEDIDOPALM, HISTORICO) VALUES (0, :VIDPEDIDOPALM, 'ANTES DE ENTRAR PARA INSERIR PEDIDO');

      if (not exists (select P.IDPEDIDOPALM from PEDIDO P where P.IDPEDIDOPALM = :vIDPEDIDOPALM
                                                            and p.IDFOLHA=:VPALM_IDFOLHA
                                                            and p.datapedido = :vdtemissao
                                                            and p.IDREPRESENTANTE = :vIDREPRESENTANTE
                                                            and P.IDFILIAL = :vIDFILIAL)) then
      begin

          INSERT INTO HISTORICO_PEDIDO_PALM (IDCONTROLE, IDPEDIDOPALM, HISTORICO) VALUES (0, :VIDPEDIDOPALM, 'ENTROU NA ROTINA PARA INSERIR PEDIDO');

          select C.CPF, C.CNPJ from CLIENTE C
            where C.IDCLIENTE = :VIDCLIENTE
              into :VCPF_CLI, :VCNPJ_CLI;

          if (vcpf_cli is null) then vcpf_cli = '';
          if (vcnpj_cli is null) then vcnpj_cli = '';

          if (:VTIPOCLIENTE = 'F') then
          begin
            if (:VCPF_CLI <> :VCPF) then
            begin
               select max(CL.IDCLIENTE)+1 from CLIENTE CL
                  into :VIDCLIENTEMAX;

               if (:VIDCLIENTEMAX is null) then VIDCLIENTEMAX = 1;

               INSERT INTO CLIENTE (IDFILIAL, IDCLIENTE, IDCONVENIO, IDCIDADE, IDREGIAO, IDATIVIDADE, NOME, FANTASIA, ENDERECO, BAIRRO, CEP, CNPJ, INSESTADUAL, CPF, RG, FONE, FAX, CELULAR, EMAIL, DTCADASTRO, TIPOCLIENTE, IDREPRESENTANTE, IDCLIENTE_PALM, IDREPRESENTANTE_PALM, CLIENTE_CONTRIBUINTE)
                             VALUES(:IDFILIAL, :VIDCLIENTEMAX, :VIDCONVENIO, :VIDCIDADE, :VIDREGIAO, :VIDATIVIDADE,:VNMRAZAO, :VNMFANTASIA, :VENDERECO, :VBAIRRO, :VCEP, :VCNPJ, :VIE, :VCPF, :VRG, :VFONE, null, :VCELULAR, :VEMAIL, current_date, :VTIPOCLIENTE, :VIDREPRESENTANTE, :VIDCLIENTE, :VIDREPRESENTANTE, :VCLIENTE_CONTRIBUINTE);

               VIDCLIENTE = VIDCLIENTEMAX;
            end
          end
          else
          begin
            if (:VTIPOCLIENTE = 'J') then
            begin
                if (:VCNPJ_CLI <> :VCNPJ) then
                begin
                   select max(CL.IDCLIENTE)+1 from CLIENTE CL
                      into :VIDCLIENTEMAX;
    
                   if (:VIDCLIENTEMAX is null) then VIDCLIENTEMAX = 1;
    
                   INSERT INTO CLIENTE (IDFILIAL, IDCLIENTE, IDCONVENIO, IDCIDADE, IDREGIAO, IDATIVIDADE, NOME, FANTASIA, ENDERECO, BAIRRO, CEP, CNPJ, INSESTADUAL, CPF, RG, FONE, FAX, CELULAR, EMAIL, DTCADASTRO, TIPOCLIENTE, IDREPRESENTANTE, IDCLIENTE_PALM, IDREPRESENTANTE_PALM, CLIENTE_CONTRIBUINTE)
                                 VALUES(:IDFILIAL, :VIDCLIENTEMAX, :VIDCONVENIO, :VIDCIDADE, :VIDREGIAO, :VIDATIVIDADE,:VNMRAZAO, :VNMFANTASIA, :VENDERECO, :VBAIRRO, :VCEP, :VCNPJ, :VIE, :VCPF, :VRG, :VFONE, null, :VCELULAR, :VEMAIL, current_date, :VTIPOCLIENTE, :VIDREPRESENTANTE, :VIDCLIENTE, :VIDREPRESENTANTE, :VCLIENTE_CONTRIBUINTE);
    
                   VIDCLIENTE = VIDCLIENTEMAX;
                end
            end
          end


          if (:VIDFILIAL = 1) then
             VINC_IDPEDIDO = gen_id(IDPEDIDO_FILIAL_1,1);
    
          if (:VIDFILIAL = 2) then
             VINC_IDPEDIDO = gen_id(IDPEDIDO_FILIAL_2,1);
    
          if (:VIDFILIAL = 3) then
             VINC_IDPEDIDO = gen_id(IDPEDIDO_FILIAL_3,1);

         insert into PEDIDO (IDFILIAL,IDREPRESENTANTE,IDPEDIDO,IDFOLHA, IDPEDIDOPALM,IDCLIENTE,          DATAPEDIDO, IDFORMAPAGTO,
                             IDCONDICAOPAGTO, IDCFOP, IDTABELAPRECO     ,IDCENTROCUSTO, SITUACAOPEDIDO, PARCELA, DATADIGITACAO,
                             ENTREGARPEDIDO, OBS01, OBS02, TOTALPRODUTO, TOTALDESCONTO, TOTALPEDIDO, TAXADESCONTO, TIPOPEDIDO_PALM, IDCONSIGNACAO, ANDROID, SIT_PEDIDO_MOBILE,
                             OBS_EXTENSO, OBSERVACAO, PRAZO_ANDROID)
                      values(:vIDFILIAL,:vIDREPRESENTANTE,:vINC_IDPEDIDO,:VPALM_IDFOLHA,:vIDPEDIDOPALM,:vIDCLIENTE,:vdtemissao, :vIDFORMAPAGTO,
                             :vIDCONDICAOPAGTO, :vIDCFOP, :vIDTABELAPRECO, :vIDCENTROCUSTO, :vSITUACAOPEDIDO,:vparcela, :vDTEMISSAO,
                             'S', :vOBS1,:VOBS2, :VTOTAL_PEDIDO, :VTOTAL_DESCONTO, :VTOTAL_COM_DESCONTO,
                             :VTAXA_SERIE, :VTIPOPEDIDO_PALM, :VIDCONSIGNACAO, 'S', :vsit_pedido_mobile, :VOBSERVACAO_NFE, :VOBSERVACAO, :VPRAZO);


    -- RATEANDO O VALOR
    RATEIO = 0;--(:VTOTAL_DESCONTO/:VTOTAL_PEDIDO)*100;

    --     ITENS PEDIDO
          for select ITP.UNIDADEMEDIDA,ITP.QTDEPEDIDO, ITP.IDPRODUTO, UN.FATORCONVERSAO, ITP.VALORUNITARIOTABELA,
                     ITP.VALORUNITARIO, ITP.DESCONTO, ITP.ITEMTROCA, ITP.OBSERVACAO from ITENSPEDIDOPALM ITP

                 left join UNIDADEMEDIDA UN
                   on UN.IDUNIDADEMEDIDA = ITP.UNIDADEMEDIDA
                  and UN.IDFILIAL = :vIDFILIAL

               where ITP.IDFILIAL = :vIDFILIAL
                 and ITP.IDREPRESENTANTE = :vIDREPRESENTANTE
                 and ITP.IDPEDIDOPALM = :vIDPEDIDOPALM
                into :vIDUNIDADEMEDIDA, :vQTDEPEDIDO, :vIDPRODUTO, :vFATORCONVERSAO, :vPRECOTABELA, :vPRECOVENDA,:vTAXADESCONTO, :vITEMTROCA, :VOBSERVACAO_ITEM
          do
            begin

              if (not exists (select IT.IDPEDIDO from ITENSPEDIDO IT  where IT.IDPEDIDO = :vinc_idpedido
                                                                        AND IT.idfolha = :vpalm_idfolha
                                                                        and IT.IDREPRESENTANTE= :vIDREPRESENTANTE
                                                                        and IT.IDPRODUTO = :vIDPRODUTO
                                                                        and IT.IDUNIDADEMEDIDA = :vIDUNIDADEMEDIDA
                                                                        and IT.IDFILIAL = :vIDFILIAL)) then begin

--                select IT.TAXADESCONTO, IT.PRECOUNIT from ITENSTABELAPRECO IT
--                  where IT.IDFILIAL = :VIDFILIAL
--                    and IT.IDTABELAPRECO = :VIDTABELAPRECO
--                    and IT.IDPRODUTO = :VIDPRODUTO
--                into :VTAXADESC_TAB, :VPRECOTABELA_ORI;
    
                -- VERIFICANDO O ESTOQUE ATUAL
                select P.QTDEATUAL, P.FATORCONVERSAO, P.IDTRIBUTO from PRODUTO P
                  where P.IDFILIAL = :VIDFILIAL
                    and P.IDPRODUTO = :VIDPRODUTO
                into :VQTDEATUAL, :VFATORPRODUTO, :VIDTRIBUTO;

                select r.taxafrete from cliente c
                join regiao r
                  on r.idregiao = c.idregiao
                  where c.idcliente = :vidcliente
                 into :vtaxafrete;

                if (:vtaxafrete is null) then vtaxafrete = 0;

                select c.taxafinaceiro from condicaopagto c
                where c.idcondicaopagto = :vidcondicaopagto
                into :vtaxafinanceiro;

                if (:vtaxafinanceiro is null) then vtaxafinanceiro = 0;

                vprecotabela_ori = vprecotabela_ori*:vfatorconversao;
                vprecotabela_ori = vprecotabela_ori+(:vprecotabela_ori*:vtaxafrete/100);
                vprecotabela_ori = vprecotabela_ori+(:vprecotabela_ori*:vtaxafinanceiro/100);
                VPRECOTABELA_ORI = cast(:VPRECOTABELA_ORI as numeric(15,2));
--                vdesconto = (((cast(:vprecovenda*:vfatorconversao as numeric(15,2)))/:vprecotabela)-1)*100;
                if (:VPRECOTABELA <> 0 ) then
                     vdesconto = cast(((:vprecovenda*100)/:vprecotabela) as numeric(15,2))-100;
                else
                     vdesconto = 0;




                 select CC.TOTAL_BASE, CC.TOTAL_ICMS, CC.VALORBASE_ST, CC.VALORICMS_ST,
                        CC.CLFISCAL, CC.TAXATRIBUTO, CC.ALIQUOTA_ST
                                                                             from CALCULA_TOTAIS_DE_PRODUTO(
                                                                              :VIDFILIAL,
                                                                              :VIDPRODUTO,
                                                                              :VIDTRIBUTO,
                                                                              :VQTDEPEDIDO,
--                                                                              cast(:vprecovenda*:vfatorconversao as numeric(15,4)),
                                                                              :vprecovenda,
                                                                              :VIDCFOP,
                                                                              :VUF,
                                                                              :VIDCLIENTE) CC
                    into :VTOTAL_BASE, :VTOTAL_ICMS, :VTOTAL_BASE_ST, :VTOTAL_ICMS_ST,
                         :VCLFISCAL, :VTAXA_ICMS, :VALIQUOTA_ST;




                insert into ITENSPEDIDO(IDFILIAL, IDPEDIDOPALM, IDPEDIDO, IDFOLHA, IDUNIDADEMEDIDA, QTDEPEDIDO, IDPRODUTO,FATORCONVERSAO,
                                        IDREPRESENTANTE, PRECOTABELA, PRECOVENDA, TAXADESCONTO, DTIMPORT, TROCA, SIT_PEDIDO, ESTOQUE_REPRESENTANTE,CST,TAXA_ICMS, CALCULO_VALOR_BASE, CALCULO_VALOR_ICMS, CALCULO_VALOR_BASE_ST, CALCULO_VALOR_ICMS_ST, ALIQUOTA_ST, OBSERVACAO)
                                 values(:vIDFILIAL,:vIDPEDIDOPALM,:vINC_IDPEDIDO,:vPALM_IDFOLHA,:vIDUNIDADEMEDIDA,:vQTDEPEDIDO, :vIDPRODUTO,:vFATORCONVERSAO,
--                                        :vIDREPRESENTANTE, cast(:vprecotabela*:vfatorconversao as numeric(15, 4)), cast(:vprecovenda*:vfatorconversao as numeric(15,4)), :vdesconto , :DATAIMPORT, 'N', :VSITUACAOPEDIDO, :vestoque_rep, :VCLFISCAL, :VTAXA_ICMS, :VTOTAL_BASE, :VTOTAL_ICMS, :VTOTAL_BASE_ST, :VTOTAL_ICMS_ST, :VALIQUOTA_ST);
                                        :vIDREPRESENTANTE, :vprecotabela, :vprecovenda, :vdesconto , :DATAIMPORT, 'N', :VSITUACAOPEDIDO, :vestoque_rep, :VCLFISCAL, :VTAXA_ICMS, :VTOTAL_BASE, :VTOTAL_ICMS, :VTOTAL_BASE_ST, :VTOTAL_ICMS_ST, :VALIQUOTA_ST, :VOBSERVACAO_ITEM);

                    if (:VPUXAR_PEDIDO_PENDENTE <> 'S') then
                    begin
                        if (:VQTDEATUAL < 0) then begin
                          if (:VTIPOEMPRESA = 'ARTPAN') then
                             VSITUACAOPEDIDO = VSITUACAOPEDIDO;
                          else
                             VSITUACAOPEDIDO = IF_SS(:VFAZER_CONSISTENCIA_MOBILE,'=','S','P',:vsitcertapedido);

                          update ITENSPEDIDO IT
                             set IT.SITUACAO_ESTOQUE = 'S',
                                 IT.SIT_PEDIDO = :VSITUACAOPEDIDO
                           where IT.IDFILIAL = :vIDFILIAL
                             and IT.IDPEDIDO = :vINC_IDPEDIDO
                             and IT.IDFOLHA = :vPALM_IDFOLHA
                             and IT.IDPRODUTO = :vIDPRODUTO
                             and IT.IDUNIDADEMEDIDA = :vIDUNIDADEMEDIDA;

                        end
                    end

                    -- VERIFICANDO SE O PRECO E A MENOR
                    if (:VPUXAR_PEDIDO_PENDENTE <> 'S') then begin
                        if ((((
                              ((:vPRECOTABELA)-((:vPRECOTABELA)*:RATEIO)/100)
                              /  --DIVIDE
    
                               :VPRECOTABELA )-1)*100) < (:VTAXADESC_TAB))  then begin
    
                          if (:VTIPOEMPRESA = 'ARTPAN') then
                              VSITUACAOPEDIDO = :VSITUACAOPEDIDO;
                          else
                              VSITUACAOPEDIDO = IF_SS(:VFAZER_CONSISTENCIA_MOBILE,'=','S','P',:vsitcertapedido);


                          update ITENSPEDIDO IT
                             set IT.SITUACAO_DESCONTO = 'S',
                                 IT.SIT_PEDIDO = :VSITUACAOPEDIDO
                           where IT.IDFILIAL = :vIDFILIAL
                             and IT.IDPEDIDO = :vINC_IDPEDIDO
                             and IT.IDFOLHA = :vPALM_IDFOLHA
                             and IT.IDPRODUTO = :vIDPRODUTO
                             and IT.IDUNIDADEMEDIDA = :vIDUNIDADEMEDIDA;

                        end
                    end

                -- ATUALIZA ITENSPEDIDO PRECO
                select P.CUSTONOTAUNIT, P.CUSTOTRIBUTOSUNIT, P.CUSTOSENCARGOSUNIT, P.COMISSAOBALCAO, P.COMISSAOINTERIOR, P.COMISSAOPRACA from PRODUTO P
                  where P.IDFILIAL = :vIDFILIAL
                    and P.IDPRODUTO = :vIDPRODUTO
                    into :vCUSTONOTAUNIT, :vCUSTOTRIBUTOUNIT, :vCUSTOSENCARGOS, :vCOMISSAOBALCAO, :vCOMISSAOINTERIOR, :vCOMISSAOPRACA;


                update ITENSPEDIDO IT
                   set IT.CUSTONOTA      = :vCUSTONOTAUNIT*:vFATORCONVERSAO,
                       IT.CUSTOENCARGOS  = :vCUSTOSENCARGOS*:vFATORCONVERSAO,
                       IT.CUSTOTRIBUTADO = :vCUSTOTRIBUTOUNIT*:vFATORCONVERSAO,
                       IT.precotabela_original = IT.precotabela,
                       IT.TAXACOMISSAO = IF_SN(:vCATEGORIA,'=','B',:vCOMISSAOBALCAO,1)*
                                         IF_SN(:vCATEGORIA,'=','I',:vCOMISSAOINTERIOR,1)*
                                         IF_SN(:vCATEGORIA,'=','P',:vCOMISSAOPRACA,1)*
                                         IF_SN(:VCATEGORIA,'=','E',:VTAXA_COMISSAO_REP,1)

                   where IT.IDFILIAL = :vIDFILIAL
                     and IT.IDPEDIDO = :vINC_IDPEDIDO
                     and IT.IDREPRESENTANTE= :vIDREPRESENTANTE
                     and IT.IDPRODUTO = :vIDPRODUTO
                     and IT.IDFOLHA = :vPALM_IDFOLHA
                     and IT.IDUNIDADEMEDIDA = :vIDUNIDADEMEDIDA;

              end
          end
    
          VTOTAL_BASE = 0;
          VTOTAL_ICMS = 0;
          VTOTAL_BASE_ST = 0;
          VTOTAL_ICMS_ST = 0;


          -- ATUALIZA PEDIDO PRECO
          select sum(IT.precovenda*IT.QTDEPEDIDO),
                 sum(IT.precovenda*IT.QTDEPEDIDO),
                 sum(((IT.PRECOVENDA*IT.QTDEPEDIDO)*IF_SN(R.CATEGORIA,'=','B',P.COMISSAOBALCAO,1)*
                         IF_SN(R.CATEGORIA,'=','I',P.COMISSAOINTERIOR,1)*
                         IF_SN(R.CATEGORIA,'=','P',P.COMISSAOPRACA,1)*IF_SN(R.CATEGORIA,'=','E',:VTAXA_COMISSAO_REP,1)/100)), sum(IT.custonota*IT.QTDEPEDIDO),
                         sum(IT.CALCULO_VALOR_BASE),
                         sum(IT.CALCULO_VALOR_ICMS),
                         sum(IT.CALCULO_VALOR_BASE_ST),
                         sum(IT.CALCULO_VALOR_ICMS_ST)
                           from ITENSPEDIDO IT

               left join PRODUTO P
                 on P.IDFILIAL  = :vIDFILIAL
                and P.IDPRODUTO = IT.IDPRODUTO
    
               join REPRESENTANTE R
                 on R.IDREPRESENTANTE = :vIDREPRESENTANTE
    
               where IT.IDFILIAL = :vIDFILIAL
                 and IT.IDPEDIDO = :vINC_IDPEDIDO
                 and IT.IDFOLHA =  :vPALM_IDFOLHA
                 into :vTOTALPRODUTO, :vprecovenda, :vTOTALCOMISSAO, :vtotalcusto, :VTOTAL_BASE, :VTOTAL_ICMS, :VTOTAL_BASE_ST, :VTOTAL_ICMS_ST;




          if (:VTOTAL_BASE is null) then VTOTAL_BASE = 0;
          if (:VTOTAL_ICMS is null) then VTOTAL_ICMS = 0;
          if (:VTOTAL_BASE_ST is null) then VTOTAL_BASE_ST = 0;
          if (:VTOTAL_ICMS_ST is null) then VTOTAL_ICMS_ST = 0;

          if (:VCLFISCAL <> '060') then -- SE O CST NAO FOR 060
              VTOTAL_COM_DESCONTO = :VTOTAL_COM_DESCONTO+:VTOTAL_ICMS_ST;



--                   update PEDIDO PE
--                        set PE.TOTALDESCONTO = 0
  --                  where PE.IDFILIAL = :IDFILIAL
        --                    and PE.TOTALDESCONTO is null
    --                    and PE.IDPEDIDO = :vINC_IDPEDIDO
      --                  and PE.IDFOLHA = :VPALM_IDFOLHA;


                   update PEDIDO PE
                      set PE.TOTALPRODUTO  = :vtotal_pedido,
                          PE.totaldesconto = :vtotal_desconto,
                          PE.TOTALPEDIDO   = :vtotal_com_desconto,
                          PE.TOTALCOMISSAO = :vTOTALCOMISSAO,
                          PE.SITUACAOPEDIDO = :vSITUACAOPEDIDO,
                          PE.totalcusto = :vtotalcusto,
                          PE.VALOR_ICMS_ST = :VTOTAL_ICMS_ST,
                          PE.VALOR_BASE_ST = :VTOTAL_BASE_ST,
                          PE.VALOR_ICMS    = :VTOTAL_ICMS,
                          PE.VALOR_BASE    = :VTOTAL_BASE
                      where PE.IDFILIAL = :vIDFILIAL
                        and PE.IDPEDIDO = :vINC_IDPEDIDO
                        and PE.IDFOLHA = :vPALM_IDFOLHA;

          if (:VCLFISCAL <> '060') then -- SE O CST NAO FOR 060
              VTOTAL_PEDIDO = :VTOTAL_PEDIDO+:VTOTAL_ICMS_ST;


          select (pe.totalcomissao/Pe.totalpedido)*100 from PEDIDO PE
          where PE.IDFILIAL = :IDFILIAL
            and PE.IDPEDIDO = :vINC_IDPEDIDO
            and PE.IDFOLHA = :vPALM_IDFOLHA
          into :vtaxacomissao;
          if (:vtaxacomissao is null) then vtaxacomissao = 0;

          if (:VPUXAR_PEDIDO_PENDENTE <> 'S') then begin
              if (:VSITUACAOPEDIDO <> 'V') then begin

                  update PEDIDO PE
                     set PE.SITUACAOPEDIDO = :VSITUACAOPEDIDO
                   where PE.IDFILIAL = :IDFILIAL
                     and PE.SITUACAOPEDIDO = 'V'
                     and PE.IDPEDIDO = :vINC_IDPEDIDO
                     and PE.IDFOLHA = :vPALM_IDFOLHA;

              end
          end

          --  CONTAS A RECEBER
          if (:VPUXAR_PEDIDO_PENDENTE <> 'S') then begin
              if (vGERAFINANCEIRO = 'S') then begin
                 if (:VSITUACAOPEDIDO = 'V') then begin
                    nparcela = 1;
                    while (nparcela <= :vparcela) do begin
                       if (not exists(select R.IDRECEBER from RECEBER R where R.IDFILIAL = :vIDFILIAL
                                                                        and R.IDRECEBER = :vINC_IDPEDIDO
                                                                        and R.IDFOLHA = :vPALM_IDFOLHA
                                                                        and R.IDORDEM = :nParcela)) then begin

                           if (:VDIGITAR_PRAZO_ANDROID = 'N') then
                           begin
                               insert into RECEBER (IDFILIAL, IDRECEBER, IDFOLHA, IDORDEM, DOCUMENTO, DATAVENCIMENTO, DATAEMISSAO, IDCLIENTE,
                                                    IDREPRESENTANTE, IDFORMAPAGTO, VALORDOCUMENTO,IDCENTROCUSTO, TAXACOMISSAO)
                                           values (:vIDFILIAL, :vINC_IDPEDIDO,:vPALM_IDFOLHA   ,:nParcela ,'PALM'    ,
                                                  :vdtemissao+(if_nn(:nparcela,'=',1,:vprazopagto,0)+
                                                  +if_nn(:nparcela,'=',2,:vPRAZO2,0)+
                                                  +if_nn(:nparcela,'=',3,:vPRAZO3,0)+
                                                  +if_nn(:nparcela,'=',4,:vPRAZO4,0)+
                                                  +if_nn(:nparcela,'=',5,:vPRAZO5,0)+
                                                  +if_nn(:nparcela,'=',6,:vPRAZO6,0)),
                                                  :vDTEMISSAO, :vIDCLIENTE,
                                                   :vIDREPRESENTANTE, :vIDFORMAPAGTO,:VTOTAL_PEDIDO/:vparcela,:vIDCENTROCUSTO, :vtaxacomissao );
                           end
                           else
                           begin
                             if ((:VDIGITAR_PRAZO_ANDROID = 'S') and (:VPRAZO = -1)) then
                             begin
                               insert into RECEBER (IDFILIAL, IDRECEBER, IDFOLHA, IDORDEM, DOCUMENTO, DATAVENCIMENTO, DATAEMISSAO, IDCLIENTE,
                                                    IDREPRESENTANTE, IDFORMAPAGTO, VALORDOCUMENTO,IDCENTROCUSTO, TAXACOMISSAO)
                                           values (:vIDFILIAL, :vINC_IDPEDIDO,:vPALM_IDFOLHA   ,:nParcela ,'PALM'    ,
                                                  :vdtemissao+(if_nn(:nparcela,'=',1,:vprazopagto,0)+
                                                  +if_nn(:nparcela,'=',2,:vPRAZO2,0)+
                                                  +if_nn(:nparcela,'=',3,:vPRAZO3,0)+
                                                  +if_nn(:nparcela,'=',4,:vPRAZO4,0)+
                                                  +if_nn(:nparcela,'=',5,:vPRAZO5,0)+
                                                  +if_nn(:nparcela,'=',6,:vPRAZO6,0)),
                                                  :vDTEMISSAO, :vIDCLIENTE,
                                                   :vIDREPRESENTANTE, :vIDFORMAPAGTO,:VTOTAL_PEDIDO/:vparcela,:vIDCENTROCUSTO, :vtaxacomissao );
                             end
                             else
                             begin
                               if(:VDIGITAR_PRAZO_ANDROID = 'S') then
                               begin
                                  insert into RECEBER (IDFILIAL, IDRECEBER, IDFOLHA, IDORDEM, DOCUMENTO, DATAVENCIMENTO, DATAEMISSAO, IDCLIENTE,
                                                        IDREPRESENTANTE, IDFORMAPAGTO, VALORDOCUMENTO,IDCENTROCUSTO, TAXACOMISSAO)
                                               values (:vIDFILIAL, :vINC_IDPEDIDO,:vPALM_IDFOLHA   ,:nParcela ,'PALM'    ,
                                                      :vdtemissao+(if_nn(:nparcela,'=',1,:VPRAZO,0)+
                                                      +if_nn(:nparcela,'=',2,:VPRAZO*2,0)+
                                                      +if_nn(:nparcela,'=',3,:vPRAZO*3,0)+
                                                      +if_nn(:nparcela,'=',4,:vPRAZO*4,0)+
                                                      +if_nn(:nparcela,'=',5,:vPRAZO*5,0)+
                                                      +if_nn(:nparcela,'=',6,:vPRAZO*6,0)),
                                                      :vDTEMISSAO, :vIDCLIENTE,
                                                       :vIDREPRESENTANTE, :vIDFORMAPAGTO,:VTOTAL_PEDIDO/:vparcela,:vIDCENTROCUSTO, :vtaxacomissao );
                                end
                             end
                           end
                           ntotal_parcelas = ntotal_parcelas + (vtotal_pedido/vparcela);
                       end
                       nparcela = nparcela + 1;
                    end
                    if (ntotal_parcelas <> vtotal_pedido) then begin

                       update receber r
                       set r.valordocumento = r.valordocumento + (:vtotal_pedido - :ntotal_parcelas)
                       where R.IDFILIAL = :vIDFILIAL
                         and R.IDRECEBER = :vINC_IDPEDIDO
                         and R.IDFOLHA = :VPALM_IDFOLHA
                         and R.IDORDEM = :nParcela ;

                    end
                 end
              end
          end
       end

       INSERT INTO HISTORICO_PEDIDO_PALM (IDCONTROLE, IDPEDIDOPALM, HISTORICO) VALUES (0, :VIDPEDIDOPALM, 'ENTROU NA ROTINA PARA DELETAR PEDIDO');

       delete from PEDIDOPALM P
         where P.IDFILIAL = :VIDFILIAL
           and P.IDPEDIDOPALM = :VIDPEDIDOPALM
           and P.IDREPRESENTANTE = :VIDREPRESENTANTE;

       delete from ITENSPEDIDOPALM IT
         where IT.IDFILIAL = :VIDFILIAL
           and IT.IDPEDIDOPALM = :VIDPEDIDOPALM
           and IT.IDREPRESENTANTE = :VIDREPRESENTANTE;
  end




--   update cliente c
--      set c.IDCLIENTE_PALM = null,
--          c.IDREPRESENTANTE_PALM = null
--     where not c.IDCLIENTE_PALM is null;

end^


ALTER PROCEDURE RECEBENDO_PALM_GERENCIAL (
    IDFILIAL INTEGER,
    DATAIMPORT DATE)
RETURNS (
    IDPEDIDO INTEGER)
AS
declare variable VIDFILIAL smallint;
declare variable VIDREPRESENTANTE integer;
declare variable VPUXAR_PEDIDO_PENDENTE varchar(1);
declare variable VSIT_CREDITO varchar(1);
declare variable VTAXACOMISSAO numeric(15,2);
declare variable VIDPEDIDOPALM integer;
declare variable VIDPEDIDO integer;
declare variable VCNPJ char(14);
declare variable VIDPEDIDOCLIENTE varchar(20);
declare variable VDTEMISSAO date;
declare variable VIDCLIENTE integer;
declare variable VIDFORMAPAGTO smallint;
declare variable VIDCONDICAOPAGTO smallint;
declare variable VIDCFOP smallint;
declare variable VIDTABELAPRECO smallint;
declare variable VINC_IDPEDIDO integer;
declare variable VIDPRODUTO integer;
declare variable VIDUNIDADEMEDIDA integer;
declare variable VQTDEPEDIDO numeric(10,3);
declare variable VFATORCONVERSAO integer;
declare variable VPRECOTABELA numeric(16,4);
declare variable VPRECOVENDA numeric(16,4);
declare variable VTAXADESCONTO numeric(10,2);
declare variable VCUSTONOTAUNIT numeric(16,2);
declare variable VCUSTOTRIBUTOUNIT numeric(16,2);
declare variable VCUSTOSENCARGOS numeric(16,2);
declare variable VTOTALPRODUTO numeric(16,2);
declare variable VTOTALCOMISSAO numeric(16,2);
declare variable VPRAZOPAGTO integer;
declare variable VIDCENTROCUSTO integer;
declare variable VCFOP varchar(5);
declare variable VSITUACAOPEDIDO char(1);
declare variable VITEMTROCA char(1);
declare variable VGERAFINANCEIRO char(1);
declare variable VCATEGORIA char(1);
declare variable VCOMISSAOBALCAO numeric(10,2);
declare variable VCOMISSAOINTERIOR numeric(10,2);
declare variable VCOMISSAOPRACA numeric(10,2);
declare variable VSALDO_RECEBER numeric(16,2);
declare variable VLIMITE_CREDITO numeric(16,2);
declare variable VQTDEATUAL numeric(10,3);
declare variable VTAXADESC_TAB numeric(10,2);
declare variable VPRECOTABELA_ORI numeric(15,4);
declare variable VFATORPRODUTO integer;
declare variable VPALM_IDFORMAPAGTO_TROCA integer;
declare variable VPALM_IDFORMAPAGTO_BONIF integer;
declare variable VPALM_IDCFOP_TROCA integer;
declare variable VPALM_IDCFOP_BONIF integer;
declare variable VOBS1 varchar(60);
declare variable VOBS2 varchar(60);
declare variable VTOTAL_PEDIDO numeric(16,2);
declare variable VTOTAL_DESCONTO numeric(16,2);
declare variable VNRSERIE varchar(15);
declare variable VTAXA_SERIE numeric(10,2);
declare variable RATEIO numeric(10,2);
declare variable VTIPOPEDIDO_PALM varchar(1);
declare variable VTIPOEMPRESA varchar(20);
declare variable VTMP_TOTALPEDIDO numeric(16,2);
declare variable VDATAPEDIDO date;
declare variable VFATORCONVERSAO1 integer;
declare variable VTAXAFRETE numeric(15,2);
declare variable VTAXAFINANCEIRO numeric(15,2);
declare variable VDESCONTO numeric(15,2);
declare variable VPALM_CENTROCUSTO_TROCA integer;
declare variable VPALM_CENTROCUSTO_BONIF integer;
declare variable VOBSERVACAO_NFE blob sub_type 1 segment size 80;
declare variable VIDTRIBUTO integer;
declare variable VUF varchar(2);
declare variable VTOTAL_BASE numeric(15,2);
declare variable VTOTAL_ICMS numeric(15,2);
declare variable VTOTAL_BASE_ST numeric(15,2);
declare variable VTOTAL_COM_DESCONTO numeric(15,2);
declare variable VTOTAL_ICMS_ST numeric(15,2);
declare variable VCLFISCAL varchar(3);
declare variable VTAXA_ICMS numeric(15,2);
declare variable VALIQUOTA_ST numeric(15,2);
declare variable VUF_FILIAL varchar(2);
declare variable VCFOP_FORA_ESTADO integer;
begin
  select F.PALM_IDCENTROCUSTO_TROCA,
         F.PALM_IDCENTROCUSTO_BONIFICACAO,
         F.IDCENTROCUSTOPEDIDO,
         F.PALM_IDFORMAPAGTO_TROCA,
         F.PALM_IDFORMAPAGTO_BONIF,
         F.PALM_IDCFOP_TROCA,
         F.PALM_IDCFOP_BONIF,
         F.TIPOEMPRESA,
         F.UF,
         F.PUXAR_PEDIDO_PALM_PENDENTE  from FILIAL F
     where F.IDFILIAL = :IDFILIAL

      into :VPALM_CENTROCUSTO_TROCA,
           :VPALM_CENTROCUSTO_BONIF,
           :vIDCENTROCUSTO,
           :VPALM_IDFORMAPAGTO_TROCA,
           :VPALM_IDFORMAPAGTO_BONIF,
           :VPALM_IDCFOP_TROCA,
           :VPALM_IDCFOP_BONIF,
           :VTIPOEMPRESA,
           :VUF_FILIAL,
           :VPUXAR_PEDIDO_PENDENTE;

  select C.OBSERVACAO_NFE from CONFIGURACAO C
     where C.IDFILIAL = :IDFILIAL
      into :VOBSERVACAO_NFE;

  delete from pedidopalm P
    WHERE P.total_pedido = 0;


  --DELETANDO
/*
  for select PM.total_pedido from pedidopalm p
    into :vtmp_totalpedido;
  do begin
       select sum(itp.valorunitariotabela*ITP.qtdepedido),


        from ITENSPEDIDOPALM ITP

         left join UNIDADEMEDIDA UN
           on UN.IDUNIDADEMEDIDA = ITP.UNIDADEMEDIDA
           and UN.IDFILIAL = :IDFILIAL

         where ITP.IDFILIAL = :IDFILIAL
           and ITP.IDREPRESENTANTE = :vtmp_IDREPRESENTANTE
           and ITP.IDPEDIDOPALM = :vtmp_IDPEDIDOPALM
  end
*/


  for select PM.IDFILIAL, PM.IDREPRESENTANTE, PM.IDPEDIDOPALM, PM.IDPEDIDO, PM.CNPJ,
          PM.IDPEDIDOCLIENTE, PM.DTEMISSAO, C.IDCLIENTE, PM.IDFORMAPAGTO,PM.IDCONDICAOPAGTO,
          CF.IDCFOP, PM.IDTABELAPRECO, PGT.PRAZO, CF.CFOP, CF.GERAFINANCEIRO, R.CATEGORIA,
          C.LIMITECREDITO, PM.OBS1, PM.OBS2, PM.TOTAL_PEDIDO, PM.TOTAL_DESCONTO,
          PM.NRSERIE, PM.DATAPEDIDO, C.situacaocredito, CI.UF from PEDIDOPALM  PM

          left join CONDICAOPAGTO PGT
           on  PGT.IDCONDICAOPAGTO = PM.IDCONDICAOPAGTO

          Join REPRESENTANTE R
            on R.IDREPRESENTANTE = PM.IDREPRESENTANTE

          join CLIENTE C
            on C.IDCLIENTE = PM.IDCLIENTE

          left join CIDADE CI
            on CI.IDCIDADE = C.IDCIDADE


          left join CFOP CF
            on CF.IDFILIAL = :IDFILIAL
           and CF.CFOP = PM.NATOPERACAO

          into :vIDFILIAL, :vIDREPRESENTANTE, :vIDPEDIDOPALM, :vIDPEDIDO, :vCNPJ,
               :vIDPEDIDOCLIENTE, :vDTEMISSAO, :vIDCLIENTE, :vIDFORMAPAGTO, :vIDCONDICAOPAGTO,
               :vIDCFOP, :vIDTABELAPRECO, :vPRAZOPAGTO, :vCFOP, :vGERAFINANCEIRO, :vCATEGORIA,
               :vLIMITE_CREDITO, :VOBS1, :VOBS2, :VTOTAL_PEDIDO, :VTOTAL_DESCONTO, :VNRSERIE, :VDATAPEDIDO,
               :vsit_credito, :VUF
  do
    begin

     select F.IDCENTROCUSTOPEDIDO from FILIAL F
     where F.IDFILIAL = :IDFILIAL
      into :vIDCENTROCUSTO;

      if (:VPUXAR_PEDIDO_PENDENTE <> 'S') then
         vSITUACAOPEDIDO = 'V';
      else
         vSITUACAOPEDIDO = 'V';


      if (:VTIPOEMPRESA = 'ARTPAN') then begin
          if (:vcategoria = 'E') then begin
             select first 1 R.IDREPRESENTANTE, R1.CATEGORIA from REPCLIENTE R

               join REPRESENTANTE R1
                 on R1.IDREPRESENTANTE = R.IDREPRESENTANTE

               where R.IDCLIENTE = :VIDCLIENTE
                 and R.IDFILIAL = :IDFILIAL
               into :VIDREPRESENTANTE, :VCATEGORIA;
          end
      end


      -- 1 é nota inteira
      -- * meia nota
      -- 0 sem nota

/*
      if (VNRSERIE = 'SERIE*D1 *') then
         VTAXA_SERIE = 50;
      else
         VTAXA_SERIE = 0;

*/


      -- VERIFICA O SALDO DO CLIENTE SE FOR NEGATIVO
      --   ELE COLOCA O PEDIDO COMO PENDENTE
      select sum(VALORDOCUMENTO) from RECEBER
        where IDFILIAL = :IDFILIAL
          and IDCLIENTE = :vIDCLIENTE
          and VALORPAGAMENTO is null
       into :vSALDO_RECEBER;

      if (vSALDO_RECEBER is null) then vSALDO_RECEBER = 0;
      if (vLIMITE_CREDITO is null) then vLIMITE_CREDITO = 0;

--      if (:VPUXAR_PEDIDO_PENDENTE <> 'S') then
--      begin
--          if (vsit_credito = 'S') then
--             vsituacaopedido = 'P';
--      end

--      if (:vSALDO_RECEBER > vLIMITE_CREDITO) then
--         vSITUACAOPEDIDO='P';

      if (:VTIPOEMPRESA = 'ARTPAN') then begin
         VDTEMISSAO = :VDATAPEDIDO;
      end

      -- VERIFICANDO FORMAS DE PAGAMENTO



      if (:VPUXAR_PEDIDO_PENDENTE <> 'S') then
      begin
          if (:VTIPOEMPRESA = 'ARTPAN') then begin
              if (:VPALM_IDFORMAPAGTO_TROCA = :VIDFORMAPAGTO) then begin
                 vSITUACAOPEDIDO='T';
                 VIDCFOP = :VPALM_IDCFOP_TROCA;
                 if (:VPALM_CENTROCUSTO_TROCA > 0) then  VIDCENTROCUSTO = :VPALM_CENTROCUSTO_TROCA;
              end
    
              if (:VPALM_IDFORMAPAGTO_BONIF = :VIDFORMAPAGTO) then begin
                 vSITUACAOPEDIDO='B';
                 VIDCFOP = :VPALM_IDCFOP_BONIF;
                 if (:VPALM_CENTROCUSTO_BONIF > 0) then  VIDCENTROCUSTO = :VPALM_CENTROCUSTO_BONIF;
              end
          end
          else begin
              if (:VPALM_IDFORMAPAGTO_TROCA = :VIDFORMAPAGTO) then begin
                 vSITUACAOPEDIDO='T';
                 VIDCFOP = :VPALM_IDCFOP_TROCA;
                 if (:VPALM_CENTROCUSTO_TROCA > 0) then  VIDCENTROCUSTO = :VPALM_CENTROCUSTO_TROCA;
              end
    
              if (:VPALM_IDFORMAPAGTO_BONIF = :VIDFORMAPAGTO) then begin
                 vSITUACAOPEDIDO='B';
                 VIDCFOP = :VPALM_IDCFOP_BONIF;
                 if (:VPALM_CENTROCUSTO_BONIF > 0) then  VIDCENTROCUSTO = :VPALM_CENTROCUSTO_BONIF;
              end
          end
      end

      select cast(max(F.INC_IDPEDIDO) as integer)+1 from FILIAL F
       where F.IDFILIAL = :IDFILIAL
        into :vINC_IDPEDIDO;
      if (vINC_IDPEDIDO is null) then vINC_IDPEDIDO = 1;

      update FILIAL F
         set F.INC_IDPEDIDO = :VINC_IDPEDIDO
       where F.IDFILIAL = :IDFILIAL;

      if (not exists (select P.IDPEDIDOPALM from PEDIDO P where P.IDPEDIDOPALM = :vIDPEDIDOPALM
                                                            and p.IDFOLHA=9
                                                            and p.datapedido = :vdtemissao
                                                            and p.IDREPRESENTANTE = :vIDREPRESENTANTE
                                                            and P.IDFILIAL = :vIDFILIAL)) then begin
         insert into PEDIDO (IDFILIAL,IDREPRESENTANTE,IDPEDIDO,IDFOLHA, IDPEDIDOPALM,IDCLIENTE,          DATAPEDIDO, IDFORMAPAGTO,
                             IDCONDICAOPAGTO, IDCFOP, IDTABELAPRECO     ,IDCENTROCUSTO, SITUACAOPEDIDO, PARCELA, DATADIGITACAO,
                             ENTREGARPEDIDO, OBS01, OBS02, TOTALPRODUTO, TOTALDESCONTO, TOTALPEDIDO, TAXADESCONTO, TIPOPEDIDO_PALM, OBS_EXTENSO)
                      values(:vIDFILIAL,:vIDREPRESENTANTE,:vINC_IDPEDIDO,'9',:vIDPEDIDOPALM,:vIDCLIENTE,:vdtemissao, :vIDFORMAPAGTO,
                             :vIDCONDICAOPAGTO, :vIDCFOP, :vIDTABELAPRECO, :vIDCENTROCUSTO, :vSITUACAOPEDIDO,'1', :vDTEMISSAO,
                             'S', :vOBS1,:VOBS2, :VTOTAL_PEDIDO, :VTOTAL_DESCONTO, (:VTOTAL_PEDIDO-:VTOTAL_DESCONTO), :VTAXA_SERIE, :VTIPOPEDIDO_PALM, :VOBSERVACAO_NFE);


    -- RATEANDO O VALOR
    RATEIO = 0;--(:VTOTAL_DESCONTO/:VTOTAL_PEDIDO)*100;

    --     ITENS PEDIDO
          for select ITP.UNIDADEMEDIDA,ITP.QTDEPEDIDO, ITP.IDPRODUTO, UN.FATORCONVERSAO, ITP.VALORUNITARIOTABELA,
                     ITP.VALORUNITARIO, ITP.DESCONTO, ITP.ITEMTROCA from ITENSPEDIDOPALM ITP

                 left join UNIDADEMEDIDA UN
                   on UN.IDFILIAL = :vIDFILIAL
                  and UN.IDUNIDADEMEDIDA = ITP.UNIDADEMEDIDA

               where ITP.IDFILIAL = :vIDFILIAL
                 and ITP.IDREPRESENTANTE = :vIDREPRESENTANTE
                 and ITP.IDPEDIDOPALM = :vIDPEDIDOPALM
                into :vIDUNIDADEMEDIDA, :vQTDEPEDIDO, :vIDPRODUTO, :vFATORCONVERSAO, :vPRECOTABELA, :vPRECOVENDA,:vTAXADESCONTO, :vITEMTROCA
          do
            begin
    --          vPRECOTABELA = vPRECOTABELA/10000;
    --          vPRECOVENDA = vPRECOVENDA/10000;
    --          vQTDEPEDIDO = vQTDEPEDIDO/10000;
    --          vTAXADESCONTO = vTAXADESCONTO/100;
    
              if (not exists (select IT.IDPEDIDO from ITENSPEDIDO IT  where IT.IDFILIAL = :vIDFILIAL
                                                                        and IT.IDPEDIDOPALM = :vIDPEDIDOPALM
                                                                        and IT.IDREPRESENTANTE= :vIDREPRESENTANTE
                                                                        and IT.IDPRODUTO = :vIDPRODUTO
                                                                        and IT.IDUNIDADEMEDIDA = :vIDUNIDADEMEDIDA)) then begin

                select IT.TAXADESCONTO, IT.PRECOUNIT from ITENSTABELAPRECO IT
                  where IT.IDFILIAL = :VIDFILIAL
                    and IT.IDTABELAPRECO = :VIDTABELAPRECO
                    and IT.IDPRODUTO = :VIDPRODUTO
                into :VTAXADESC_TAB, :VPRECOTABELA_ORI;
    
    
/*

                select first 1 PI.PRECO_PROMOCAO from PROMOCAO_ITEM_TABPRECO PIT
                LEFT JOIN PROMOCAO_ITEM PI
                   ON PI.IDFILIAL = PIT.IDFILIAL
                 AND PI.IDPRODUTO = PIT.IDPRODUTO
                 AND PI.IDPROMOCAO = PIT.IDPROMOCAO

                JOIN PROMOCAO P
                   ON P.IDFILIAL = PIT.IDFILIAL
                AND P.IDPROMOCAO = PIT.IDPROMOCAO

                WHERE PIT.IDFILIAL = :IDFILIAL
                     AND P.SITUACAO_PROMOCAO = 'A'
                     AND PIT.IDPRODUTO = :vIDPRODUTO
                     AND PIT.IDTABELAPRECO = :vIDTABELAPRECO
                     AND :VDTEMISSAO between P.DATA_INI_PROMOCAO and P.DATA_FIM_PROMOCAO+P.PRORROGACAO
               into :VVALOR_PROMOCAO;

*/
                -- VERIFICANDO O ESTOQUE ATUAL
                select P.QTDEATUAL, P.FATORCONVERSAO, P.IDTRIBUTO from PRODUTO P
                  where P.IDFILIAL = :VIDFILIAL
                    and P.IDPRODUTO = :VIDPRODUTO
                into :VQTDEATUAL, :VFATORPRODUTO, :VIDTRIBUTO;


             -- PRECO DO PALM         -- NOSSA TABELA
--               DIGITADO
--               if (:vprecotabela > :vprecotabela_ori) then
--                     = :vprecotabela_ori vprecotabela;

--               if (:vVALOR_PROMOCAO/VFATORPRODUTO < :vprecotabela) then
--                   vprecotabela = :VVALOR_PROMOCAO/VFATORPRODUTO;

                select r.taxafrete from cliente c
                join regiao r
                  on r.idregiao = c.idregiao
                  where c.idcliente = :vidcliente
                 into :vtaxafrete;

                if (:vtaxafrete is null) then vtaxafrete = 0;

                select c.taxafinaceiro from condicaopagto c
                where c.idcondicaopagto = :vidcondicaopagto
                into :vtaxafinanceiro;

                if (:vtaxafinanceiro is null) then vtaxafinanceiro = 0;


                vprecotabela_ori = vprecotabela_ori*:vfatorconversao;
                vprecotabela_ori = vprecotabela_ori+(:vprecotabela_ori*:vtaxafrete/100);
                vprecotabela_ori = vprecotabela_ori+(:vprecotabela_ori*:vtaxafinanceiro/100);
                VPRECOTABELA_ORI = cast(:VPRECOTABELA_ORI as numeric(15,2));
                vdesconto = (((cast(:vprecovenda*:vfatorconversao as numeric(15,2)))/:vprecotabela_ori)-1)*100;

                 select CC.TOTAL_BASE, CC.TOTAL_ICMS, CC.VALORBASE_ST, CC.VALORICMS_ST,
                        CC.CLFISCAL, CC.TAXATRIBUTO, CC.ALIQUOTA_ST
                                                                             from CALCULA_TOTAIS_DE_PRODUTO(
                                                                              :VIDFILIAL,
                                                                              :VIDPRODUTO,
                                                                              :VIDTRIBUTO,
                                                                              :VQTDEPEDIDO,
                                                                              cast(:vprecovenda*:vfatorconversao as numeric(15,4)),
                                                                              :VIDCFOP,
                                                                              :VUF,
                                                                              :VIDCLIENTE) CC
                    into :VTOTAL_BASE, :VTOTAL_ICMS, :VTOTAL_BASE_ST, :VTOTAL_ICMS_ST,
                         :VCLFISCAL, :VTAXA_ICMS, :VALIQUOTA_ST;

                insert into ITENSPEDIDO(IDFILIAL, IDPEDIDOPALM, IDPEDIDO, IDFOLHA, IDUNIDADEMEDIDA, QTDEPEDIDO, IDPRODUTO,FATORCONVERSAO,
                                        IDREPRESENTANTE, PRECOTABELA, PRECOVENDA, TAXADESCONTO, DTIMPORT, TROCA, SIT_PEDIDO, CST,TAXA_ICMS, CALCULO_VALOR_BASE, CALCULO_VALOR_ICMS, CALCULO_VALOR_BASE_ST, CALCULO_VALOR_ICMS_ST, ALIQUOTA_ST )
                                 values(:vIDFILIAL,:vIDPEDIDOPALM,:vINC_IDPEDIDO,'9',:vIDUNIDADEMEDIDA,:vQTDEPEDIDO, :vIDPRODUTO,:vFATORCONVERSAO,
                                        :vIDREPRESENTANTE, :vprecotabela_ori , cast(:vprecovenda*:vfatorconversao as numeric(15,2)), :vdesconto , :DATAIMPORT, :VITEMTROCA, :VSITUACAOPEDIDO,:VCLFISCAL, :VTAXA_ICMS, :VTOTAL_BASE, :VTOTAL_ICMS, :VTOTAL_BASE_ST, :VTOTAL_ICMS_ST, :VALIQUOTA_ST);
--(:vPRECOTABELA*:VFATORCONVERSAO)-((:vPRECOTABELA*:VFATORCONVERSAO)*:RATEIO)/100


--                if (:VSITUACAOPEDIDO = 'V') then begin
                    if (:VPUXAR_PEDIDO_PENDENTE <> 'S') then
                    begin
                        if (:VQTDEATUAL < 0) then begin
                          if (:VTIPOEMPRESA = 'ARTPAN') then
                             VSITUACAOPEDIDO = VSITUACAOPEDIDO;
--                          else
--                             VSITUACAOPEDIDO = 'P';
        
                          update ITENSPEDIDO IT
                             set IT.SITUACAO_ESTOQUE = 'S',
                                 IT.SIT_PEDIDO = :VSITUACAOPEDIDO
                           where IT.IDFILIAL = :vIDFILIAL
                             and IT.IDPEDIDO = :vINC_IDPEDIDO
                             and IT.IDFOLHA = 9
    --                         and IT.IDREPRESENTANTE= :vIDREPRESENTANTE
                             and IT.IDPRODUTO = :vIDPRODUTO
                             and IT.IDUNIDADEMEDIDA = :vIDUNIDADEMEDIDA;
                        end
                    end
    




                    -- VERIFICANDO SE O PRECO E A MENOR
                    if (:VPUXAR_PEDIDO_PENDENTE <> 'S') then begin
                        if ((((
                              ((:vPRECOTABELA)-((:vPRECOTABELA)*:RATEIO)/100)
                              /  --DIVIDE
    
                               :VPRECOTABELA )-1)*100) < (:VTAXADESC_TAB))  then begin
    
                          if (:VTIPOEMPRESA = 'ARTPAN') then
                              VSITUACAOPEDIDO = :VSITUACAOPEDIDO;
--                          else
--                              VSITUACAOPEDIDO = 'P';
                                  
                          update ITENSPEDIDO IT
                             set IT.SITUACAO_DESCONTO = 'S',
                                 IT.SIT_PEDIDO = :VSITUACAOPEDIDO
                           where IT.IDFILIAL = :vIDFILIAL
                             and IT.IDPEDIDO = :vINC_IDPEDIDO
                             and IT.IDFOLHA = 9
                             and IT.IDPRODUTO = :vIDPRODUTO
                             and IT.IDUNIDADEMEDIDA = :vIDUNIDADEMEDIDA;
                        end
                    end

                -- ATUALIZA ITENSPEDIDO PRECO
                select P.CUSTONOTAUNIT, P.CUSTOTRIBUTOSUNIT, P.CUSTOSENCARGOSUNIT, P.COMISSAOBALCAO, P.COMISSAOINTERIOR, P.COMISSAOPRACA from PRODUTO P
                  where P.IDFILIAL = :vIDFILIAL
                    and P.IDPRODUTO = :vIDPRODUTO
                    into :vCUSTONOTAUNIT, :vCUSTOTRIBUTOUNIT, :vCUSTOSENCARGOS, :vCOMISSAOBALCAO, :vCOMISSAOINTERIOR, :vCOMISSAOPRACA;


/*
                update ITENSPEDIDO IT
                   set IT.precotabela      = IT.precovenda,
                       IT.taxadesconto = 0
                   where IT.IDFILIAL = :vIDFILIAL
                     and IT.precovenda >= IT.precotabela
                     and IT.IDPEDIDO = :vINC_IDPEDIDO
                     and IT.IDREPRESENTANTE= :vIDREPRESENTANTE
                     and IT.IDFOLHA = 9
                     and IT.IDPRODUTO = :vIDPRODUTO
                     and IT.IDUNIDADEMEDIDA = :vIDUNIDADEMEDIDA;
*/

    
                update ITENSPEDIDO IT
                   set IT.CUSTONOTA      = :vCUSTONOTAUNIT*:vFATORCONVERSAO,
                       IT.CUSTOENCARGOS  = :vCUSTOSENCARGOS*:vFATORCONVERSAO,
                       IT.CUSTOTRIBUTADO = :vCUSTOTRIBUTOUNIT*:vFATORCONVERSAO,
                       IT.precotabela_original = IT.precotabela,
                       IT.TAXACOMISSAO = IF_SN(:vCATEGORIA,'=','B',:vCOMISSAOBALCAO,1)*
                                         IF_SN(:vCATEGORIA,'=','I',:vCOMISSAOINTERIOR,1)*
                                         IF_SN(:vCATEGORIA,'=','P',:vCOMISSAOPRACA,1)
                   where IT.IDFILIAL = :vIDFILIAL
                     and IT.IDPEDIDO = :vINC_IDPEDIDO
                     and IT.IDREPRESENTANTE= :vIDREPRESENTANTE
                     and IT.IDPRODUTO = :vIDPRODUTO
                     and IT.IDFOLHA = 9
                     and IT.IDUNIDADEMEDIDA = :vIDUNIDADEMEDIDA;
              end
          end
    
          -- ATUALIZA PEDIDO PRECO
          select sum(IT.precovenda*IT.QTDEPEDIDO),
                 sum(IT.precovenda*IT.QTDEPEDIDO),
                 sum(((IT.PRECOVENDA*IT.QTDEPEDIDO)*IF_SN(R.CATEGORIA,'=','B',P.COMISSAOBALCAO,1)*
                         IF_SN(R.CATEGORIA,'=','I',P.COMISSAOINTERIOR,1)*
                         IF_SN(R.CATEGORIA,'=','P',P.COMISSAOPRACA,1)/100)),
                         sum(IT.CALCULO_VALOR_BASE),
                         sum(IT.CALCULO_VALOR_ICMS),
                         sum(IT.CALCULO_VALOR_BASE_ST),
                         sum(IT.CALCULO_VALOR_ICMS_ST)

                           from ITENSPEDIDO IT

               left join PRODUTO P
                 on P.IDFILIAL  = :vIDFILIAL
                and P.IDPRODUTO = IT.IDPRODUTO
    
               join REPRESENTANTE R
                 on R.IDREPRESENTANTE = :vIDREPRESENTANTE
    
               where IT.IDFILIAL = :vIDFILIAL
                 and IT.IDPEDIDO = :vINC_IDPEDIDO
                 and IT.IDFOLHA =  9
                 into :vTOTALPRODUTO, :vprecovenda, :vTOTALCOMISSAO, :VTOTAL_BASE, :VTOTAL_ICMS, :VTOTAL_BASE_ST, :VTOTAL_ICMS_ST;

                 if (:VTOTAL_BASE is null) then VTOTAL_BASE = 0;
                 if (:VTOTAL_ICMS is null) then VTOTAL_ICMS = 0;
                 if (:VTOTAL_BASE_ST is null) then VTOTAL_BASE_ST = 0;
                 if (:VTOTAL_ICMS_ST is null) then VTOTAL_ICMS_ST = 0;
            

                   update PEDIDO PE
                        set PE.TOTALDESCONTO = 0
                      where PE.IDFILIAL = :IDFILIAL
        --                    and PE.TOTALDESCONTO is null
                        and PE.IDPEDIDO = :vINC_IDPEDIDO
                        and PE.IDFOLHA = 9;
        
                   update PEDIDO PE
                      set PE.TOTALPRODUTO  = :vTOTALPRODUTO,
                          PE.TOTALPEDIDO   = :vprecovenda+:VTOTAL_ICMS_ST,
        --                      PE.totaldesconto = :vtotalproduto-:vprecovenda,
                          PE.TOTALCOMISSAO = :vTOTALCOMISSAO,
                          PE.SITUACAOPEDIDO = :vSITUACAOPEDIDO,
                          PE.VALOR_ICMS_ST = :VTOTAL_ICMS_ST,
                          PE.VALOR_BASE_ST = :VTOTAL_BASE_ST,
                          PE.VALOR_ICMS    = :VTOTAL_ICMS,
                          PE.VALOR_BASE    = :VTOTAL_BASE
                      where PE.IDFILIAL = :vIDFILIAL
                        and PE.IDPEDIDO = :vINC_IDPEDIDO
                        and PE.IDFOLHA = 9;

          select (pe.totalcomissao/Pe.totalpedido)*100 from PEDIDO PE
          where PE.IDFILIAL = :IDFILIAL
            and PE.IDPEDIDO = :vINC_IDPEDIDO
            and PE.IDFOLHA = 9
          into :vtaxacomissao;
          if (:vtaxacomissao is null) then vtaxacomissao = 0;

          if (:VPUXAR_PEDIDO_PENDENTE <> 'S') then begin
              if (:VSITUACAOPEDIDO <> 'V') then begin
                  update PEDIDO PE
                     set PE.SITUACAOPEDIDO = :VSITUACAOPEDIDO
                   where PE.IDFILIAL = :IDFILIAL
                     and PE.SITUACAOPEDIDO = 'V'
                     and PE.IDPEDIDO = :vINC_IDPEDIDO
                     and PE.IDFOLHA = 9;
              end
          end

          --  CONTAS A RECEBER
          if (:VPUXAR_PEDIDO_PENDENTE <> 'S') then begin
              if (vGERAFINANCEIRO = 'S') then begin
                 if (:VSITUACAOPEDIDO = 'V') then begin
                     if (not exists(select R.IDRECEBER from RECEBER R where R.IDFILIAL = :vIDFILIAL
                                                                        and R.IDRECEBER = :vINC_IDPEDIDO
                                                                        and R.IDFOLHA = 9
                                                                        and R.IDORDEM = 1)) then begin
                          insert into RECEBER (IDFILIAL, IDRECEBER, IDFOLHA, IDORDEM, DOCUMENTO, DATAVENCIMENTO, DATAEMISSAO, IDCLIENTE,
                                               IDREPRESENTANTE, IDFORMAPAGTO, VALORDOCUMENTO,IDCENTROCUSTO, TAXACOMISSAO)
                                       values (:vIDFILIAL, :vINC_IDPEDIDO,'9'   ,'1'     ,'PALM'    , :vdtemissao+:vPRAZOPAGTO, :vDTEMISSAO, :vIDCLIENTE,
                                               :vIDREPRESENTANTE, :vIDFORMAPAGTO,:vTOTALPRODUTO+:VTOTAL_ICMS_ST,:vIDCENTROCUSTO, :vtaxacomissao );
                     end
                 end
              end
          end
       end
   end
   delete from PEDIDOPALM;
   delete from ITENSPEDIDOPALM;


   update cliente c
      set c.IDCLIENTE_PALM = null,
          c.IDREPRESENTANTE_PALM = null
     where not c.IDCLIENTE_PALM is null;

   update pedido p
     set p.idpedidopalm = null
   where p.idfilial = :idfilial
     and not p.idpedidopalm is null;



  DELETE FROM PEDIDO P
   wHERE P.idfolha = 9
    AND P.totalpedido IS NULL ;

   update itenspedido it
     set it.idpedidopalm = null
   where it.idfilial = :idfilial
     and not it.idpedidopalm is null;

end^


ALTER PROCEDURE REL_AGRUPAMENTO_PEDIDO (
    IDFILIAL INTEGER,
    IDCONTROLE INTEGER)
RETURNS (
    IDPEDIDO INTEGER,
    IDFOLHA SMALLINT,
    NOMEFORMAPAGTO VARCHAR(40) CHARACTER SET NONE,
    NOMECLIENTE VARCHAR(60) CHARACTER SET NONE,
    TOTALPEDIDO NUMERIC(16,2),
    IDCLIENTE INTEGER,
    SITUACAO CHAR(1) CHARACTER SET NONE,
    CONDICAOPAGTO VARCHAR(30) CHARACTER SET NONE,
    NOTAFISCAL INTEGER,
    FANTASIA VARCHAR(60),
    CIDADE VARCHAR(25),
    BAIRRO VARCHAR(25),
    IDREPRESENTANTE INTEGER)
AS
begin
 for select ITR.IDPEDIDO, P.IDFOLHA, COLLATEBR(F.DESCRICAO), COLLATEBR(C.NOME),
            P.TOTALPEDIDO, COLLATEBR(CPAGTO.DESCRICAO), P.IDCLIENTE, P.SITUACAOPEDIDO,
            P.NOTAFISCAL, C.FANTASIA,CI.NOME, C.BAIRRO, P.IDREPRESENTANTE  from ITENSCARGA ITC

right  join ITENSROMANEIO ITR
  on ITR.IDFILIAL = :IDFILIAL
 and ITR.IDCONTROLE = ITC.IDROMANEIO

left join PEDIDO P
  on P.IDFILIAL = :IDFILIAL
 and P.IDPEDIDO = ITR.IDPEDIDO

join FORMAPAGTO F
  on F.IDFORMAPAGTO = P.IDFORMAPAGTO

join CLIENTE C
  on C.IDCLIENTE = P.IDCLIENTE

left join CIDADE CI
   on CI.IDCIDADE = C.IDCIDADE

join CONDICAOPAGTO CPAGTO
  on CPAGTO.IDCONDICAOPAGTO = P.IDCONDICAOPAGTO

where P.IDFILIAL = :IDFILIAL
  and ITC.IDCONTROLE = :IDCONTROLE
  and ((ITR.IDFOLHA is null) or (ITR.IDFOLHA = P.IDFOLHA))
    order by P.IDPEDIDO, P.IDFOLHA
      into :IDPEDIDO, :IDFOLHA, :NOMEFORMAPAGTO, :NOMECLIENTE, :TOTALPEDIDO, :CONDICAOPAGTO,:IDCLIENTE, :SITUACAO,
           :NOTAFISCAL, :FANTASIA, :CIDADE, :BAIRRO, :IDREPRESENTANTE
 do
   suspend;
end^


ALTER PROCEDURE REL_AGRUPAMENTO_ROMANEIO (
    IDFILIAL SMALLINT,
    IDCONTROLE INTEGER)
RETURNS (
    IDPRODUTO INTEGER,
    NOMEPRODUTO VARCHAR(60) CHARACTER SET NONE,
    IDFORNECEDOR INTEGER,
    NOMEFORNECEDOR VARCHAR(40) CHARACTER SET NONE,
    IDGRUPO SMALLINT,
    NOMEGRUPO VARCHAR(25) CHARACTER SET NONE,
    IDUNIDADEMEDIDA INTEGER,
    PESO NUMERIC(10,3),
    EMBALAGEM VARCHAR(10) CHARACTER SET NONE,
    FATORCONVERSAO INTEGER,
    ABREVIATURA VARCHAR(10) CHARACTER SET NONE,
    QTDECAIXA NUMERIC(14,3))
AS
declare variable VIDPEDIDO integer;
begin
for select IT.IDPRODUTO,COLLATEBR(P.ESPECIFICACAO), COLLATEBR(F.NOME),
   P.IDUNIDADEMEDIDA, P.PESO, P.EMBALAGEM,F.IDFORNECEDOR, P.FATORCONVERSAO, UN.ABREVIATURA,
   P.IDGRUPO, COLLATEBR(G.NOME), PE.IDPEDIDO,  sum(IT.QTDEPEDIDO*IT.FATORCONVERSAO) from ITENSCARGA ITC

right join ITENSROMANEIO ITR
  on ITR.IDFILIAL = ITC.IDFILIAL
 and ITR.IDCONTROLE = ITC.IDROMANEIO

left join PEDIDO PE
  on PE.IDFILIAL = ITR.IDFILIAL
 and PE.IDPEDIDO = ITR.IDPEDIDO

left join ITENSPEDIDO IT
  on IT.IDFILIAL = PE.IDFILIAL
 and IT.IDPEDIDO = PE.IDPEDIDO

join PRODUTO P
  on P.IDFILIAL = IT.IDFILIAL
 and P.IDPRODUTO = IT.IDPRODUTO

join GRUPO G
  on G.IDGRUPO = P.IDGRUPO

join UNIDADEMEDIDA  UN
   on UN.IDUNIDADEMEDIDA = P.IDUNIDADEMEDIDA
  and UN.IDFILIAL = P.IDFILIAL

join FORNECEDOR  F
  on F.IDFORNECEDOR = P.IDFORNECEDOR

where ITC.IDFILIAL = :IDFILIAL
  and ((ITR.IDFOLHA is null) or (ITR.IDFOLHA = IT.IDFOLHA))
  and ITC.IDCONTROLE = :IDCONTROLE
--  and ITR.IDCONTROLE in (select IC.IDROMANEIO from ITENSCARGA IC
--                        where IC.IDFILIAL = :IDFILIAL
--                         and IC.IDCONTROLE = :IDCONTROLE)

 group by IT.IDPRODUTO,COLLATEBR(P.ESPECIFICACAO), COLLATEBR(F.NOME),
           P.IDUNIDADEMEDIDA, P.PESO, P.EMBALAGEM,F.IDFORNECEDOR, P.FATORCONVERSAO, UN.ABREVIATURA,
           P.IDGRUPO, COLLATEBR(G.NOME), PE.IDPEDIDO
  into :IDPRODUTO, :NOMEPRODUTO, :NOMEFORNECEDOR, :IDUNIDADEMEDIDA, :PESO, :EMBALAGEM, :IDFORNECEDOR, :FATORCONVERSAO, :ABREVIATURA,
       :IDGRUPO, :NOMEGRUPO, :vIDPEDIDO, :QTDECAIXA
 do
   suspend;
end^


ALTER PROCEDURE REL_AJUSTE_DEPOSITO (
    IDFILIAL INTEGER,
    DTINI DATE,
    DTFIM DATE,
    IDPROINI INTEGER,
    IDPROFIM INTEGER)
RETURNS (
    IDPRODUTO INTEGER,
    NOMEPRODUTO VARCHAR(60) CHARACTER SET NONE,
    ABREVIATURA CHAR(3) CHARACTER SET NONE,
    TIPOOPERACAO CHAR(1) CHARACTER SET NONE,
    QTDEAJUSTE NUMERIC(10,3),
    DTAJUSTE DATE,
    VALORAJUSTE NUMERIC(14,2),
    FATORCONVERSAO INTEGER,
    IDCONTROLE INTEGER)
AS
begin
  for select A.IDAJUSTE, A.IDPRODUTO, COLLATEBR(P.ESPECIFICACAO), UN.ABREVIATURA, A.TIPOOPERACAO,
             (A.QTDE_AJUSTE*A.FATORCONVERSAO), A.DTAJUSTE,
             ((A.QTDE_AJUSTE*A.FATORCONVERSAO)*P.CUSTONOTAUNIT), P.FATORCONVERSAO from AJUSTE_DEPOSITO A
    join UNIDADEMEDIDA UN
      on UN.IDUNIDADEMEDIDA = A.IDUNIDADEMEDIDA
     and UN.IDFILIAL = :IDFILIAL
     
    join PRODUTO P
      on P.IDPRODUTO = A.IDPRODUTO
     and P.IDFILIAL = :IDFILIAL
     
   where A.IDFILIAL = :IDFILIAL
     and A.DTAJUSTE between :DTINI and :DTFIM
     and A.IDPRODUTO between :IDPROINI and :IDPROFIM
     into :IDCONTROLE, :IDPRODUTO, :NOMEPRODUTO, :ABREVIATURA, :TIPOOPERACAO,
          :QTDEAJUSTE, :DTAJUSTE, :VALORAJUSTE, :FATORCONVERSAO
  do
    suspend;
end^


ALTER PROCEDURE REL_AJUSTE_ESTOQUE (
    IDFILIAL INTEGER,
    DTINI DATE,
    DTFIM DATE)
RETURNS (
    IDPRODUTO INTEGER,
    NOMEPRODUTO VARCHAR(60) CHARACTER SET NONE,
    ABREVIATURA CHAR(6) CHARACTER SET NONE,
    TIPOOPERACAO CHAR(1) CHARACTER SET NONE,
    QTDEAJUSTE NUMERIC(10,3),
    OBSERVACAO VARCHAR(50) CHARACTER SET NONE,
    DTAJUSTE DATE,
    VALORAJUSTE NUMERIC(14,2),
    FATORCONVERSAO INTEGER,
    IDCONTROLE INTEGER)
AS
begin
  for select A.IDAJUSTEESTOQUE, A.IDPRODUTO, COLLATEBR(P.ESPECIFICACAO), UN.ABREVIATURA, A.TIPOOPERACAO,
             (A.QTDEAJUSTE*A.FATORCONVERSAO), COLLATEBR(A.OBSERVACAO), A.DTAJUSTE,
             ((A.QTDEAJUSTE*A.FATORCONVERSAO)*P.CUSTONOTAUNIT), P.FATORCONVERSAO from AJUSTEESTOQUE A
    join UNIDADEMEDIDA UN
      on UN.IDUNIDADEMEDIDA = A.IDUNIDADEMEDIDA
     and UN.IDFILIAL = :IDFILIAL
     
    join PRODUTO P
      on P.IDPRODUTO = A.IDPRODUTO
     and P.IDFILIAL = :IDFILIAL
     
   where A.IDFILIAL = :IDFILIAL
     and A.DTAJUSTE between :DTINI and :DTFIM
     into :IDCONTROLE, :IDPRODUTO, :NOMEPRODUTO, :ABREVIATURA, :TIPOOPERACAO,
          :QTDEAJUSTE,:OBSERVACAO, :DTAJUSTE, :VALORAJUSTE, :FATORCONVERSAO
  do
    suspend;
end^


ALTER PROCEDURE REL_C_RECEBER_ABERTO_REPRE_SINT (
    IDFILIAL SMALLINT,
    DATAINI DATE,
    DATAFIM DATE)
RETURNS (
    IDREPRESENTANTE INTEGER,
    NOMEREPRESENTANTE VARCHAR(60),
    TOTALVENDA NUMERIC(16,2),
    TOTALCOMISSAO NUMERIC(16,4),
    CPF VARCHAR(14))
AS
declare variable VTIPOEMPRESA varchar(20);
begin
  select F.TIPOEMPRESA from FILIAL F
    where F.IDFILIAL = :IDFILIAL
   into :VTIPOEMPRESA;

  if (:VTIPOEMPRESA = 'ARTPAN') then begin
      for select R.IDREPRESENTANTE, COLLATEBR(R.NOME),
                     (select sum(RE.valordocumento) from RECEBER RE

                         where RE.IDFILIAL = :IDFILIAL
                           and RE.dataemissao between :DATAINI and :DATAFIM
                           and RE.VALORPAGAMENTO is null
                           and Re.IDREPRESENTANTE = R.IDREPRESENTANTE),
                           
                     (select sum((RE.valordocumento*RE.TAXACOMISSAO)/100) from RECEBER RE


                         where RE.IDFILIAL = :IDFILIAL
                           and RE.dataemissao between :DATAINI and :DATAFIM
                           and not RE.TAXACOMISSAO is null
                           and VALORPAGAMENTO is null
                           and Re.IDREPRESENTANTE = R.IDREPRESENTANTE)
               from REPRESENTANTE R
                      into :IDREPRESENTANTE, :NOMEREPRESENTANTE, :TOTALVENDA, :TOTALCOMISSAO
          do
            suspend;
  end
end^


ALTER PROCEDURE REL_CARTEIRA (
    IDFILIAL INTEGER,
    IDREPINI SMALLINT,
    IDREPFIM SMALLINT,
    DTINICIAL DATE,
    DTFINAL DATE,
    IDCLIENTEINI INTEGER,
    IDCLIENTEFIM INTEGER,
    IDPEDIDOINI INTEGER,
    IDPEDIDOFIM INTEGER)
RETURNS (
    IDCARTEIRA INTEGER,
    HISTORICO VARCHAR(70),
    DATAPEDIDO DATE,
    VALORDEBITO NUMERIC(16,2),
    VALORCREDITO NUMERIC(16,2),
    SALDOANTERIOR NUMERIC(16,2),
    IDPEDIDO INTEGER,
    IDCLIENTE INTEGER,
    IDREPRESENTANTE SMALLINT)
AS
declare variable VNATOPERACAO char(1);
declare variable VVALORCARTEIRA numeric(16,2);
declare variable VTOTALDEBANT numeric(16,2);
declare variable VTOTALCREANT numeric(16,2);
begin
   select sum(C.VALORCARTEIRA) from CARTEIRA C
    where C.IDFILIAL = :IDFILIAL
      and C.NATOPERACAO = 'C'
      and C.IDREPRESENTANTE between :IDREPINI and :IDREPFIM
      and C.IDPEDIDO between :IDPEDIDOINI and :IDPEDIDOFIM
      and C.IDCLIENTE between :IDCLIENTEINI and :IDCLIENTEFIM
      and C.DATAPEDIDO < :DTINICIAL  into vTOTALCREANT;
   select sum(C.VALORCARTEIRA) from CARTEIRA C
    where C.IDFILIAL = :IDFILIAL
      and C.NATOPERACAO = 'D'
      and C.IDREPRESENTANTE between :IDREPINI and :IDREPFIM
      and C.IDPEDIDO between :IDPEDIDOINI and :IDPEDIDOFIM
      and C.IDCLIENTE between :IDCLIENTEINI and :IDCLIENTEFIM
      and C.DATAPEDIDO < :DTINICIAL  into vTOTALDEBANT;
   if (SALDOANTERIOR is null) then SALDOANTERIOR = 0;
   if (vTOTALDEBANT is null) then vTOTALDEBANT = 0;
   if (vTOTALCREANT is null) then vTOTALCREANT = 0;
   SALDOANTERIOR =(vTOTALCREANT-vTOTALDEBANT);
   HISTORICO = 'SALDO ANTERIOR ===========>';
   suspend;
   for select C.IDCARTEIRA, COLLATEBR(C.HISTORICO), C.DATAPEDIDO, C.NATOPERACAO, C.VALORCARTEIRA,
              C.IDPEDIDO, C.IDCLIENTE, C.IDREPRESENTANTE from CARTEIRA C
       where C.IDFILIAL = :IDFILIAL
         and C.IDREPRESENTANTE between :IDREPINI and :IDREPFIM
         and C.DATAPEDIDO between :DTINICIAL and :DTFINAL
         and C.IDCLIENTE between :IDCLIENTEINI and :IDCLIENTEFIM
         and C.IDPEDIDO between :IDPEDIDOINI and :IDPEDIDOFIM
         order by C.DATAPEDIDO
          into :IDCARTEIRA, :HISTORICO, :DATAPEDIDO, :vNATOPERACAO, :vVALORCARTEIRA,
               :IDPEDIDO, :IDCLIENTE, :IDREPRESENTANTE
    do
     begin
       if (vNATOPERACAO = 'C') then begin
          VALORCREDITO = vVALORCARTEIRA;
          VALORDEBITO = 0; end
       else begin
          VALORDEBITO = vVALORCARTEIRA;
          VALORCREDITO = 0;
       end
       if (vNATOPERACAO = 'C') then
          SALDOANTERIOR = SALDOANTERIOR+vVALORCARTEIRA;
       else
          SALDOANTERIOR = SALDOANTERIOR-vVALORCARTEIRA;
       suspend;
     end
     HISTORICO='SALDO ATUAL ==============>';
     IDCARTEIRA=null;
     IDPEDIDO=null;
     VALORCREDITO=null;
     VALORDEBITO=null;
     DATAPEDIDO = null;
     suspend  ;
end^


ALTER PROCEDURE REL_CENTROCUSTOS_ABERTOS (
    IDFILIAL INTEGER,
    DTINI DATE,
    DTFIM DATE,
    IDOBRAINI INTEGER,
    IDOBRAFIM INTEGER)
RETURNS (
    IDCENTROCUSTO INTEGER,
    NOMECENTROCUSTO VARCHAR(40),
    IDCATEGORIA SMALLINT,
    NOMECATEGORIA VARCHAR(35),
    VALORTOTAL NUMERIC(16,2),
    TIPOOPERACAO CHAR(1))
AS
declare variable VVALORRECEBER numeric(16,2);
declare variable VVALORPAGAR numeric(16,2);
declare variable VVALORMOVTO numeric(16,2);
declare variable VTIPOEMPRESA varchar(20);
begin
    select F.TIPOEMPRESA from FILIAL F
      where F.IDFILIAL = :IDFILIAL
     into :vTIPOEMPRESA;

    if (:VTIPOEMPRESA = 'MSCERCAS') then
    begin
        for select C.IDCENTROCUSTO, C.IDCATEGORIA, COLLATEBR(CT.DESCRICAO), COLLATEBR(C.DESCRICAO), CT.TIPOOPERACAO from CENTROCUSTO C
    
         join CATEGORIA CT
           on CT.IDCATEGORIA = C.IDCATEGORIA
    
          where C.SITUACAORELATORIO = 'S'
            into :IDCENTROCUSTO, :IDCATEGORIA, :NOMECATEGORIA, :NOMECENTROCUSTO, :TIPOOPERACAO
        do
          begin
           select sum(IF_SN(M.TIPOOPERACAO,'=','C',M.VALORMOVTO,(M.VALORMOVTO*-1))) as VALOR from movtocaixa m
              where m.IDFILIAL = :IDFILIAL
                and m.situacaoregistro = '1'
    --            and m.tipooperacao = 'D'
                and m.idcentrocusto = :idcentrocusto
               and m.dtmovimento between :DTINI and :DTFIM
               and m.IDOBRAS between :IDOBRAINI and :IDOBRAFIM
               into :vvalormovto;
    
            if (:VTIPOEMPRESA = 'BREAD') then begin
                select sum(R.VALORDOCUMENTO) from RECEBER R
                   where R.IDFILIAL = :IDFILIAL
                     and R.IDCENTROCUSTO = :IDCENTROCUSTO
                     and R.DATAEMISSAO between :DTINI and :DTFIM
                into :vVALORRECEBER;
        
                select sum(P.VALORDOCUMENTO*-1) from PAGAR P
                   where P.IDFILIAL = :IDFILIAL
                     and P.IDCENTROCUSTO = :IDCENTROCUSTO
                     and P.DATAEMISSAO between :DTINI and :DTFIM
                into :vVALORPAGAR;
            end
            else begin
                select sum(R.VALORDOCUMENTO) from RECEBER R
                   where R.IDFILIAL = :IDFILIAL
                     and R.IDCENTROCUSTO = :IDCENTROCUSTO
                     and R.DATAEMISSAO between :DTINI and :DTFIM
                     and R.IDOBRAS between :IDOBRAINI and :IDOBRAFIM
                     and R.VALORPAGAMENTO is null
                into :vVALORRECEBER;
        
                select sum(P.VALORDOCUMENTO*-1) from PAGAR P
                   where P.IDFILIAL = :IDFILIAL
                     and P.IDCENTROCUSTO = :IDCENTROCUSTO
                     and P.DATAEMISSAO between :DTINI and :DTFIM
                     and P.IDOBRAS between :IDOBRAINI and :IDOBRAFIM
                     and P.VALORPAGAMENTO is null
                into :vVALORPAGAR;
            end
    
            if (vVALORRECEBER is null) then vVALORRECEBER = 0;
            if (vVALORPAGAR is null) then vVALORPAGAR = 0;
            if (vvalormovto is null) then vvalormovto = 0;
    
              VALORTOTAL = (vVALORRECEBER+vVALORPAGAR+vvalormovto);
    
            vVALORRECEBER = 0;
            vVALORPAGAR = 0;
            vvalormovto = 0;
    
    
              if (not VALORTOTAL = 0) then
                suspend;
          end
     end
     else begin
        for select C.IDCENTROCUSTO, C.IDCATEGORIA, COLLATEBR(CT.DESCRICAO), COLLATEBR(C.DESCRICAO), CT.TIPOOPERACAO from CENTROCUSTO C
    
         join CATEGORIA CT
           on CT.IDCATEGORIA = C.IDCATEGORIA
    
          where C.SITUACAORELATORIO = 'S'
            into :IDCENTROCUSTO, :IDCATEGORIA, :NOMECATEGORIA, :NOMECENTROCUSTO, :TIPOOPERACAO
        do
          begin
           select sum(IF_SN(M.TIPOOPERACAO,'=','C',M.VALORMOVTO,(M.VALORMOVTO*-1))) as VALOR from movtocaixa m
              where m.IDFILIAL = :IDFILIAL
                and m.situacaoregistro = '1'
    --            and m.tipooperacao = 'D'
                and m.idcentrocusto = :idcentrocusto
               and m.dtmovimento between :DTINI and :DTFIM
--               and m.IDOBRAS between :IDOBRAINI and :IDOBRAFIM
               into :vvalormovto;
    
            if (:VTIPOEMPRESA = 'BREAD') then begin
                select sum(R.VALORDOCUMENTO) from RECEBER R
                   where R.IDFILIAL = :IDFILIAL
                     and R.IDCENTROCUSTO = :IDCENTROCUSTO
                     and R.DATAEMISSAO between :DTINI and :DTFIM
                into :vVALORRECEBER;
        
                select sum(P.VALORDOCUMENTO*-1) from PAGAR P
                   where P.IDFILIAL = :IDFILIAL
                     and P.IDCENTROCUSTO = :IDCENTROCUSTO
                     and P.DATAEMISSAO between :DTINI and :DTFIM
                into :vVALORPAGAR;
            end
            else begin
                select sum(R.VALORDOCUMENTO) from RECEBER R
                   where R.IDFILIAL = :IDFILIAL
                     and R.IDCENTROCUSTO = :IDCENTROCUSTO
                     and R.DATAEMISSAO between :DTINI and :DTFIM
--                     and R.IDOBRAS between :IDOBRAINI and :IDOBRAFIM
                     and R.VALORPAGAMENTO is null
                into :vVALORRECEBER;
        
                select sum(P.VALORDOCUMENTO*-1) from PAGAR P
                   where P.IDFILIAL = :IDFILIAL
                     and P.IDCENTROCUSTO = :IDCENTROCUSTO
                     and P.DATAEMISSAO between :DTINI and :DTFIM
--                     and P.IDOBRAS between :IDOBRAINI and :IDOBRAFIM
                     and P.VALORPAGAMENTO is null
                into :vVALORPAGAR;
            end
    
            if (vVALORRECEBER is null) then vVALORRECEBER = 0;
            if (vVALORPAGAR is null) then vVALORPAGAR = 0;
            if (vvalormovto is null) then vvalormovto = 0;
    
              VALORTOTAL = (vVALORRECEBER+vVALORPAGAR+vvalormovto);
    
            vVALORRECEBER = 0;
            vVALORPAGAR = 0;
            vvalormovto = 0;
    
    
              if (not VALORTOTAL = 0) then
                suspend;
          end
     end
end^


ALTER PROCEDURE REL_CENTROCUSTOS_COMPETENCIA (
    IDFILIAL INTEGER,
    DTINI DATE,
    DTFIM DATE,
    DTEMISSAOINI DATE,
    DTEMISSAOFIM DATE)
RETURNS (
    IDCENTROCUSTO INTEGER,
    NOMECENTROCUSTO VARCHAR(40),
    IDCATEGORIA SMALLINT,
    NOMECATEGORIA VARCHAR(35),
    VALORTOTAL NUMERIC(16,2),
    TIPOOPERACAO CHAR(1))
AS
declare variable VVALORRECEBER numeric(16,2);
declare variable VVALORPAGAR numeric(16,2);
declare variable VVALORMOVTO numeric(16,2);
begin

    for select C.IDCENTROCUSTO, C.IDCATEGORIA, COLLATEBR(CT.DESCRICAO), COLLATEBR(C.DESCRICAO), CT.TIPOOPERACAO from CENTROCUSTO C

     join CATEGORIA CT
       on CT.IDCATEGORIA = C.IDCATEGORIA

      where C.SITUACAORELATORIO = 'S'
        into :IDCENTROCUSTO, :IDCATEGORIA, :NOMECATEGORIA, :NOMECENTROCUSTO, :TIPOOPERACAO
    do
      begin
       select sum(IF_SN(M.TIPOOPERACAO,'=','C',M.VALORMOVTO,(M.VALORMOVTO*-1))) as VALOR from movtocaixa m
          where m.IDFILIAL = :IDFILIAL
            and m.situacaoregistro = '1'
--            and m.tipooperacao = 'D'
            and m.idcentrocusto = :idcentrocusto
           and m.dtmovimento between :DTINI and :DTFIM
           and m.DTEMISSAO between :DTEMISSAOINI and :DTEMISSAOFIM
           into :vvalormovto;

            select sum(R.VALORDOCUMENTO) from RECEBER R
               where R.IDFILIAL = :IDFILIAL
                 and R.IDCENTROCUSTO = :IDCENTROCUSTO
                 and R.DATAEMISSAO between :DTINI and :DTFIM
                 and R.DATAEMISSAO between :DTEMISSAOINI and :DTEMISSAOFIM
            into :vVALORRECEBER;
    
            select sum(P.VALORDOCUMENTO*-1) from PAGAR P
               where P.IDFILIAL = :IDFILIAL
                 and P.IDCENTROCUSTO = :IDCENTROCUSTO
                 and P.DATAEMISSAO between :DTINI and :DTFIM
                 and P.DATAEMISSAO between :DTEMISSAOINI and :DTEMISSAOFIM
            into :vVALORPAGAR;

        if (vVALORRECEBER is null) then vVALORRECEBER = 0;
        if (vVALORPAGAR is null) then vVALORPAGAR = 0;
        if (vvalormovto is null) then vvalormovto = 0;

          VALORTOTAL = (vVALORRECEBER+vVALORPAGAR+vvalormovto);

        vVALORRECEBER = 0;
        vVALORPAGAR = 0;
        vvalormovto = 0;


          if (not VALORTOTAL = 0) then
            suspend;
      end
end^


ALTER PROCEDURE REL_CENTROCUSTOS_QUITADOS (
    IDFILIAL INTEGER,
    DTINI DATE,
    DTFIM DATE,
    IDOBRAINI INTEGER,
    IDOBRAFIM INTEGER,
    IDCENTROCUSTOINI SMALLINT,
    IDCENTROCUSTOFIM SMALLINT,
    IDCAIXAINI SMALLINT,
    IDCAIXAFIM SMALLINT)
RETURNS (
    IDCENTROCUSTO INTEGER,
    NOMECENTROCUSTO VARCHAR(40),
    IDCATEGORIA SMALLINT,
    NOMECATEGORIA VARCHAR(35),
    VALORTOTAL NUMERIC(16,2),
    TIPOOPERACAO CHAR(1),
    TIPOOPERACAO_M VARCHAR(1))
AS
declare variable VTIPOEMPRESA varchar(20);
begin
    select F.TIPOEMPRESA from FILIAL F
      where F.IDFILIAL = :IDFILIAL
     into :vTIPOEMPRESA;

    if (:VTIPOEMPRESA = 'MSCERCAS') then begin
        for select M.IDCENTROCUSTO, COLLATEBR(C.DESCRICAO),
                   C.IDCATEGORIA, COLLATEBR(CT.DESCRICAO),
                   sum(IF_SN(CT.TIPOOPERACAO,'=','C',M.VALORMOVTO,(M.VALORMOVTO*-1))),
                   CT.TIPOOPERACAO from MOVTOCAIXA M
    
          join CENTROCUSTO C
            on C.IDCENTROCUSTO = M.IDCENTROCUSTO
           and C.SITUACAORELATORIO = 'S'
    
          join CATEGORIA CT
            on CT.IDCATEGORIA = C.IDCATEGORIA
    
          where M.IDFILIAL = :IDFILIAL
            and M.DTMOVIMENTO between :DTINI and :DTFIM
            and M.IDOBRAS between :IDOBRAINI and :IDOBRAFIM
            and M.IDCENTROCUSTO between :IDCENTROCUSTOINI and :IDCENTROCUSTOFIM
            and M.IDCAIXA between :IDCAIXAINI and :IDCAIXAFIM
            group by M.IDCENTROCUSTO, COLLATEBR(C.DESCRICAO),
                     C.IDCATEGORIA, COLLATEBR(CT.DESCRICAO), CT.TIPOOPERACAO
            into :IDCENTROCUSTO, :NOMECENTROCUSTO, :IDCATEGORIA, :NOMECATEGORIA, :VALORTOTAL, :TIPOOPERACAO
        do
          suspend;
    end
    else begin


        for select M.IDCENTROCUSTO, COLLATEBR(C.DESCRICAO),
                   C.IDCATEGORIA, COLLATEBR(CT.DESCRICAO),
                   sum(IF_SN(M.TIPOOPERACAO,'=','C',M.VALORMOVTO,(M.VALORMOVTO*-1))),
                   ct.TIPOOPERACAO from MOVTOCAIXA M
-- EU COLOQUEI ESSE TIPO DE OPERACAO
          join CENTROCUSTO C
            on C.IDCENTROCUSTO = M.IDCENTROCUSTO
           and C.SITUACAORELATORIO = 'S'
    
          join CATEGORIA CT
            on CT.IDCATEGORIA = C.IDCATEGORIA
    
          where M.IDFILIAL = :IDFILIAL
            and M.DTMOVIMENTO between :DTINI and :DTFIM
            and M.IDCENTROCUSTO between :IDCENTROCUSTOINI and :IDCENTROCUSTOFIM
            and M.IDCAIXA between :IDCAIXAINI and :IDCAIXAFIM
            group by M.IDCENTROCUSTO, COLLATEBR(C.DESCRICAO),
                     C.IDCATEGORIA, COLLATEBR(CT.DESCRICAO), CT.TIPOOPERACAO
            into :IDCENTROCUSTO, :NOMECENTROCUSTO, :IDCATEGORIA, :NOMECATEGORIA, :VALORTOTAL, :TIPOOPERACAO
        do
          suspend;
    end
end^


ALTER PROCEDURE REL_CENTROCUSTOS_QUITADOS_ANAL (
    IDFILIAL INTEGER,
    DTINI DATE,
    DTFIM DATE,
    IDOBRAINI INTEGER,
    IDOBRAFIM INTEGER,
    IDCENTROCUSTOINI SMALLINT,
    IDCENTROCUSTOFIM SMALLINT,
    IDCAIXAINI SMALLINT,
    IDCAIXAFIM SMALLINT)
RETURNS (
    IDCENTROCUSTO INTEGER,
    NOMECENTROCUSTO VARCHAR(40),
    IDCATEGORIA SMALLINT,
    NOMECATEGORIA VARCHAR(35),
    VALORCREDITO NUMERIC(16,2),
    VALORDEBITO NUMERIC(16,2),
    TIPOOPERACAO CHAR(1),
    DTMOVIMENTO DATE,
    IDMOVIMENTOCAIXA INTEGER,
    DOCUMENTO VARCHAR(20),
    DESCRICAOHISTORICO VARCHAR(115))
AS
declare variable VVALORMOVTO numeric(14,2);
declare variable VTIPOOPERACAO char(1);
declare variable TIPOEMPRESA varchar(20);
declare variable VCOMPLEMENTO varchar(60);
begin
    select F.TIPOEMPRESA from FILIAL F
      where F.IDFILIAL = :IDFILIAL
     into :TIPOEMPRESA;

    if (:TIPOEMPRESA = 'MSCERCAS') then begin
        for select M.IDCENTROCUSTO, COLLATEBR(C.DESCRICAO),
                   C.IDCATEGORIA, COLLATEBR(CT.DESCRICAO),
                   M.VALORMOVTO, M.IDMOVTOCAIXA, M.DTMOVIMENTO,
                   CT.TIPOOPERACAO, COLLATEBR(M.DOCUMENTO),COLLATEBR(M.DESCRICAOHISTORICO),
                   M.TIPOOPERACAO from MOVTOCAIXA M
    

          join CENTROCUSTO C
            on C.IDCENTROCUSTO = M.IDCENTROCUSTO
           and C.SITUACAORELATORIO = 'S'
    
          join CATEGORIA CT
            on CT.IDCATEGORIA = C.IDCATEGORIA
    
          where M.IDFILIAL = :IDFILIAL
            and M.DTMOVIMENTO between :DTINI and :DTFIM
            and M.IDOBRAS between :IDOBRAINI and :IDOBRAFIM
            and M.IDCENTROCUSTO between :IDCENTROCUSTOINI and :IDCENTROCUSTOFIM
            and M.IDCAIXA between :IDCAIXAINI and :IDCAIXAFIM
            into :IDCENTROCUSTO, :NOMECENTROCUSTO, :IDCATEGORIA, :NOMECATEGORIA, :vVALORMOVTO,
                 :IDMOVIMENTOCAIXA, :DTMOVIMENTO, :TIPOOPERACAO, :DOCUMENTO, :DESCRICAOHISTORICO,
                 :vTIPOOPERACAO
        do
          begin
           if (vTIPOOPERACAO = 'C') then begin
              VALORCREDITO = vVALORMOVTO;
              VALORDEBITO = 0; end
           else begin
              VALORDEBITO = vVALORMOVTO;
              VALORCREDITO = 0;
           end
    
          suspend;
         end
    end
    else begin
        for select M.IDCENTROCUSTO, COLLATEBR(C.DESCRICAO),
                   C.IDCATEGORIA, COLLATEBR(CT.DESCRICAO),
                   M.VALORMOVTO, M.IDMOVTOCAIXA, M.DTMOVIMENTO,
                   CT.TIPOOPERACAO, COLLATEBR(M.DOCUMENTO),COLLATEBR(coalesce(M.COMPLEMENTOHISTORICO,'') ||' - ' || coalesce(M.DESCRICAOHISTORICO,'')),
                   M.TIPOOPERACAO, M.COMPLEMENTOHISTORICO from MOVTOCAIXA M
    
         join CENTROCUSTO C
            on C.IDCENTROCUSTO = M.IDCENTROCUSTO
           and C.SITUACAORELATORIO = 'S'
    
         join CATEGORIA CT
            on CT.IDCATEGORIA = C.IDCATEGORIA
    
          where M.IDFILIAL = :IDFILIAL
            and M.DTMOVIMENTO between :DTINI and :DTFIM
            and M.IDCENTROCUSTO between :IDCENTROCUSTOINI and :IDCENTROCUSTOFIM
            and M.IDCAIXA between :IDCAIXAINI and :IDCAIXAFIM
            into :IDCENTROCUSTO, :NOMECENTROCUSTO, :IDCATEGORIA, :NOMECATEGORIA, :vVALORMOVTO,
                 :IDMOVIMENTOCAIXA, :DTMOVIMENTO, :TIPOOPERACAO, :DOCUMENTO, :DESCRICAOHISTORICO,
                 :vTIPOOPERACAO, :VCOMPLEMENTO
        do
          begin

           if (vTIPOOPERACAO = 'C') then begin
              VALORCREDITO = vVALORMOVTO;
              VALORDEBITO = 0; end
           else begin
              VALORDEBITO = vVALORMOVTO;
              VALORCREDITO = 0;
           end
    
          suspend;
         end
    end
end^


ALTER PROCEDURE REL_CLASSIFICACAO_MERCADO (
    IDFILIAL SMALLINT,
    DTINI DATE,
    DTFIM DATE,
    AA_FIM NUMERIC(14,2),
    A_INI NUMERIC(14,2),
    A_FIM NUMERIC(14,2),
    B_INI NUMERIC(14,2),
    B_FIM NUMERIC(14,2),
    C_INI NUMERIC(14,2),
    C_FIM NUMERIC(14,2),
    D_FIM NUMERIC(14,2),
    IDFORNECEDORINI INTEGER,
    IDFORNECEDORFIM INTEGER)
RETURNS (
    IDATIVIDADE SMALLINT,
    NOMEATIVIDADE VARCHAR(25),
    AA INTEGER,
    A INTEGER,
    B INTEGER,
    C INTEGER,
    D INTEGER,
    TOTAL NUMERIC(14,2))
AS
declare variable VIDPEDIDO numeric(14,2);
declare variable VTOTALPEDIDO numeric(14,2);
begin
  TOTAL = 0;
  for select distinct C.IDCLIENTE, C.IDATIVIDADE, A.NOME, sum(distinct P.TOTALPEDIDO) from CLIENTE C

      left join PEDIDO P
        on P.IDFILIAL = :IDFILIAL
       and P.IDCLIENTE = C.IDCLIENTE

      join ATIVIDADE A
        on A.IDATIVIDADE = C.IDATIVIDADE

     where P.IDFILIAL = :IDFILIAL
       and P.SITUACAOPEDIDO = 'V'
       and P.DATAPEDIDO between :DTINI and :DTFIM
       and (exists(select first 1 IT.IDFILIAL from ITENSPEDIDO IT

                      left join PRODUTO PR
                        on PR.IDFILIAL = :IDFILIAL
                       and PR.IDPRODUTO = IT.IDPRODUTO

                   where PR.IDFORNECEDOR between :IDFORNECEDORINI and :IDFORNECEDORFIM
                     and IT.IDFILIAL = :IDFILIAL
                     and IT.IDPEDIDO = P.IDPEDIDO
                     and IT.IDFOLHA = P.IDFOLHA))

      group by C.IDCLIENTE, P.IDREPRESENTANTE, C.IDATIVIDADE, A.NOME
     into :vIDPEDIDO, :IDATIVIDADE, :NOMEATIVIDADE, :VTOTALPEDIDO
  do begin
     AA = 0;
     A = 0;
     B = 0;
     C = 0;
     D = 0;
     if (VTOTALPEDIDO >= AA_FIM) then
        AA = AA+1;

     if ((VTOTALPEDIDO >= A_INI) and (VTOTALPEDIDO <= A_FIM)) then
        A = A+1;

     if ((VTOTALPEDIDO >= B_INI) and (VTOTALPEDIDO <= B_FIM)) then
        B = B+1;

     if ((VTOTALPEDIDO >= C_INI) and (VTOTALPEDIDO <= C_FIM)) then
        C = C+1;

     if (VTOTALPEDIDO <= D_FIM) then
        D = D+1;

     TOTAL = (AA+A+B+C+D);
        suspend;
  end

end^


ALTER PROCEDURE REL_CLIENTE_MOVIMENTADOS (
    IDFILIAL SMALLINT,
    DTINI DATE,
    DTFIM DATE)
RETURNS (
    IDREPRESENTANTE INTEGER,
    NOMEREPRESENTANTE VARCHAR(40),
    QTDECLIENTE INTEGER,
    QTDEATENDIDOS INTEGER)
AS
begin
  for select R.IDREPRESENTANTE, R.NOME,
    (select count(distinct RC.IDCLIENTE) from REPCLIENTE RC

         left  join CLIENTE C
           on  C.IDCLIENTE = RC.IDCLIENTE

        where C.SITUACAOCREDITO <> 'C'
          and C.EXCLUIDO is null
          and RC.IDREPRESENTANTE = R.IDREPRESENTANTE),

    (select count(distinct PE.IDCLIENTE) from PEDIDO PE
         where PE.IDFILIAL = :IDFILIAL
           and PE.DATAPEDIDO between :DTINI and :DTFIM
           and PE.IDREPRESENTANTE = R.IDREPRESENTANTE
           and PE.SITUACAOPEDIDO = 'V')
     from REPRESENTANTE R

     where R.IDFILIAL = :IDFILIAL
       and R.EXCLUIDO is null
      group by R.IDREPRESENTANTE, R.NOME
      into :IDREPRESENTANTE, :NOMEREPRESENTANTE, :QTDECLIENTE, :QTDEATENDIDOS
  do
    suspend;
end^


ALTER PROCEDURE REL_CLIENTES_NAO_VISITADOS (
    IDFILIAL INTEGER)
RETURNS (
    IDCLIENTE INTEGER,
    NOMECLIENTE VARCHAR(40) CHARACTER SET NONE,
    DTULTIMACOMPRA DATE)
AS
begin
  for select C.IDCLIENTE, COLLATEBR(C.NOME), C.DTULTIMACOMPRA from CLIENTE C
     where  C.EXCLUIDO is null
       and  C.SITUACAOCREDITO <> 'C'
       into :IDCLIENTE, :NOMECLIENTE, :DTULTIMACOMPRA
  do
    suspend;
end^


ALTER PROCEDURE REL_COMISSAORECEBER_REPRE_SINT (
    IDFILIAL SMALLINT,
    DATAINI DATE,
    DATAFIM DATE)
RETURNS (
    IDREPRESENTANTE INTEGER,
    NOMEREPRESENTANTE VARCHAR(60),
    TOTALVENDA NUMERIC(16,2),
    TOTALCOMISSAO NUMERIC(16,4),
    CPF VARCHAR(14))
AS
declare variable VTIPOEMPRESA varchar(20);
begin
  select F.TIPOEMPRESA from FILIAL F
    where F.IDFILIAL = :IDFILIAL
   into :VTIPOEMPRESA;

--  if (:VTIPOEMPRESA = 'ARTPAN') then begin
/*
      for select R.IDREPRESENTANTE, COLLATEBR(R.NOME),
                     (select sum(RE.VALORPAGAMENTO) from RECEBER RE

                         join REPCLIENTE RC
                           on RC.IDFILIAL = :IDFILIAL
                          and RC.IDCLIENTE = RE.IDCLIENTE

                         where RE.IDFILIAL = :IDFILIAL
                           and RE.DATAPAGAMENTO between :DATAINI and :DATAFIM
                           and not RE.VALORPAGAMENTO is null
                           and RC.IDREPRESENTANTE = R.IDREPRESENTANTE),
                           
                     (select sum((RE.VALORPAGAMENTO*RE.TAXACOMISSAO)/100) from RECEBER RE

                         join REPCLIENTE RC
                           on RC.IDFILIAL = :IDFILIAL
                          and RC.IDCLIENTE = RE.IDCLIENTE

                         where RE.IDFILIAL = :IDFILIAL
                           and RE.DATAPAGAMENTO between :DATAINI and :DATAFIM
                           and not RE.TAXACOMISSAO is null
                           and not VALORPAGAMENTO is null
                           and RC.IDREPRESENTANTE = R.IDREPRESENTANTE)
               from REPRESENTANTE R
                      into :IDREPRESENTANTE, :NOMEREPRESENTANTE, :TOTALVENDA, :TOTALCOMISSAO
          do
            suspend;
--  end

*/


  -- SE NAO FOR ARTPAN

--  else begin

      for select R.IDREPRESENTANTE, COLLATEBR(R.NOME), R.CPF_SUPERVISOR,
                     (select sum(RE.VALORPAGAMENTO) from RECEBER RE
                         where RE.IDFILIAL = :IDFILIAL
                           and RE.DATAPAGAMENTO between :DATAINI and :DATAFIM
    --                       and not RE.TAXACOMISSAO is null
                           and not RE.VALORPAGAMENTO is null
                           and RE.IDREPRESENTANTE = R.IDREPRESENTANTE),
                           
                     (select sum((RE.VALORPAGAMENTO*RE.TAXACOMISSAO)/100) from RECEBER RE
                         where RE.IDFILIAL = :IDFILIAL
                           and RE.DATAPAGAMENTO between :DATAINI and :DATAFIM
                           and not RE.TAXACOMISSAO is null
                           and not VALORPAGAMENTO is null
                           and RE.IDREPRESENTANTE = R.IDREPRESENTANTE)
               from REPRESENTANTE R
                      into :IDREPRESENTANTE, :NOMEREPRESENTANTE, :CPF, :TOTALVENDA, :TOTALCOMISSAO
          do
            suspend;
--  end
end^


ALTER PROCEDURE REL_COMISSAOREPRE_ANAL (
    IDFILIAL INTEGER,
    DTINI DATE,
    DTFIM DATE,
    IDREPINI INTEGER,
    IDREPFIM INTEGER)
RETURNS (
    IDREPRESENTANTE INTEGER,
    NOMEREPRESENTANTE VARCHAR(60),
    IDCLIENTE INTEGER,
    NOMECLIENTE VARCHAR(60),
    IDPEDIDO INTEGER,
    IDFOLHA INTEGER,
    TOTALPEDIDO NUMERIC(16,2),
    TOTALCOMISSAO NUMERIC(16,4),
    TIPOOPERACAO CHAR(1),
    TOTALPRODUTO NUMERIC(15,2))
AS
declare variable VTIPOEMPRESA varchar(20);
begin


  for select R.IDREPRESENTANTE, R.NOMEREPRESENTANTE,
             R.IDCLIENTE, R.NOMECLIENTE, R.IDPEDIDO, R.IDFOLHA,
             R.TOTALPEDIDO, R.TOTALCOMISSAO,
             R.TOTALPRODUTO from REL_PEDIDO R

                   where R.IDFILIAL = :IDFILIAL
                     and R.DATAPEDIDO between :DTINI and :DTFIM
                     and R.IDREPRESENTANTE between :IDREPINI and :IDREPFIM
                     and R.SITUACAOPEDIDO = 'V'
            into :IDREPRESENTANTE, :NOMEREPRESENTANTE, :IDCLIENTE, :NOMECLIENTE,
                 :IDPEDIDO, :IDFOLHA, :TOTALPEDIDO, :TOTALCOMISSAO, :TOTALPRODUTO
  do
     begin
        TIPOOPERACAO = 'V';
        suspend;
     end


  for select R.IDREPRESENTANTE, R.NOMEREPRESENTANTE,
             R.IDCLIENTE, R.NOMECLIENTE, R.IDPEDIDO, R.IDFOLHA,
             R.TOTALPEDIDO, R.TOTALCOMISSAO,
             R.TOTALPRODUTO from REL_PEDIDO R

                   where R.IDFILIAL = :IDFILIAL
                     and R.DATAPEDIDO between :DTINI and :DTFIM
                     and R.IDREPRESENTANTE between :IDREPINI and :IDREPFIM
                     and R.SITUACAOPEDIDO = 'B'
            into :IDREPRESENTANTE, :NOMEREPRESENTANTE, :IDCLIENTE, :NOMECLIENTE,
                 :IDPEDIDO, :IDFOLHA, :TOTALPEDIDO, :TOTALCOMISSAO, :TOTALPRODUTO
  do
     begin
        TIPOOPERACAO = 'B';
        suspend;
     end


  for select R.IDREPRESENTANTE, R.NOMEREPRESENTANTE,
             R.IDCLIENTE, R.NOMECLIENTE, R.IDPEDIDO, R.IDFOLHA,
             R.TOTALPEDIDO, R.TOTALCOMISSAO,
             R.TOTALPRODUTO from REL_DEVOLUCAO R

                   where R.IDFILIAL = :IDFILIAL
                     and R.DATAPEDIDO between :DTINI and :DTFIM
                     and R.IDREPRESENTANTE between :IDREPINI and :IDREPFIM
                     and R.SITUACAOPEDIDO = 'V'
            into :IDREPRESENTANTE, :NOMEREPRESENTANTE, :IDCLIENTE, :NOMECLIENTE,
                 :IDPEDIDO, :IDFOLHA, :TOTALPEDIDO, :TOTALCOMISSAO, :TOTALPRODUTO
  do
     begin
        TIPOOPERACAO = 'D';
        suspend;
     end

  exit;


  select F.TIPOEMPRESA from FILIAL F
    where F.IDFILIAL = :IDFILIAL
   into :VTIPOEMPRESA;

  if (:VTIPOEMPRESA = 'ARTPAN') then begin

      for select distinct RE.IDREPRESENTANTE, COLLATEBR(R.NOME),
          P.IDCLIENTE, COLLATEBR(C.NOME), P.IDPEDIDO, P.IDFOLHA,
                 P.TOTALPEDIDO, P.TOTALCOMISSAO
                 
                     from REPCLIENTE RE
      
                   join REPRESENTANTE R
                     on R.IDREPRESENTANTE = RE.IDREPRESENTANTE

                   join CLIENTE C
                     on C.IDCLIENTE = RE.IDCLIENTE

                   join PEDIDO P
                     on P.IDCLIENTE = C.IDCLIENTE
                     and P.IDFILIAL = :IDFILIAL
    

                   where P.DATAPEDIDO between :DTINI and :DTFIM
                     and RE.IDREPRESENTANTE between :IDREPINI and :IDREPFIM
                     and P.SITUACAOPEDIDO = 'V'
                     into :IDREPRESENTANTE, :NOMEREPRESENTANTE, :IDCLIENTE, :NOMECLIENTE,
                          :IDPEDIDO, :IDFOLHA, :TOTALPEDIDO, :TOTALCOMISSAO
          do
            begin
              TIPOOPERACAO = 'V';
              suspend;
            end

      for select distinct RE.IDREPRESENTANTE, COLLATEBR(R.NOME),
          D.IDCLIENTE, COLLATEBR(C.NOME), D.IDPEDIDO, D.IDFOLHA,
                 D.TOTALPEDIDO, D.TOTALCOMISSAO
                 
                     from REPCLIENTE RE
      
                   join REPRESENTANTE R
                     on R.IDREPRESENTANTE = RE.IDREPRESENTANTE

                   join CLIENTE C
                     on C.IDCLIENTE = RE.IDCLIENTE

                   join DEVOLUCAO D
                     on D.IDCLIENTE = C.IDCLIENTE
                     and D.IDFILIAL = :IDFILIAL
    

                   where D.DATAPEDIDO between :DTINI and :DTFIM
                     and RE.IDREPRESENTANTE between :IDREPINI and :IDREPFIM
                     and D.SITUACAOPEDIDO = 'V'
                     into :IDREPRESENTANTE, :NOMEREPRESENTANTE, :IDCLIENTE, :NOMECLIENTE,
                          :IDPEDIDO, :IDFOLHA, :TOTALPEDIDO, :TOTALCOMISSAO
          do
            begin
              TIPOOPERACAO = 'D';
              suspend;
            end

  end



  -- SE NAO FOR EMPRESA ARTPAN
  else begin
      for select R.IDREPRESENTANTE, COLLATEBR(R.NOME),
          P.IDCLIENTE, COLLATEBR(C.NOME), P.IDPEDIDO, P.IDFOLHA,
                 P.TOTALPEDIDO, P.TOTALCOMISSAO
                 
                     from REPRESENTANTE R
      
                   join PEDIDO P
                     on P.IDREPRESENTANTE = R.IDREPRESENTANTE
                     and P.IDFILIAL = :IDFILIAL
    
                   join CLIENTE C
                     on C.IDCLIENTE = P.IDCLIENTE
    
                   where P.DATAPEDIDO between :DTINI and :DTFIM
                     and R.IDREPRESENTANTE between :IDREPINI and :IDREPFIM
                     and P.SITUACAOPEDIDO = 'V'
                     into :IDREPRESENTANTE, :NOMEREPRESENTANTE, :IDCLIENTE, :NOMECLIENTE,
                          :IDPEDIDO, :IDFOLHA, :TOTALPEDIDO, :TOTALCOMISSAO
          do
            begin
              TIPOOPERACAO = 'V';
              suspend;
            end

      for select R.IDREPRESENTANTE, COLLATEBR(R.NOME), D.IDCLIENTE, COLLATEBR(C.NOME), D.IDPEDIDO, D.IDFOLHA,
                 D.TOTALPEDIDO, D.TOTALCOMISSAO
    
                     from REPRESENTANTE R
    
                   join DEVOLUCAO D
                     on D.IDREPRESENTANTE = R.IDREPRESENTANTE
                     and D.IDFILIAL = :IDFILIAL
    
                   join CLIENTE C
                     on C.IDCLIENTE = D.IDCLIENTE
    
                   where D.DATAPEDIDO between :DTINI and :DTFIM
                     and R.IDREPRESENTANTE between :IDREPINI and :IDREPFIM
                     and D.SITUACAOPEDIDO = 'V'
                     into :IDREPRESENTANTE, :NOMEREPRESENTANTE, :IDCLIENTE, :NOMECLIENTE,
                          :IDPEDIDO, :IDFOLHA, :TOTALPEDIDO, :TOTALCOMISSAO
          do
            begin
              TIPOOPERACAO = 'D';
              suspend;
            end

  end
end^


ALTER PROCEDURE REL_COMISSAOREPRE_SINT (
    IDFILIAL SMALLINT,
    DATAINI DATE,
    DATAFIM DATE)
RETURNS (
    IDREPRESENTANTE INTEGER,
    NOMEREPRESENTANTE VARCHAR(60),
    TOTALVENDA NUMERIC(16,2),
    TOTALCOMISSAO NUMERIC(16,4),
    TOTALPRODUTO NUMERIC(15,2),
    DEVTOTALVENDA NUMERIC(16,2),
    DEVCOMISSAO NUMERIC(16,4),
    DEVTOTALPRODUTO NUMERIC(16,2))
AS
declare variable VDEV_TOTALPEDIDO numeric(16,2);
declare variable VTIPOEMPRESA varchar(20);
begin

  select F.TIPOEMPRESA from FILIAL F
    where F.IDFILIAL = :IDFILIAL
   into :VTIPOEMPRESA;

/*
  if (:VTIPOEMPRESA = 'ARTPAN') then begin
      for select R.IDREPRESENTANTE, COLLATEBR(R.NOME),
                     (select sum(IT.PRECOVENDA*IT.QTDEPEDIDO) from ITENSPEDIDO IT
    
                         right join PEDIDO PE
                            on PE.IDFILIAL = :IDFILIAL
                           and PE.IDPEDIDO = IT.IDPEDIDO
                           and PE.IDFOLHA = IT.IDFOLHA

                         LEFT join REPCLIENTE R1
                           on R1.IDFILIAL = :IDFILIAL
                          and R1.IDCLIENTE = PE.IDCLIENTE

                         where IT.IDFILIAL = :IDFILIAL
                           and IT.TROCA = 'N'
                           and PE.SITUACAOPEDIDO = 'V'
                           and R1.IDREPRESENTANTE = R.IDREPRESENTANTE
                           and (PE.DATAPEDIDO between :DATAINI and :DATAFIM)),

                     (select sum(PE.TOTALCOMISSAO-if_nn(D.TOTALCOMISSAO,'<>',0,D.TOTALCOMISSAO,0)) from PEDIDO PE
    
                          left join DEVOLUCAO D
                            on D.IDFILIAL = :IDFILIAL
                           and D.IDPEDIDO = PE.IDPEDIDO
                           and D.IDFOLHA = PE.IDFOLHA

                         left join REPCLIENTE R2
                           on R2.IDFILIAL = :IDFILIAL
                          and R2.IDCLIENTE = D.IDCLIENTE
    
                          where PE.IDFILIAL = :IDFILIAL
                            and PE.SITUACAOPEDIDO = 'V'
                            and R2.IDREPRESENTANTE = R.IDREPRESENTANTE
                            and (PE.DATAPEDIDO between :DATAINI and :DATAFIM))


               from REPRESENTANTE R

                      into :IDREPRESENTANTE, :NOMEREPRESENTANTE, :TOTALVENDA, :TOTALCOMISSAO
          do
            begin
             select sum(IT.QTDEPEDIDO*IT.PRECOVENDA) from ITENSDEVOLUCAO IT
    
                 right join DEVOLUCAO D
                   on D.IDFILIAL = :IDFILIAL
                  and D.IDPEDIDO = IT.IDPEDIDO
                  and D.IDFOLHA = IT.IDFOLHA

                 left join REPCLIENTE R
                   on R.IDFILIAL = :IDFILIAL
                  and R.IDCLIENTE = D.IDCLIENTE
    
               where IT.IDFILIAL = :IDFILIAL
                 and IT.TROCA = 'N'
                 and D.SITUACAOPEDIDO = 'V'
                 and D.DATAPEDIDO between :DATAINI and :DATAFIM
                 and R.IDREPRESENTANTE = :IDREPRESENTANTE
               into :vDEV_TOTALPEDIDO;
    
               if (:vDEV_TOTALPEDIDO is null) then vDEV_TOTALPEDIDO = 0;
    
               if (not :vDEV_TOTALPEDIDO is null) then begin
                   TOTALVENDA = :TOTALVENDA-:vDEV_TOTALPEDIDO;
               end

              if (TOTALVENDA <> 0) then
                  suspend;
            end
  end



  -- SE NAO FOR ARTPAN
  else begin
*/
     for select R.IDREPRESENTANTE, R.NOMEREPRESENTANTE,
                SUM(R.TOTALPRODUTO), -- TOTAL PRODUTO
                SUM(R.TOTALPEDIDO), -- TOTAL VENDA
                SUM(R.TOTALCOMISSAO) -- VALOR COMISSA

           from REL_PEDIDO R

            where R.IDFILIAL = :IDFILIAL
              and R.SITUACAOPEDIDO = 'V'
              and R.DATAPEDIDO between :DATAINI and :DATAFIM
             group by R.IDREPRESENTANTE, R.NOMEREPRESENTANTE
              into :IDREPRESENTANTE, :NOMEREPRESENTANTE, :TOTALPRODUTO, :TOTALVENDA, :TOTALCOMISSAO
     do
       begin
           devtotalproduto = 0;
           devcomissao = 0;
           devtotalvenda = 0;


           select (SUM(R.TOTALPRODUTO)), -- TOTAL PRODUTO
                (SUM(R.TOTALPEDIDO)), -- TOTAL VENDA
                (SUM(R.TOTALCOMISSAO)) -- VALOR COMISSA
           from REL_DEVOLUCAO R
            where R.IDFILIAL = :IDFILIAL
              and R.SITUACAOPEDIDO = 'V'
              and R.DATAPEDIDO between :DATAINI and :DATAFIM
              and R.IDREPRESENTANTE = :IDREPRESENTANTE
             group by R.IDREPRESENTANTE, R.NOMEREPRESENTANTE
             into :DEVTOTALPRODUTO, :DEVTOTALVENDA, :DEVCOMISSAO;

             if (DEVTOTALPRODUTO is null) then DEVTOTALPRODUTO = 0;
             if (DEVTOTALVENDA is null) then DEVTOTALVENDA = 0;
             if (DEVCOMISSAO is null) then DEVCOMISSAO = 0;




             DEVTOTALPRODUTO = 0;
             DEVTOTALVENDA = 0;
             DEVCOMISSAO = 0;


               select (SUM(R.TOTALPRODUTO)), -- TOTAL PRODUTO
                    (SUM(R.TOTALPEDIDO)), -- TOTAL VENDA
                    (SUM(R.TOTALCOMISSAO)) -- VALOR COMISSA
               from REL_PEDIDO R
                where R.IDFILIAL = :IDFILIAL
                  and R.SITUACAOPEDIDO = 'B'
                  and R.DATAPEDIDO between :DATAINI and :DATAFIM
                  and R.IDREPRESENTANTE = :IDREPRESENTANTE
                 group by R.IDREPRESENTANTE, R.NOMEREPRESENTANTE
                 into :DEVTOTALPRODUTO, :DEVTOTALVENDA, :DEVCOMISSAO;
    
                 if (DEVTOTALPRODUTO is null) then DEVTOTALPRODUTO = 0;
                 if (DEVTOTALVENDA is null) then DEVTOTALVENDA = 0;
                 if (DEVCOMISSAO is null) then DEVCOMISSAO = 0;



             TOTALVENDA = TOTALVENDA-(:DEVTOTALVENDA);
             TOTALPRODUTO = TOTALPRODUTO-(:DEVTOTALPRODUTO);
             TOTALCOMISSAO = TOTALCOMISSAO-(:DEVCOMISSAO);

           suspend;
       end
--  end
end^


ALTER PROCEDURE REL_COMPARACAO_3MESES (
    IDFILIAL SMALLINT,
    DTINI_MES1 DATE,
    DTFIM_MES1 DATE,
    DTINI_MES2 DATE,
    DTFIM_MES2 DATE,
    DTINI_MES3 DATE,
    DTFIM_MES3 DATE,
    IDREPRESENTANTEINI SMALLINT,
    IDREPRESENTANTEFIM SMALLINT,
    IDFORNECEDORINI INTEGER,
    IDFORNECEDORFIM INTEGER,
    IDGRUPOINI INTEGER,
    IDGRUPOFIM INTEGER,
    IDPRODUTOINI INTEGER,
    IDPRODUTOFIM INTEGER,
    DTINI_MES4 DATE,
    DTFIM_MES4 DATE,
    DTINI_MES5 DATE,
    DTFIM_MES5 DATE,
    DTINI_MES6 DATE,
    DTFIM_MES6 DATE,
    IDCLIENTEINI INTEGER,
    IDCLIENTEFIM INTEGER)
RETURNS (
    IDREPRESENTANTE SMALLINT,
    NOMEREPRESENTANTE VARCHAR(45),
    VALOR_MES1 NUMERIC(14,2),
    VALOR_MES2 NUMERIC(14,2),
    VALOR_MES3 NUMERIC(14,2),
    VALOR_MES4 NUMERIC(14,2),
    VALOR_MES5 NUMERIC(14,2),
    VALOR_MES6 NUMERIC(14,2),
    CPF VARCHAR(14))
AS
declare variable VDEV_VALORMES1 numeric(14,2);
declare variable VVALOR_MES4 numeric(14,2);
declare variable VVALOR_MES5 numeric(14,2);
declare variable VVALOR_MES6 numeric(14,2);
declare variable VVALOR_MES1 numeric(14,2);
declare variable VDEV_VALORMES2 numeric(14,2);
declare variable VDEV_VALORMES4 numeric(14,2);
declare variable VDEV_VALORMES5 numeric(14,2);
declare variable VDEV_VALORMES6 numeric(14,2);
declare variable VVALOR_MES2 numeric(14,2);
declare variable VDEV_VALORMES3 numeric(14,2);
declare variable VVALOR_MES3 numeric(14,2);
begin
  for select R.IDREPRESENTANTE, R.NOME, R.CPF_SUPERVISOR  from REPRESENTANTE R
     where R.EXCLUIDO is null
       and R.IDREPRESENTANTE between :IDREPRESENTANTEINI and :IDREPRESENTANTEFIM
   into :IDREPRESENTANTE, :NOMEREPRESENTANTE, :CPF
  do
    begin
      select sum(IT.QTDEPEDIDO*IT.PRECOVENDA) from ITENSPEDIDO IT

         right join PEDIDO P
           on P.IDFILIAL = :IDFILIAL
          and P.IDPEDIDO = IT.IDPEDIDO
          and P.IDFOLHA = IT.IDFOLHA

         join PRODUTO PR
           on PR.IDFILIAL = IT.IDFILIAL
          and PR.IDPRODUTO = IT.IDPRODUTO

        where IT.IDFILIAL = :IDFILIAL
          and P.SITUACAOPEDIDO = 'V'
          and IT.TROCA = 'N'
          and P.IDREPRESENTANTE = :IDREPRESENTANTE
          and P.IDCLIENTE between :IDCLIENTEINI and :IDCLIENTEFIM
          and IT.IDPRODUTO between :IDPRODUTOINI and :IDPRODUTOFIM
          and PR.IDFORNECEDOR between :IDFORNECEDORINI and :IDFORNECEDORFIM
          and PR.IDGRUPO between :IDGRUPOINI and :IDGRUPOFIM
          and P.DATAPEDIDO between :DTINI_MES1 and :DTFIM_MES1
          into :vVALOR_MES1;

      select sum(IT.PRECOVENDA*IT.QTDEPEDIDO) from ITENSDEVOLUCAO IT

           right join DEVOLUCAO D
             on D.IDFILIAL = :IDFILIAL
            and D.IDPEDIDO = IT.IDPEDIDO
            and D.IDFOLHA = IT.IDFOLHA

          left join PRODUTO PR
            on PR.IDPRODUTO = IT.IDPRODUTO
           and PR.IDFILIAL = IT.IDFILIAL

         where IT.IDFILIAL = :IDFILIAL
           and D.SITUACAOPEDIDO = 'V'
           and IT.TROCA = 'N'
           and D.IDREPRESENTANTE = :IDREPRESENTANTE
           and D.IDCLIENTE between :IDCLIENTEINI and :IDCLIENTEFIM
           and IT.IDPRODUTO between :IDPRODUTOINI and :IDPRODUTOFIM
           and PR.IDFORNECEDOR between :IDFORNECEDORINI and :IDFORNECEDORFIM
           and PR.IDGRUPO between :IDGRUPOINI and :IDGRUPOFIM
           and D.DATAPEDIDO between :DTINI_MES1 and :DTFIM_MES1
          into :vDEV_VALORMES1;
          if (:vDEV_VALORMES1 is null) then vDEV_VALORMES1 = 0;
          if (:vVALOR_MES1 is null) then vVALOR_MES1 = 0;
          VALOR_MES1 = (:vVALOR_MES1-:vDEV_VALORMES1);


      select sum(IT.QTDEPEDIDO*IT.PRECOVENDA) from ITENSPEDIDO IT

         right join PEDIDO P
           on P.IDFILIAL = :IDFILIAL
          and P.IDPEDIDO = IT.IDPEDIDO
          and P.IDFOLHA = IT.IDFOLHA

         join PRODUTO PR
           on PR.IDFILIAL = IT.IDFILIAL
          and PR.IDPRODUTO = IT.IDPRODUTO

        where IT.IDFILIAL = :IDFILIAL
          and P.SITUACAOPEDIDO = 'V'
          and IT.TROCA = 'N'
          and P.IDREPRESENTANTE = :IDREPRESENTANTE
          and IT.IDPRODUTO between :IDPRODUTOINI and :IDPRODUTOFIM
          and P.IDCLIENTE between :IDCLIENTEINI and :IDCLIENTEFIM
          and PR.IDFORNECEDOR between :IDFORNECEDORINI and :IDFORNECEDORFIM
          and PR.IDGRUPO between :IDGRUPOINI and :IDGRUPOFIM
          and P.DATAPEDIDO between :DTINI_MES2 and :DTFIM_MES2
          into :vVALOR_MES2;

      select sum(IT.PRECOVENDA*IT.QTDEPEDIDO) from ITENSDEVOLUCAO IT

           right join DEVOLUCAO D
             on D.IDFILIAL = :IDFILIAL
            and D.IDPEDIDO = IT.IDPEDIDO
            and D.IDFOLHA = IT.IDFOLHA

          left join PRODUTO PR
            on PR.IDPRODUTO = IT.IDPRODUTO
           and PR.IDFILIAL = IT.IDFILIAL

         where IT.IDFILIAL = :IDFILIAL
           and D.SITUACAOPEDIDO = 'V'
           and IT.TROCA = 'N'
           and D.IDREPRESENTANTE = :IDREPRESENTANTE
           and D.IDCLIENTE between :IDCLIENTEINI and :IDCLIENTEFIM
           and IT.IDPRODUTO between :IDPRODUTOINI and :IDPRODUTOFIM
           and PR.IDFORNECEDOR between :IDFORNECEDORINI and :IDFORNECEDORFIM
           and PR.IDGRUPO between :IDGRUPOINI and :IDGRUPOFIM
           and D.DATAPEDIDO between :DTINI_MES2 and :DTFIM_MES2
          into :vDEV_VALORMES2;
          if (:vDEV_VALORMES2 is null) then vDEV_VALORMES2 = 0;
          if (:vVALOR_MES2 is null) then vVALOR_MES2 = 0;
          VALOR_MES2 = (:vVALOR_MES2-:vDEV_VALORMES2);


      select sum(IT.QTDEPEDIDO*IT.PRECOVENDA) from ITENSPEDIDO IT

         right join PEDIDO P
           on P.IDFILIAL = :IDFILIAL
          and P.IDPEDIDO = IT.IDPEDIDO
          and P.IDFOLHA = IT.IDFOLHA

         join PRODUTO PR
           on PR.IDFILIAL = IT.IDFILIAL
          and PR.IDPRODUTO = IT.IDPRODUTO

        where IT.IDFILIAL = :IDFILIAL
          and P.SITUACAOPEDIDO = 'V'
          and IT.TROCA = 'N'
          and P.IDREPRESENTANTE = :IDREPRESENTANTE
          and P.IDCLIENTE between :IDCLIENTEINI and :IDCLIENTEFIM
          and IT.IDPRODUTO between :IDPRODUTOINI and :IDPRODUTOFIM
          and PR.IDFORNECEDOR between :IDFORNECEDORINI and :IDFORNECEDORFIM
          and PR.IDGRUPO between :IDGRUPOINI and :IDGRUPOFIM
          and P.DATAPEDIDO between :DTINI_MES3 and :DTFIM_MES3
          into :vVALOR_MES3;

      select sum(IT.PRECOVENDA*IT.QTDEPEDIDO) from ITENSDEVOLUCAO IT

           right join DEVOLUCAO D
             on D.IDFILIAL = :IDFILIAL
            and D.IDPEDIDO = IT.IDPEDIDO
            and D.IDFOLHA = IT.IDFOLHA

          left join PRODUTO PR
            on PR.IDPRODUTO = IT.IDPRODUTO
           and PR.IDFILIAL = IT.IDFILIAL

         where IT.IDFILIAL = :IDFILIAL
           and D.SITUACAOPEDIDO = 'V'
           and IT.TROCA = 'N'
           and D.IDREPRESENTANTE = :IDREPRESENTANTE
           and D.IDCLIENTE between :IDCLIENTEINI and :IDCLIENTEFIM
           and IT.IDPRODUTO between :IDPRODUTOINI and :IDPRODUTOFIM
           and PR.IDFORNECEDOR between :IDFORNECEDORINI and :IDFORNECEDORFIM
           and PR.IDGRUPO between :IDGRUPOINI and :IDGRUPOFIM
           and D.DATAPEDIDO between :DTINI_MES3 and :DTFIM_MES3
          into :vDEV_VALORMES3;
          if (:vDEV_VALORMES3 is null) then vDEV_VALORMES3 = 0;
          if (:vVALOR_MES3 is null) then vVALOR_MES3 = 0;
          VALOR_MES3 = (:vVALOR_MES3-:vDEV_VALORMES3);



      select sum(IT.QTDEPEDIDO*IT.PRECOVENDA) from ITENSPEDIDO IT

         right join PEDIDO P
           on P.IDFILIAL = :IDFILIAL
          and P.IDPEDIDO = IT.IDPEDIDO
          and P.IDFOLHA = IT.IDFOLHA

         join PRODUTO PR
           on PR.IDFILIAL = IT.IDFILIAL
          and PR.IDPRODUTO = IT.IDPRODUTO

        where IT.IDFILIAL = :IDFILIAL
          and P.SITUACAOPEDIDO = 'V'
          and IT.TROCA = 'N'
          and P.IDREPRESENTANTE = :IDREPRESENTANTE
          and P.IDCLIENTE between :IDCLIENTEINI and :IDCLIENTEFIM
          and IT.IDPRODUTO between :IDPRODUTOINI and :IDPRODUTOFIM
          and PR.IDFORNECEDOR between :IDFORNECEDORINI and :IDFORNECEDORFIM
          and PR.IDGRUPO between :IDGRUPOINI and :IDGRUPOFIM
          and P.DATAPEDIDO between :DTINI_MES4 and :DTFIM_MES4
          into :vVALOR_MES4;

      select sum(IT.PRECOVENDA*IT.QTDEPEDIDO) from ITENSDEVOLUCAO IT

           right join DEVOLUCAO D
             on D.IDFILIAL = :IDFILIAL
            and D.IDPEDIDO = IT.IDPEDIDO
            and D.IDFOLHA = IT.IDFOLHA

          left join PRODUTO PR
            on PR.IDPRODUTO = IT.IDPRODUTO
           and PR.IDFILIAL = IT.IDFILIAL

         where IT.IDFILIAL = :IDFILIAL
           and D.SITUACAOPEDIDO = 'V'
           and IT.TROCA = 'N'
           and D.IDREPRESENTANTE = :IDREPRESENTANTE
           and D.IDCLIENTE between :IDCLIENTEINI and :IDCLIENTEFIM
           and IT.IDPRODUTO between :IDPRODUTOINI and :IDPRODUTOFIM
           and PR.IDFORNECEDOR between :IDFORNECEDORINI and :IDFORNECEDORFIM
           and PR.IDGRUPO between :IDGRUPOINI and :IDGRUPOFIM
           and D.DATAPEDIDO between :DTINI_MES4 and :DTFIM_MES4
          into :vDEV_VALORMES4;
          if (:vDEV_VALORMES4 is null) then vDEV_VALORMES4 = 0;
          if (:vVALOR_MES4 is null) then vVALOR_MES4 = 0;
          VALOR_MES4 = (:vVALOR_MES4-:vDEV_VALORMES4);


      select sum(IT.QTDEPEDIDO*IT.PRECOVENDA) from ITENSPEDIDO IT

         right join PEDIDO P
           on P.IDFILIAL = :IDFILIAL
          and P.IDPEDIDO = IT.IDPEDIDO
          and P.IDFOLHA = IT.IDFOLHA

         join PRODUTO PR
           on PR.IDFILIAL = IT.IDFILIAL
          and PR.IDPRODUTO = IT.IDPRODUTO

        where IT.IDFILIAL = :IDFILIAL
          and P.SITUACAOPEDIDO = 'V'
          and IT.TROCA = 'N'
          and P.IDREPRESENTANTE = :IDREPRESENTANTE
          and P.IDCLIENTE between :IDCLIENTEINI and :IDCLIENTEFIM
          and IT.IDPRODUTO between :IDPRODUTOINI and :IDPRODUTOFIM
          and PR.IDFORNECEDOR between :IDFORNECEDORINI and :IDFORNECEDORFIM
          and PR.IDGRUPO between :IDGRUPOINI and :IDGRUPOFIM
          and P.DATAPEDIDO between :DTINI_MES5 and :DTFIM_MES5
          into :vVALOR_MES5;

      select sum(IT.PRECOVENDA*IT.QTDEPEDIDO) from ITENSDEVOLUCAO IT

           right join DEVOLUCAO D
             on D.IDFILIAL = :IDFILIAL
            and D.IDPEDIDO = IT.IDPEDIDO
            and D.IDFOLHA = IT.IDFOLHA

          left join PRODUTO PR
            on PR.IDPRODUTO = IT.IDPRODUTO
           and PR.IDFILIAL = IT.IDFILIAL

         where IT.IDFILIAL = :IDFILIAL
           and D.SITUACAOPEDIDO = 'V'
           and IT.TROCA = 'N'
           and D.IDREPRESENTANTE = :IDREPRESENTANTE
           and D.IDCLIENTE between :IDCLIENTEINI and :IDCLIENTEFIM
           and IT.IDPRODUTO between :IDPRODUTOINI and :IDPRODUTOFIM
           and PR.IDFORNECEDOR between :IDFORNECEDORINI and :IDFORNECEDORFIM
           and PR.IDGRUPO between :IDGRUPOINI and :IDGRUPOFIM
           and D.DATAPEDIDO between :DTINI_MES5 and :DTFIM_MES5
          into :vDEV_VALORMES5;
          if (:vDEV_VALORMES5 is null) then vDEV_VALORMES5 = 0;
          if (:vVALOR_MES5 is null) then vVALOR_MES5 = 0;
          VALOR_MES5 = (:vVALOR_MES5-:vDEV_VALORMES5);


      select sum(IT.QTDEPEDIDO*IT.PRECOVENDA) from ITENSPEDIDO IT

         right join PEDIDO P
           on P.IDFILIAL = :IDFILIAL
          and P.IDPEDIDO = IT.IDPEDIDO
          and P.IDFOLHA = IT.IDFOLHA

         join PRODUTO PR
           on PR.IDFILIAL = IT.IDFILIAL
          and PR.IDPRODUTO = IT.IDPRODUTO

        where IT.IDFILIAL = :IDFILIAL
          and P.SITUACAOPEDIDO = 'V'
          and IT.TROCA = 'N'
          and P.IDREPRESENTANTE = :IDREPRESENTANTE
          and P.IDCLIENTE between :IDCLIENTEINI and :IDCLIENTEFIM
          and IT.IDPRODUTO between :IDPRODUTOINI and :IDPRODUTOFIM
          and PR.IDFORNECEDOR between :IDFORNECEDORINI and :IDFORNECEDORFIM
          and PR.IDGRUPO between :IDGRUPOINI and :IDGRUPOFIM
          and P.DATAPEDIDO between :DTINI_MES6 and :DTFIM_MES6
          into :vVALOR_MES6;

      select sum(IT.PRECOVENDA*IT.QTDEPEDIDO) from ITENSDEVOLUCAO IT

           right join DEVOLUCAO D
             on D.IDFILIAL = :IDFILIAL
            and D.IDPEDIDO = IT.IDPEDIDO
            and D.IDFOLHA = IT.IDFOLHA

          left join PRODUTO PR
            on PR.IDPRODUTO = IT.IDPRODUTO
           and PR.IDFILIAL = IT.IDFILIAL

         where IT.IDFILIAL = :IDFILIAL
           and D.SITUACAOPEDIDO = 'V'
           and IT.TROCA = 'N'
           and D.IDREPRESENTANTE = :IDREPRESENTANTE
           and D.IDCLIENTE between :IDCLIENTEINI and :IDCLIENTEFIM
           and IT.IDPRODUTO between :IDPRODUTOINI and :IDPRODUTOFIM
           and PR.IDFORNECEDOR between :IDFORNECEDORINI and :IDFORNECEDORFIM
           and PR.IDGRUPO between :IDGRUPOINI and :IDGRUPOFIM
           and D.DATAPEDIDO between :DTINI_MES6 and :DTFIM_MES6
          into :vDEV_VALORMES6;
          if (:vDEV_VALORMES6 is null) then vDEV_VALORMES6 = 0;
          if (:vVALOR_MES6 is null) then vVALOR_MES6 = 0;
          VALOR_MES6 = (:vVALOR_MES6-:vDEV_VALORMES6);

       if ((:VALOR_MES1 <> 0) or
          (:VALOR_MES2 <> 0) or
          (:VALOR_MES3 <> 0) or
          (:VALOR_MES4 <> 0) or
          (:VALOR_MES5 <> 0) or
          (:VALOR_MES6 <> 0)) then
       suspend;
    end
end^


ALTER PROCEDURE REL_COMPARACAO_3MESES_REGIAO (
    IDFILIAL SMALLINT,
    DTINI_MES1 DATE,
    DTFIM_MES1 DATE,
    DTINI_MES2 DATE,
    DTFIM_MES2 DATE,
    DTINI_MES3 DATE,
    DTFIM_MES3 DATE,
    IDFORNECEDORINI INTEGER,
    IDFORNECEDORFIM INTEGER,
    IDGRUPOINI INTEGER,
    IDGRUPOFIM INTEGER,
    IDPRODUTOINI INTEGER,
    IDPRODUTOFIM INTEGER,
    IDREPRESENTANTEINI INTEGER,
    IDREPRESENTANTEFIM INTEGER)
RETURNS (
    IDREGIAO SMALLINT,
    NOMEREGIAO VARCHAR(45),
    VALOR_MES1 NUMERIC(14,2),
    VALOR_MES2 NUMERIC(14,2),
    VALOR_MES3 NUMERIC(14,2))
AS
DECLARE VARIABLE VDEV_VALORMES1 NUMERIC(14,2);
DECLARE VARIABLE VVALOR_MES1 NUMERIC(14,2);
DECLARE VARIABLE VDEV_VALORMES2 NUMERIC(14,2);
DECLARE VARIABLE VVALOR_MES2 NUMERIC(14,2);
DECLARE VARIABLE VDEV_VALORMES3 NUMERIC(14,2);
DECLARE VARIABLE VVALOR_MES3 NUMERIC(14,2);
begin
  for select R.IDREGIAO, R.NOME  from REGIAO R
     where R.EXCLUIDO is null
   into :IDREGIAO, :NOMEREGIAO
  do
    begin
      select sum(IT.QTDEPEDIDO*IT.PRECOVENDA) from ITENSPEDIDO IT

         right join PEDIDO P
           on P.IDFILIAL = :IDFILIAL
          and P.IDPEDIDO = IT.IDPEDIDO
          and P.IDFOLHA = IT.IDFOLHA

         join CLIENTE C
           on C.IDCLIENTE = P.IDCLIENTE

         join PRODUTO PR
           on PR.IDFILIAL = IT.IDFILIAL
          and PR.IDPRODUTO = IT.IDPRODUTO

        where IT.IDFILIAL = :IDFILIAL
          and P.SITUACAOPEDIDO = 'V'
          and IT.TROCA = 'N'
          and C.IDREGIAO = :IDREGIAO
          and P.IDREPRESENTANTE between :IDREPRESENTANTEINI and :IDREPRESENTANTEFIM
          and IT.IDPRODUTO between :IDPRODUTOINI and :IDPRODUTOFIM
          and PR.IDFORNECEDOR between :IDFORNECEDORINI and :IDFORNECEDORFIM
          and PR.IDGRUPO between :IDGRUPOINI and :IDGRUPOFIM
          and P.DATAPEDIDO between :DTINI_MES1 and :DTFIM_MES1
          into :vVALOR_MES1;

      select sum(IT.PRECOVENDA*IT.QTDEPEDIDO) from ITENSDEVOLUCAO IT

           right join DEVOLUCAO D
             on D.IDFILIAL = :IDFILIAL
            and D.IDPEDIDO = IT.IDPEDIDO
            and D.IDFOLHA = IT.IDFOLHA

         join CLIENTE C
           on C.IDCLIENTE = D.IDCLIENTE

          left join PRODUTO PR
            on PR.IDPRODUTO = IT.IDPRODUTO
           and PR.IDFILIAL = IT.IDFILIAL

         where IT.IDFILIAL = :IDFILIAL
           and D.SITUACAOPEDIDO = 'V'
           and IT.TROCA = 'N'
           and C.IDREGIAO = :IDREGIAO
           and IT.IDPRODUTO between :IDPRODUTOINI and :IDPRODUTOFIM
           and D.IDREPRESENTANTE between :IDREPRESENTANTEINI and :IDREPRESENTANTEFIM
           and PR.IDFORNECEDOR between :IDFORNECEDORINI and :IDFORNECEDORFIM
           and PR.IDGRUPO between :IDGRUPOINI and :IDGRUPOFIM
           and D.DATAPEDIDO between :DTINI_MES1 and :DTFIM_MES1
          into :vDEV_VALORMES1;
          if (:vDEV_VALORMES1 is null) then vDEV_VALORMES1 = 0;
          if (:vVALOR_MES1 is null) then vVALOR_MES1 = 0;
          VALOR_MES1 = (:vVALOR_MES1-:vDEV_VALORMES1);


      select sum(IT.QTDEPEDIDO*IT.PRECOVENDA) from ITENSPEDIDO IT

         right join PEDIDO P
           on P.IDFILIAL = :IDFILIAL
          and P.IDPEDIDO = IT.IDPEDIDO
          and P.IDFOLHA = IT.IDFOLHA

         join CLIENTE C
          on C.IDCLIENTE = P.IDCLIENTE

         join PRODUTO PR
           on PR.IDFILIAL = IT.IDFILIAL
          and PR.IDPRODUTO = IT.IDPRODUTO

        where IT.IDFILIAL = :IDFILIAL
          and P.SITUACAOPEDIDO = 'V'
          and IT.TROCA = 'N'
          and C.IDREGIAO = :IDREGIAO
          and IT.IDPRODUTO between :IDPRODUTOINI and :IDPRODUTOFIM
          and P.IDREPRESENTANTE between :IDREPRESENTANTEINI and :IDREPRESENTANTEFIM
          and PR.IDFORNECEDOR between :IDFORNECEDORINI and :IDFORNECEDORFIM
          and PR.IDGRUPO between :IDGRUPOINI and :IDGRUPOFIM
          and P.DATAPEDIDO between :DTINI_MES2 and :DTFIM_MES2
          into :vVALOR_MES2;

      select sum(IT.PRECOVENDA*IT.QTDEPEDIDO) from ITENSDEVOLUCAO IT

           right join DEVOLUCAO D
             on D.IDFILIAL = :IDFILIAL
            and D.IDPEDIDO = IT.IDPEDIDO
            and D.IDFOLHA = IT.IDFOLHA

         join CLIENTE C
           on C.IDCLIENTE = D.IDCLIENTE

          left join PRODUTO PR
            on PR.IDPRODUTO = IT.IDPRODUTO
           and PR.IDFILIAL = IT.IDFILIAL

         where IT.IDFILIAL = :IDFILIAL
           and D.SITUACAOPEDIDO = 'V'
           and IT.TROCA = 'N'
           and C.IDREGIAO = :IDREGIAO
           and D.IDREPRESENTANTE between :IDREPRESENTANTEINI and :IDREPRESENTANTEFIM
           and IT.IDPRODUTO between :IDPRODUTOINI and :IDPRODUTOFIM
           and PR.IDFORNECEDOR between :IDFORNECEDORINI and :IDFORNECEDORFIM
           and PR.IDGRUPO between :IDGRUPOINI and :IDGRUPOFIM
           and D.DATAPEDIDO between :DTINI_MES2 and :DTFIM_MES2
          into :vDEV_VALORMES2;
          if (:vDEV_VALORMES2 is null) then vDEV_VALORMES2 = 0;
          if (:vVALOR_MES2 is null) then vVALOR_MES2 = 0;
          VALOR_MES2 = (:vVALOR_MES2-:vDEV_VALORMES2);


      select sum(IT.QTDEPEDIDO*IT.PRECOVENDA) from ITENSPEDIDO IT

         right join PEDIDO P
           on P.IDFILIAL = :IDFILIAL
          and P.IDPEDIDO = IT.IDPEDIDO
          and P.IDFOLHA = IT.IDFOLHA

         join CLIENTE C
           on C.IDCLIENTE = P.IDCLIENTE

         join PRODUTO PR
           on PR.IDFILIAL = IT.IDFILIAL
          and PR.IDPRODUTO = IT.IDPRODUTO

        where IT.IDFILIAL = :IDFILIAL
          and P.SITUACAOPEDIDO = 'V'
          and IT.TROCA = 'N'
          and C.IDREGIAO = :IDREGIAO
          and IT.IDPRODUTO between :IDPRODUTOINI and :IDPRODUTOFIM
          and P.IDREPRESENTANTE between :IDREPRESENTANTEINI and :IDREPRESENTANTEFIM
          and PR.IDFORNECEDOR between :IDFORNECEDORINI and :IDFORNECEDORFIM
          and PR.IDGRUPO between :IDGRUPOINI and :IDGRUPOFIM
          and P.DATAPEDIDO between :DTINI_MES3 and :DTFIM_MES3
          into :vVALOR_MES3;

      select sum(IT.PRECOVENDA*IT.QTDEPEDIDO) from ITENSDEVOLUCAO IT

           right join DEVOLUCAO D
             on D.IDFILIAL = :IDFILIAL
            and D.IDPEDIDO = IT.IDPEDIDO
            and D.IDFOLHA = IT.IDFOLHA

         join CLIENTE C
           on C.IDCLIENTE = D.IDCLIENTE

          left join PRODUTO PR
            on PR.IDPRODUTO = IT.IDPRODUTO
           and PR.IDFILIAL = IT.IDFILIAL

         where IT.IDFILIAL = :IDFILIAL
           and D.SITUACAOPEDIDO = 'V'
           and IT.TROCA = 'N'
           and C.IDREGIAO = :IDREGIAO
           and IT.IDPRODUTO between :IDPRODUTOINI and :IDPRODUTOFIM
           and PR.IDFORNECEDOR between :IDFORNECEDORINI and :IDFORNECEDORFIM
           and D.IDREPRESENTANTE between :IDREPRESENTANTEINI and :IDREPRESENTANTEFIM
           and PR.IDGRUPO between :IDGRUPOINI and :IDGRUPOFIM
           and D.DATAPEDIDO between :DTINI_MES3 and :DTFIM_MES3
          into :vDEV_VALORMES3;
          if (:vDEV_VALORMES3 is null) then vDEV_VALORMES3 = 0;
          if (:vVALOR_MES3 is null) then vVALOR_MES3 = 0;
          VALOR_MES3 = (:vVALOR_MES3-:vDEV_VALORMES3);


       if ((:VALOR_MES1 <> 0) or
          (:VALOR_MES2 <> 0) or
          (:VALOR_MES3 <> 0)) then
       suspend;
    end
end^


ALTER PROCEDURE REL_COMPARACAO_INVENTARIO (
    IDFILIAL INTEGER,
    IDGRUPOINI INTEGER,
    IDGRUPOFIM INTEGER,
    IDSUB_GRUPOINI INTEGER,
    IDSUB_GRUPOFIM INTEGER,
    IDFORNECEDORINI INTEGER,
    IDFORNECEDORFIM INTEGER)
RETURNS (
    IDPRODUTO INTEGER,
    NOMEPRODUTO VARCHAR(60) CHARACTER SET NONE,
    QTDE_INVENTARIO NUMERIC(10,3),
    QTDE_DIFERENCA NUMERIC(10,3),
    QTDE_ATUAL NUMERIC(10,3),
    FATORCONVERSAO INTEGER,
    IDGRUPO INTEGER,
    NOMEGRUPO VARCHAR(35) CHARACTER SET NONE,
    VALORDIFERENCA NUMERIC(15,2),
    VALORESTOQUE NUMERIC(15,2),
    VALORINVENTARIO NUMERIC(15,2),
    NOMESUB_GRUPO VARCHAR(30),
    IDSUB_GRUPO INTEGER)
AS
begin
  for select I.IDPRODUTO, COLLATEBR(P.ESPECIFICACAO), P.QTDEATUAL, I.ESTOQUE, P.FATORCONVERSAO, P.IDGRUPO, COLLATEBR(G.NOME),
             sum(I.ESTOQUE*P.CUSTONOTAUNIT), sum(P.QTDEATUAL*P.CUSTONOTAUNIT), COLLATEBR(S.DESCRICAO), P.IDSUB_GRUPO
              from INVENTARIO I
     join PRODUTO P
       on P.IDFILIAL = :IDFILIAL
      and P.IDPRODUTO = I.IDPRODUTO

     left join SUB_GRUPO S
       on S.IDSUB_GRUPO = P.IDSUB_GRUPO

     join GRUPO G
       on G.IDGRUPO = P.IDGRUPO

    where I.IDFILIAL = :IDFILIAL
      and P.IDGRUPO between :IDGRUPOINI and :IDGRUPOFIM
      and P.IDSUB_GRUPO between :IDSUB_GRUPOINI and :IDSUB_GRUPOFIM
      and P.IDFORNECEDOR between :IDFORNECEDORINI and :IDFORNECEDORFIM
      group by I.IDPRODUTO, COLLATEBR(P.ESPECIFICACAO), P.QTDEATUAL, I.ESTOQUE, P.FATORCONVERSAO, P.IDGRUPO, COLLATEBR(G.NOME), COLLATEBR(S.DESCRICAO), P.IDSUB_GRUPO
      into :IDPRODUTO, :NOMEPRODUTO, :QTDE_ATUAL, :QTDE_INVENTARIO, :FATORCONVERSAO, :IDGRUPO, :NOMEGRUPO,
           :VALORINVENTARIO, :VALORESTOQUE, :NOMESUB_GRUPO, :IDSUB_GRUPO
  do
    begin
       if (:QTDE_INVENTARIO is null) then QTDE_INVENTARIO = 0;
       if (:QTDE_ATUAL is null) then QTDE_ATUAL = 0;
       if (:VALORESTOQUE is null) then VALORESTOQUE = 0;
       if (:VALORINVENTARIO is null) then VALORINVENTARIO = 0;

       VALORDIFERENCA = VALORINVENTARIO-VALORESTOQUE;

       QTDE_DIFERENCA = (:QTDE_INVENTARIO-:QTDE_ATUAL);
      suspend;
    end
end^


ALTER PROCEDURE REL_CONSIGUINACAO_VALORES (
    IDFILIAL INTEGER,
    DTINI DATE,
    DTFIM DATE)
RETURNS (
    PEDIDO_MAE INTEGER,
    VIDCONSIGUINACAO INTEGER,
    NOMEREPRESENTANTE VARCHAR(60),
    VALORENTRADA NUMERIC(15,2),
    VALOR_VENDA NUMERIC(15,2),
    VALORCOMPLEMENTO NUMERIC(15,2),
    VALORRETORNO NUMERIC(15,2),
    VALOR_DIFERENCA NUMERIC(15,2))
AS
begin
  for select C.IDCONSIGNACAO from CONSIGNACAO C
    where C.DATA between :DTINI and :DTFIM
       into :VIDCONSIGUINACAO
  do
  begin
      VALORENTRADA = 0;
      VALORCOMPLEMENTO = 0;
      VALORRETORNO = 0;
      VALOR_DIFERENCA = 0;
    
      select first 1 P.IDCONSIGNACAO, P.IDPEDIDO, R.NOME from PEDIDO P
         left join REPRESENTANTE R
            on R.IDREPRESENTANTE = P.IDREPRESENTANTE
       where P.IDFILIAL = :IDFILIAL
         and P.IDCONSIGNACAO = :VIDCONSIGUINACAO
         and P.SITUACAOPEDIDO = 'C'
       order by P.IDPEDIDO
       into :VIDCONSIGUINACAO, :PEDIDO_MAE, :NOMEREPRESENTANTE;
    
    
    
    
      -- VALOR ENTRADA
      select coalesce( sum(P.TOTALPEDIDO), 0) from PEDIDO P
        where P.IDFILIAL = :IDFILIAL
          and P.IDPEDIDO = :PEDIDO_MAE
          and P.IDCONSIGNACAO = :VIDCONSIGUINACAO
          and P.SITUACAOPEDIDO = 'C'
       into :VALORENTRADA;
    
      -- COMPLETMENTOS
      select coalesce( sum(P.TOTALPEDIDO), 0) from PEDIDO P
        where P.IDFILIAL = :IDFILIAL
          and P.IDCONSIGNACAO = :VIDCONSIGUINACAO
          and P.SITUACAOPEDIDO = 'C'
          and P.IDPEDIDO <> :PEDIDO_MAE
       into :VALORCOMPLEMENTO;
    
      -- VENDA
      select coalesce( sum(P.TOTALPRODUTO), 0) from PEDIDO P
        where P.IDFILIAL = :IDFILIAL
          and P.IDCONSIGNACAO = :VIDCONSIGUINACAO
          and P.SITUACAOPEDIDO <> 'C'
       into :VALOR_VENDA;
    
    
      -- DEVOLUCAO
      select coalesce( sum(D.TOTALPEDIDO), 0) from DEVOLUCAO D
        where D.IDFILIAL = :IDFILIAL
          and D.IDCONSIGNACAO = :VIDCONSIGUINACAO
       into :VALORRETORNO;
    
       VALOR_DIFERENCA = (:VALORENTRADA+:VALORCOMPLEMENTO)-:VALORRETORNO;
      suspend;
  end

end^


ALTER PROCEDURE REL_CONTA_CORRENTE_SUPERVISOR (
    IDFILIAL SMALLINT,
    DTINI DATE,
    DTFIM DATE,
    P_IDSUPERVISOR SMALLINT,
    IDPEDIDOINI INTEGER,
    IDPEDIDOFIM INTEGER,
    IDCLIENTEINI INTEGER,
    IDCLIENTEFIM INTEGER)
RETURNS (
    IDMOVTO_SUPERVISOR INTEGER,
    IDSUPERVISOR SMALLINT,
    NM_SUPERVISOR VARCHAR(60),
    DATA_MOVTO DATE,
    IDREPRESENTANTE SMALLINT,
    NM_REPRESENTANTE VARCHAR(60),
    IDCLIENTE INTEGER,
    NM_CLIENTE VARCHAR(60),
    VALOR_MOVTO NUMERIC(12,2),
    TIPO_OPERACAO VARCHAR(1),
    IDPEDIDO INTEGER,
    IDFOLHA SMALLINT,
    SALDOANTERIOR NUMERIC(15,2),
    VALORCREDIDO NUMERIC(15,2),
    VALORDEBITO NUMERIC(15,2),
    SALDO NUMERIC(15,2),
    HISTORICO VARCHAR(30),
    NM_PRODUTO VARCHAR(60),
    EMBALAGEM VARCHAR(10),
    IDPRODUTO INTEGER)
AS
declare variable DEBITO_ANTERIOR numeric(12,2);
declare variable CREDITO_ANTERIOR numeric(12,2);
begin
  select sum(M.VALOR_MOVTO) from MOVTO_SUPERVISOR M
    where M.IDFILIAL = :IDFILIAL
      and M.IDSUPERVISOR = :P_IDSUPERVISOR
      and M.TIPO_OPERACAO = 'C'
      and M.DATA_MOVTO < :DTINI
     into :CREDITO_ANTERIOR;

  select sum(M.VALOR_MOVTO) from MOVTO_SUPERVISOR M
    where M.IDFILIAL = :IDFILIAL
      and M.IDSUPERVISOR = :P_IDSUPERVISOR
      and M.TIPO_OPERACAO = 'D'
      and M.DATA_MOVTO < :DTINI
     into :DEBITO_ANTERIOR;

  if (CREDITO_ANTERIOR IS NULL) then
     CREDITO_ANTERIOR = 0;

  if (DEBITO_ANTERIOR IS NULL) then
     DEBITO_ANTERIOR = 0;


  SALDOANTERIOR = CREDITO_ANTERIOR - DEBITO_ANTERIOR;
  SALDO = SALDOANTERIOR;
  HISTORICO = 'SALDO ANTERIOR =============>';

  suspend;

  for select M.IDMOVTO_SUPERVISOR,
             M.IDSUPERVISOR,
             RS.NOME,
             M.DATA_MOVTO,
             M.IDREPRESENTANTE,
             R.NOME,
             M.IDCLIENTE,
             C.NOME,
             M.VALOR_MOVTO,
             M.TIPO_OPERACAO,
             M.IDPEDIDO,
             M.IDFOLHA,
             P.ESPECIFICACAO,
             P.EMBALAGEM,
             M.IDPRODUTO from MOVTO_SUPERVISOR M

    left join REPRESENTANTE R
       on R.IDREPRESENTANTE = M.IDREPRESENTANTE

    left join REPRESENTANTE RS
      on
      RS.IDREPRESENTANTE = M.IDSUPERVISOR
--      exists(select S.IDREPRESENTANTE from REPRESENTANTE S
--                             where S.CPF_SUPERVISOR = RS.CPF
--                                 and S.IDFILIAL = M.IDFILIAL)
        AND RS.IDFILIAL = M.IDFILIAL
        AND RS.EXCLUIDO is null
        AND RS.SITUACAO = 'A'


    left join CLIENTE C
       on C.IDCLIENTE = M.IDCLIENTE

    left join PRODUTO P
      on P.IDFILIAL = M.IDFILIAL
     and P.IDPRODUTO = M.IDPRODUTO

    where M.IDFILIAL = :IDFILIAL
      and M.IDSUPERVISOR = :P_IDSUPERVISOR
      and M.DATA_MOVTO between :DTINI and :DTFIM
      and M.IDPEDIDO between :IDPEDIDOINI and :IDPEDIDOFIM
      and M.IDCLIENTE between :IDCLIENTEINI and :IDCLIENTEFIM

      order by M.DATA_MOVTO

       into :IDMOVTO_SUPERVISOR,
            :IDSUPERVISOR,
            :NM_SUPERVISOR,
            :DATA_MOVTO,
            :IDREPRESENTANTE,
            :NM_REPRESENTANTE,
            :IDCLIENTE,
            :NM_CLIENTE,
            :VALOR_MOVTO,
            :TIPO_OPERACAO,
            :IDPEDIDO,
            :IDFOLHA,
            :NM_PRODUTO,
            :EMBALAGEM,
            :IDPRODUTO
    do
    begin


      if (TIPO_OPERACAO = 'D') then
      begin
        VALORDEBITO = VALOR_MOVTO;
        VALORCREDIDO = 0;
      end
      else
      begin
        VALORCREDIDO = VALOR_MOVTO;
        VALORDEBITO = 0;
      end

      SALDO = SALDO + VALORCREDIDO - VALORDEBITO;
      HISTORICO = '';
    suspend;

  end
end^


ALTER PROCEDURE REL_COTA (
    IDFILIAL INTEGER,
    IDREPINI INTEGER,
    IDREPFIM INTEGER,
    IDPROINI INTEGER,
    IDPROFIM INTEGER,
    DTINI DATE,
    DTFIM DATE)
RETURNS (
    IDREPRESENTANTE INTEGER,
    NOMEREPRESENTANTE VARCHAR(40) CHARACTER SET NONE,
    IDPRODUTO INTEGER,
    NOMEPRODUTO VARCHAR(60) CHARACTER SET NONE,
    QTDECOTA NUMERIC(10,3),
    QTDEVENDA NUMERIC(10,3),
    FATORCONVERSAO INTEGER,
    PERCENTUAL NUMERIC(10,2))
AS
begin
  for select CT.IDREPRESENTANTE, COLLATEBR(R.NOME), CT.IDPRODUTO, COLLATEBR(P.ESPECIFICACAO),
             CT.QTDE, P.FATORCONVERSAO from COTA CT
     join REPRESENTANTE R
       on R.IDREPRESENTANTE = CT.IDREPRESENTANTE

     join PRODUTO P
       on P.IDFILIAL = :IDFILIAL
      and P.IDPRODUTO = CT.IDPRODUTO

     where CT.IDFILIAL = :IDFILIAL
       and CT.IDREPRESENTANTE between :IDREPINI and :IDREPFIM
       and CT.IDPRODUTO between :IDPROINI and :IDPROFIM
      into :IDREPRESENTANTE, :NOMEREPRESENTANTE, :IDPRODUTO, :NOMEPRODUTO,
           :QTDECOTA, :FATORCONVERSAO
  do
    begin
      select sum(IT.QTDEPEDIDO*IT.FATORCONVERSAO) from ITENSPEDIDO IT
         right join PEDIDO P
           on P.IDPEDIDO = IT.IDPEDIDO
          and P.IDFOLHA = IT.IDFOLHA
          and P.IDFILIAL = :IDFILIAL
         where IT.IDFILIAL = :IDFILIAL
           and P.IDREPRESENTANTE = :IDREPRESENTANTE
           and IT.TROCA = 'N'
           and P.SITUACAOPEDIDO = 'V'
           and P.DATAPEDIDO between :DTINI and :DTFIM
           and IT.IDPRODUTO = :IDPRODUTO
         into :QTDEVENDA;
         PERCENTUAL = ((:QTDEVENDA/(:QTDECOTA*:FATORCONVERSAO))*100);
         if (:PERCENTUAL is null) then PERCENTUAL = 0;
      suspend;
    end
end^


ALTER PROCEDURE REL_COTA_FORNECEDOR (
    IDFILIAL INTEGER,
    IDREPINI INTEGER,
    IDREPFIM INTEGER,
    IDPROINI INTEGER,
    IDPROFIM INTEGER,
    IDFORINI INTEGER,
    IDFORFIM FLOAT,
    DTINI DATE,
    DTFIM DATE)
RETURNS (
    IDREPRESENTANTE INTEGER,
    NOMEREPRESENTANTE VARCHAR(40) CHARACTER SET NONE,
    IDPRODUTO INTEGER,
    NOMEPRODUTO VARCHAR(60) CHARACTER SET NONE,
    QTDECOTA NUMERIC(10,3),
    QTDEVENDA NUMERIC(10,3),
    FATORCONVERSAO INTEGER,
    IDFORNECEDOR INTEGER,
    NOMEFORNECEDOR VARCHAR(60),
    PERCENTUAL NUMERIC(10,2))
AS
begin
  for select CT.IDREPRESENTANTE, COLLATEBR(R.NOME), CT.IDPRODUTO, COLLATEBR(P.ESPECIFICACAO),
             CT.QTDE, P.FATORCONVERSAO, P.IDFORNECEDOR, COLLATEBR(F.NOME) from COTA CT
     join REPRESENTANTE R
       on R.IDREPRESENTANTE = CT.IDREPRESENTANTE

     join PRODUTO P
       on P.IDFILIAL = :IDFILIAL
      and P.IDPRODUTO = CT.IDPRODUTO

      join FORNECEDOR F
        on F.IDFILIAL = :IDFILIAL
       and F.IDFORNECEDOR = P.IDFORNECEDOR

     where CT.IDFILIAL = :IDFILIAL
       and CT.IDREPRESENTANTE between :IDREPINI and :IDREPFIM
       and CT.IDPRODUTO between :IDPROINI and :IDPROFIM
       and P.IDFORNECEDOR between :IDFORINI and :IDFORFIM
      into :IDREPRESENTANTE, :NOMEREPRESENTANTE, :IDPRODUTO, :NOMEPRODUTO,
           :QTDECOTA, :FATORCONVERSAO, :IDFORNECEDOR, :NOMEFORNECEDOR
  do
    begin
      select sum(IT.QTDEPEDIDO*IT.FATORCONVERSAO) from ITENSPEDIDO IT
         right join PEDIDO PD
           on PD.IDPEDIDO = IT.IDPEDIDO
          and PD.IDFOLHA = IT.IDFOLHA
          and PD.IDFILIAL = :IDFILIAL
         where IT.IDFILIAL = :IDFILIAL
           and PD.IDREPRESENTANTE = :IDREPRESENTANTE
           and IT.TROCA = 'N'
           and PD.SITUACAOPEDIDO = 'V'
           and PD.DATAPEDIDO between :DTINI and :DTFIM
           and IT.IDPRODUTO = :IDPRODUTO
        into :QTDEVENDA;
         PERCENTUAL = ((:QTDEVENDA/(:QTDECOTA*:FATORCONVERSAO))*100);
         if (:PERCENTUAL is null) then PERCENTUAL = 0;
      suspend;
    end
end^


ALTER PROCEDURE REL_COTAS_FORNECEDOR (
    IDFILIAL SMALLINT,
    DTINI DATE,
    DTFIM DATE,
    IDREPINI SMALLINT,
    IDREPFIM SMALLINT,
    IDFORINI INTEGER,
    IDFORFIM INTEGER)
RETURNS (
    IDREPRESENTANTE SMALLINT,
    NOMEREPRESENTANTE VARCHAR(60),
    IDFORNECEDOR SMALLINT,
    NOMEFORNECEDOR VARCHAR(60),
    VALORVENDIDO NUMERIC(15,2),
    VALORCOTA NUMERIC(15,2))
AS
declare variable VDEV_PRECOVENDA numeric(15,2);
begin
  for select C.IDREPRESENTANTE, COLLATEBR(R.NOME),
             C.IDFORNECEDOR, COLLATEBR(F.NOME), C.VALOR from COTA_FORNECEDOR C

    join REPRESENTANTE R
      on R.IDREPRESENTANTE = C.IDREPRESENTANTE

    join FORNECEDOR F
     on F.IDFORNECEDOR = C.IDFORNECEDOR
    and F.IDFILIAL = C.IDFILIAL

    where C.IDFILIAL = :IDFILIAL
      and C.IDREPRESENTANTE between :IDREPINI and :IDREPFIM
      and C.IDFORNECEDOR between :IDFORINI and :IDFORFIM
      into :IDREPRESENTANTE, :NOMEREPRESENTANTE,
           :IDFORNECEDOR, :NOMEFORNECEDOR, :VALORCOTA
  do
    begin
      select sum(IT.PRECOVENDA*IT.QTDEPEDIDO) from ITENSPEDIDO IT

        right join PEDIDO PE
          on PE.IDFILIAL = :IDFILIAL
         and PE.IDPEDIDO = IT.IDPEDIDO
         and PE.IDFOLHA = IT.IDFOLHA

        left join PRODUTO PR
          on PR.IDFILIAL = :IDFILIAL
         and PR.IDPRODUTO = IT.IDPRODUTO

       where IT.IDFILIAL = :IDFILIAL
         and IT.TROCA = 'N'
         and PE.SITUACAOPEDIDO = 'V'
         and PE.DATAPEDIDO between :DTINI and :DTFIM
         and PR.IDFORNECEDOR = :IDFORNECEDOR
         and PE.IDREPRESENTANTE = :IDREPRESENTANTE
       into :VALORVENDIDO;

      select sum(IT.PRECOVENDA*IT.QTDEPEDIDO) from ITENSDEVOLUCAO IT

          right join DEVOLUCAO D
            on D.IDFILIAL = :IDFILIAL
           and D.IDPEDIDO = IT.IDPEDIDO
           and D.IDFOLHA = IT.IDFOLHA

         left join PRODUTO P
           on  P.IDPRODUTO = IT.IDPRODUTO
           and P.IDFILIAL = IT.IDFILIAL

          where IT.IDFILIAL = :IDFILIAL
            and IT.TROCA = 'N'
            and D.SITUACAOPEDIDO = 'V'
            and D.DATAPEDIDO between :DTINI and :DTFIM
            and P.IDFORNECEDOR = :IDFORNECEDOR
            and D.IDREPRESENTANTE = :IDREPRESENTANTE
          into :vDEV_PRECOVENDA;

       if (:vDEV_PRECOVENDA is null) then vDEV_PRECOVENDA = 0;
       if (:VALORVENDIDO is null) then VALORVENDIDO = 0;
       if (:VALORCOTA is null) then VALORCOTA = 0;

       VALORVENDIDO = (:VALORVENDIDO-:vDEV_PRECOVENDA);
      suspend;
    end
end^


ALTER PROCEDURE REL_COTAS_GRUPO (
    IDFILIAL SMALLINT,
    DTINI DATE,
    DTFIM DATE,
    IDREPINI SMALLINT,
    IDREPFIM SMALLINT,
    IDGRUPOINI SMALLINT,
    IDGRUPOFIM SMALLINT)
RETURNS (
    IDREPRESENTANTE SMALLINT,
    NOMEREPRESENTANTE VARCHAR(45),
    IDGRUPO SMALLINT,
    NOMEGRUPO VARCHAR(25),
    VALORVENDIDO NUMERIC(15,2),
    VALORCOTA NUMERIC(15,2))
AS
DECLARE VARIABLE VDEV_PRECOVENDA NUMERIC(15,2);
begin
  for select C.IDREPRESENTANTE, COLLATEBR(R.NOME),
             C.IDGRUPO, COLLATEBR(G.NOME), C.VALOR from COTA_GRUPO C

    join REPRESENTANTE R
      on R.IDREPRESENTANTE = C.IDREPRESENTANTE

    join GRUPO G
     on G.IDGRUPO = C.IDGRUPO

    where C.IDFILIAL = :IDFILIAL
      and C.IDREPRESENTANTE between :IDREPINI and :IDREPFIM
      and C.IDGRUPO between :IDGRUPOINI and :IDGRUPOFIM
      into :IDREPRESENTANTE, :NOMEREPRESENTANTE,
           :IDGRUPO, :NOMEGRUPO, :VALORCOTA
  do
    begin
      select sum(IT.PRECOVENDA*IT.QTDEPEDIDO) from ITENSPEDIDO IT

        right join PEDIDO PE
          on PE.IDFILIAL = :IDFILIAL
         and PE.IDPEDIDO = IT.IDPEDIDO
         and PE.IDFOLHA = IT.IDFOLHA

        left join PRODUTO PR
          on PR.IDFILIAL = :IDFILIAL
         and PR.IDPRODUTO = IT.IDPRODUTO

       where IT.IDFILIAL = :IDFILIAL
         and IT.TROCA = 'N'
         and PE.SITUACAOPEDIDO = 'V'
         and PE.DATAPEDIDO between :DTINI and :DTFIM
         and PR.IDGRUPO = :IDGRUPO
         and PE.IDREPRESENTANTE = :IDREPRESENTANTE
       into :VALORVENDIDO;

      select sum(IT.PRECOVENDA*IT.QTDEPEDIDO) from ITENSDEVOLUCAO IT

          right join DEVOLUCAO D
            on D.IDFILIAL = :IDFILIAL
           and D.IDPEDIDO = IT.IDPEDIDO
           and D.IDFOLHA = IT.IDFOLHA

         left join PRODUTO P
           on  P.IDPRODUTO = IT.IDPRODUTO
           and P.IDFILIAL = IT.IDFILIAL

          where IT.IDFILIAL = :IDFILIAL
            and IT.TROCA = 'N'
            and D.SITUACAOPEDIDO = 'V'
            and D.DATAPEDIDO between :DTINI and :DTFIM
            and P.IDGRUPO = :IDGRUPO
            and D.IDREPRESENTANTE = :IDREPRESENTANTE
          into :vDEV_PRECOVENDA;

       if (:vDEV_PRECOVENDA is null) then vDEV_PRECOVENDA = 0;
       if (:VALORVENDIDO is null) then VALORVENDIDO = 0;
       if (:VALORCOTA is null) then VALORCOTA = 0;

       VALORVENDIDO = (:VALORVENDIDO-:vDEV_PRECOVENDA);
      suspend;
    end
end^


ALTER PROCEDURE REL_COTAS_REPRESENTANTE (
    IDFILIAL SMALLINT,
    DTINI DATE,
    DTFIM DATE,
    IDREPRESENTANTEINI INTEGER,
    IDREPRESENTANTEFIM INTEGER,
    IDFORNECEDORINI INTEGER,
    IDFORNECEDORFIM INTEGER)
RETURNS (
    IDREPRESENTANTE SMALLINT,
    NOMEREPRESENTANTE VARCHAR(40),
    COTAS NUMERIC(15,2),
    VALORVENDIDO NUMERIC(15,2))
AS
declare variable VDEV_VALORVENDIDO numeric(15,2);
begin
   for select P.IDREPRESENTANTE, COLLATEBR(R.NOME), R.COTAS,
              sum(IT.PRECOVENDA*IT.QTDEPEDIDO) from ITENSPEDIDO IT

      right join PEDIDO P
         on P.IDFILIAL = IT.IDFILIAL
        and P.IDPEDIDO = IT.IDPEDIDO
        and P.IDFOLHA = IT.IDFOLHA

      join PRODUTO PR
        on PR.IDFILIAL = :IDFILIAL
       and PR.IDPRODUTO = IT.IDPRODUTO

      join REPRESENTANTE R
        on R.IDREPRESENTANTE = P.IDREPRESENTANTE

     where IT.IDFILIAL = :IDFILIAL
       and IT.TROCA = 'N'
       and P.SITUACAOPEDIDO = 'V'
       and P.DATAPEDIDO between :DTINI and :DTFIM
       and PR.IDFORNECEDOR between :IDFORNECEDORINI and :IDFORNECEDORFIM
       and P.IDREPRESENTANTE between :IDREPRESENTANTEINI and :IDREPRESENTANTEFIM
     group by P.IDREPRESENTANTE, COLLATEBR(R.NOME), R.COTAS
     into :IDREPRESENTANTE, :NOMEREPRESENTANTE, :COTAS, :VALORVENDIDO
   do
     begin

         select sum(IT.PRECOVENDA*IT.QTDEPEDIDO) from ITENSDEVOLUCAO IT
              right join DEVOLUCAO D
                 on D.IDFILIAL = IT.IDFILIAL
                and D.IDPEDIDO = IT.IDPEDIDO
                and D.IDFOLHA = IT.IDFOLHA
        
              join PRODUTO PR
                on PR.IDFILIAL = :IDFILIAL
               and PR.IDPRODUTO = IT.IDPRODUTO

           where IT.IDFILIAL = :IDFILIAL
             and IT.TROCA = 'N'
             and D.SITUACAOPEDIDO = 'V'
             and D.DATAPEDIDO between :DTINI and :DTFIM
             and PR.IDFORNECEDOR between :IDFORNECEDORINI and :IDFORNECEDORFIM
             and D.IDREPRESENTANTE = :IDREPRESENTANTE
         into :vDEV_VALORVENDIDO;

         if (:vDEV_VALORVENDIDO is null) then vDEV_VALORVENDIDO = 0;

         VALORVENDIDO = :VALORVENDIDO-:vDEV_VALORVENDIDO;
       suspend;
     end
end^


ALTER PROCEDURE REL_DEVOLUCAOPRODUTO (
    IDFILIAL SMALLINT,
    IDREPINI INTEGER,
    IDREPFIM INTEGER,
    DATAINI DATE,
    DATAFIM DATE,
    IDFORINI INTEGER,
    IDFORFIM INTEGER)
RETURNS (
    IDPRODUTO INTEGER,
    NOMEPRODUTO VARCHAR(60) CHARACTER SET NONE,
    PRECOVENDA NUMERIC(10,2),
    QTDEVENDIDA NUMERIC(10,2),
    FATORCONVERSAO INTEGER,
    TOTALGERAL NUMERIC(10,2),
    PERCENTUAL NUMERIC(10,2))
AS
DECLARE VARIABLE VTOTALGERAL NUMERIC(10,2);
begin
   select sum(IT.PRECOVENDA*IT.QTDEPEDIDO) from ITENSDEVOLUCAO IT
           right join DEVOLUCAO D
             on D.IDPEDIDO = IT.IDPEDIDO
            and D.IDFOLHA = IT.IDFOLHA
            and D.IDFILIAL = :IDFILIAL

            left join PRODUTO P
              on  P.IDPRODUTO = IT.IDPRODUTO
              and P.IDFILIAL = :IDFILIAL

            where IT.IDFILIAL = :IDFILIAL
              and IT.TROCA = 'N'
              and D.SITUACAOPEDIDO = 'V'
              and P.IDFORNECEDOR between :IDFORINI and :IDFORFIM
              and D.DATAPEDIDO between :DATAINI and :DATAFIM
              and D.IDREPRESENTANTE between :IDREPINI and :IDREPFIM
    into :vTOTALGERAL;


   for select IT.IDPRODUTO,COLLATEBR(P.ESPECIFICACAO),sum(IT.PRECOVENDA*IT.QTDEPEDIDO),sum(IT.QTDEPEDIDO*IT.FATORCONVERSAO),P.FATORCONVERSAO
       from ITENSDEVOLUCAO IT

            right join DEVOLUCAO D
              on  D.IDPEDIDO = IT.IDPEDIDO
              and D.IDFOLHA = IT.IDFOLHA
              and D.IDFILIAL = :IDFILIAL

            left join PRODUTO P
               on P.IDPRODUTO = IT.IDPRODUTO
              and P.IDFILIAL = IT.IDFILIAL

            where IT.IDFILIAL = :IDFILIAL
              and D.SITUACAOPEDIDO = 'V'
              and IT.TROCA = 'N'
              and P.IDFORNECEDOR between :IDFORINI and :IDFORFIM
              and D.DATAPEDIDO between :DATAINI and :DATAFIM
              and D.IDREPRESENTANTE between :IDREPINI and :IDREPFIM
               group by IT.IDPRODUTO, COLLATEBR(P.ESPECIFICACAO), P.FATORCONVERSAO
               order by IT.IDPRODUTO
               into :IDPRODUTO, :NOMEPRODUTO,:PRECOVENDA, :QTDEVENDIDA, :FATORCONVERSAO
     do
       begin
        TOTALGERAL = vTOTALGERAL;
        PERCENTUAL = (PRECOVENDA/TOTALGERAL)*100;
        suspend;
       end
end^


ALTER PROCEDURE REL_ENT_SAIDA_CONFERENCIA_SINT (
    IDFILIAL INTEGER,
    DTINI DATE,
    DTFIM DATE,
    IDPROINI INTEGER,
    IDPROFIM INTEGER,
    V_AJUSTEESTOQUE VARCHAR(1),
    V_ITENSPEDIDO VARCHAR(1),
    V_ITENSENTRADA VARCHAR(1),
    V_ITENSDEVOLUCAO VARCHAR(1))
RETURNS (
    IDPRODUTO INTEGER,
    NOMEPRODUTO VARCHAR(60),
    FATORCONVERSAO INTEGER,
    QTDE_ANTERIOR NUMERIC(10,3),
    QTDE_ENTRADA NUMERIC(10,3),
    QTDE_SAIDA NUMERIC(10,3),
    QTDE_ATUAL NUMERIC(10,3),
    CUSTONOTAUNIT NUMERIC(15,4))
AS
declare variable VQTDE_ANTERIOR_E numeric(10,3);
declare variable VQTDE_ANTERIOR_S numeric(10,3);
declare variable VQTDE_ENTRADA numeric(10,3);
declare variable VQTDE_SAIDA numeric(10,3);
declare variable IDCONTROLE integer;
declare variable QTDE_DIFERENCA numeric(10,3);
begin
  for select P.IDPRODUTO, P.ESPECIFICACAO, P.FATORCONVERSAO, P.CUSTONOTAUNIT from PRODUTO P

      where P.IDFILIAL = :IDFILIAL
        and P.IDPRODUTO between :IDPROINI and :IDPROFIM

      order by P.ESPECIFICACAO

      into :IDPRODUTO, :NOMEPRODUTO , :FATORCONVERSAO, :CUSTONOTAUNIT
  do
  begin
      VQTDE_ENTRADA = 0;
      VQTDE_SAIDA = 0;

      QTDE_ANTERIOR = 0;
      QTDE_ENTRADA = 0;
      QTDE_SAIDA = 0;
      QTDE_ATUAL = 0;

      if (V_AJUSTEESTOQUE = 'S') then begin
            select sum(AJ.QTDEAJUSTE*IF_SN(AJ.TIPOOPERACAO,'=','+',AJ.FATORCONVERSAO,0)),
                   sum(AJ.QTDEAJUSTE*IF_SN(AJ.TIPOOPERACAO,'=','-',AJ.FATORCONVERSAO,0)) from AJUSTEESTOQUE AJ

              where AJ.IDFILIAL = :IDFILIAL
                and AJ.DTAJUSTE between :DTINI and :DTFIM
                and AJ.IDPRODUTO = :IDPRODUTO
                into :vQTDE_ENTRADA, :vQTDE_SAIDA;

              if (vQTDE_ENTRADA is null) then vQTDE_ENTRADA = 0;
              if (vQTDE_SAIDA is null) then vQTDE_SAIDA = 0;
              QTDE_ENTRADA = QTDE_ENTRADA+:vQTDE_ENTRADA;
              QTDE_SAIDA = QTDE_SAIDA+:vQTDE_SAIDA;
      end
      if (:V_ITENSPEDIDO = 'S') then begin
            select sum(IT.QTDEPEDIDO*IT.FATORCONVERSAO) from ITENSPEDIDO IT
              left join PEDIDO PE
                on PE.IDFILIAL = :IDFILIAL
               and PE.IDPEDIDO = IT.IDPEDIDO
               and PE.IDFOLHA =  IT.IDFOLHA
        
              where IT.IDFILIAL = :IDFILIAL
               and PE.DATAPEDIDO between :DTINI and :DTFIM
               and IT.IDPRODUTO = :IDPRODUTO

             into :vQTDE_SAIDA;

             if (vQTDE_SAIDA is null) then vQTDE_SAIDA = 0;
             QTDE_SAIDA = QTDE_SAIDA+:vQTDE_SAIDA;
      end

      if (V_ITENSENTRADA = 'S') then begin
            select sum(IT.QTDECOMPRA*IT.FATORCONVERSAO) from ITENSENTRADA IT
              left join ENTRADA E
                on E.IDFILIAL = :IDFILIAL
               and E.IDFORNECEDOR = IT.IDFORNECEDOR
               and E.IDNOTA = IT.IDNOTA
        
              where IT.IDFILIAL = :IDFILIAL
                and E.DATAENTRADA between :DTINI and :DTFIM
                and IT.IDPRODUTO = :IDPRODUTO
                into :vQTDE_ENTRADA;

              if (vQTDE_ENTRADA is null) then vQTDE_ENTRADA = 0;
              QTDE_ENTRADA = QTDE_ENTRADA+:vQTDE_ENTRADA;
      end
    
      if (:V_ITENSDEVOLUCAO = 'S') then begin
            select sum(IT.QTDEPEDIDO*IT.FATORCONVERSAO) from ITENSDEVOLUCAO IT
              join DEVOLUCAO D
                on D.IDFILIAL = :IDFILIAL
               and D.IDPEDIDO = IT.IDPEDIDO
               and D.IDFOLHA = IT.IDFOLHA
        
              where IT.IDFILIAL = :IDFILIAL
                and D.DATAPEDIDO between :DTINI and :DTFIM
                and IT.IDPRODUTO = :IDPRODUTO
                into :vQTDE_SAIDA;

              if (vQTDE_SAIDA is null) then vQTDE_SAIDA = 0;
              QTDE_SAIDA = QTDE_SAIDA-:vQTDE_SAIDA;
        end

        select sum(E.QTDE) from ESTOQUE_FISICO E
        where E.IDFILIAL = :IDFILIAL
        and   E.IDPRODUTO = :IDPRODUTO
        and   E.DTMOVTO < :DTINI
        and   E.SITUACAO = '+'
        into :vQTDE_ANTERIOR_E;
    
         
         select sum(E.QTDE) from ESTOQUE_FISICO E
         where E.IDFILIAL = :IDFILIAL
         and   E.IDPRODUTO = :IDPRODUTO
         and   E.DTMOVTO  < :DTINI
         and   E.SITUACAO = '-'
         into :vQTDE_ANTERIOR_S;
    
/*
         select max(EF.IDCONTROLE) from ESTOQUE_FISICO EF
          where EF.IDFILIAL = :IDFILIAL
            and EF.IDPRODUTO = :IDPRODUTO
            and EF.DTMOVTO <= :DTFIM
         into :IDCONTROLE ;
    
    
         select E.SALDO from ESTOQUE_FISICO E
         where E.IDFILIAL = :IDFILIAL
         and   E.IDPRODUTO = :IDPRODUTO
         and   E.IDCONTROLE = :IDCONTROLE
         into :QTDE_ATUAL;
*/

         if (vQTDE_ANTERIOR_E is null) then vQTDE_ANTERIOR_E = 0;
         if (vQTDE_ANTERIOR_S is null) then vQTDE_ANTERIOR_S = 0;
         if (QTDE_ATUAL is null) then QTDE_ATUAL = 0;

--         QTDE_ANTERIOR = (:VQTDE_ANTERIOR_E-:VQTDE_ANTERIOR_S);

--         QTDE_DIFERENCA = QTDE_ATUAL-(QTDE_ANTERIOR+QTDE_ENTRADA-QTDE_SAIDA);
--         QTDE_DIFERENCA = QTDE_ATUAL-(QTDE_ANTERIOR+QTDE_ENTRADA-QTDE_SAIDA);
--         QTDE_ANTERIOR = QTDE_ANTERIOR + QTDE_DIFERENCA;

         QTDE_ANTERIOR = (VQTDE_ANTERIOR_E-VQTDE_ANTERIOR_S) ;
         QTDE_ATUAL = (QTDE_ANTERIOR+QTDE_ENTRADA-QTDE_SAIDA);
         CUSTONOTAUNIT = (QTDE_ATUAL*CUSTONOTAUNIT);

        if (QTDE_ANTERIOR <> 0 OR QTDE_ENTRADA <> 0 OR QTDE_SAIDA <> 0 OR QTDE_ATUAL <> 0) then
           suspend;
   end
end^


ALTER PROCEDURE REL_ENTRADA_MATERIA_PRIMA (
    IDFILIAL INTEGER,
    DTINI DATE,
    DTFIM DATE)
RETURNS (
    IDCONTROLE INTEGER,
    IDNOTA INTEGER,
    DTENTRADA DATE,
    IDMATERIA_PRIMA INTEGER,
    DESCRICAO_MATERIA VARCHAR(45),
    QTDE NUMERIC(10,2),
    CUSTO NUMERIC(14,2))
AS
begin
   for select IT.IDCONTROLE, E.DTENTRADA, E.IDNOTA,
              IT.IDMATERIA_PRIMA, COLLATEBR(M.ESPECIFICACAO), IT.QTDE, IT.CUSTO from ITENS_ENT_MATERIA_PRIMA IT

     join ENT_MATERIA_PRIMA E
       on E.IDCONTROLE = IT.IDCONTROLE
      and E.IDFILIAL = :IDFILIAL

    left join PRODUTO M
       on M.IDPRODUTO = IT.IDMATERIA_PRIMA
      and M.IDFILIAL = :IDFILIAL
      and M.CONSUMO = 'S'

     where IT.IDFILIAL = :IDFILIAL
       and E.DTENTRADA between :DTINI and :DTFIM
       into :IDCONTROLE, :DTENTRADA, :IDNOTA, :IDMATERIA_PRIMA, :DESCRICAO_MATERIA, :QTDE, :CUSTO
   do
     suspend;
end^


ALTER PROCEDURE REL_ENTRADA_NF (
    IDFILIAL INTEGER,
    DTENTRADAINI DATE,
    DTENTRADAFIM DATE,
    IDFORINI INTEGER,
    IDFORFIM INTEGER,
    DTNOTAFISCALINI DATE,
    DTNOTAFISCALFIM DATE,
    BONIFICADOINI VARCHAR(1),
    BONIFICADOFIM VARCHAR(1),
    IDCFOPINI SMALLINT,
    IDCFOPFIM SMALLINT)
RETURNS (
    NOMEFORNECEDOR VARCHAR(90),
    DATAENTRADA DATE,
    IDNOTA INTEGER,
    CONDICAOPAGTO VARCHAR(35),
    CFOP VARCHAR(5),
    CENTROCUSTO VARCHAR(40),
    TOTALIPI NUMERIC(16,2),
    TOTALFRETE NUMERIC(16,2),
    DESCONTO NUMERIC(10,2),
    TOTALLIQUIDO NUMERIC(10,2),
    IDPRODUTO INTEGER,
    NOMEPRODUTO VARCHAR(60),
    UNIDADE CHAR(10),
    QTDECOMPRA NUMERIC(10,2),
    CUSTONOTA NUMERIC(16,2),
    TOTALPRODUTO NUMERIC(16,2),
    IDFORNECEDOR INTEGER,
    EMBALAGEM VARCHAR(10),
    TIPO_NOTA VARCHAR(1))
AS
begin
   for select 'Forn.: ' || IT.IDFORNECEDOR || ' - ' || COLLATEBR(F.NOME), E.DATAENTRADA, E.IDNOTA, COLLATEBR(CP.DESCRICAO),
              CF.CFOP, COLLATEBR(CC.DESCRICAO), E.TOTALIPI, E.TOTALFRETE, E.TOTALDESCONTO, E.TOTALLIQUIDO,
              IT.IDPRODUTO, COLLATEBR(P.ESPECIFICACAO), COLLATEBR(UN.ABREVIATURA), IT.QTDECOMPRA, IT.CUSTONOTA, E.TOTALPRODUTO,
              IT.IDFORNECEDOR, P.EMBALAGEM, E.TIPO_NOTA  from ITENSENTRADA IT
     join ENTRADA E
       on E.IDNOTA = IT.IDNOTA
      and E.IDFORNECEDOR = IT.IDFORNECEDOR
      and E.IDFILIAL = :IDFILIAL

     left join CENTROCUSTO CC
       on CC.IDCENTROCUSTO = E.IDCENTROCUSTO

     left join PRODUTO P
       on P.IDPRODUTO = IT.IDPRODUTO
      and P.IDFILIAL = :IDFILIAL

     left join UNIDADEMEDIDA UN
       on UN.IDUNIDADEMEDIDA = IT.IDUNIDADEMEDIDA
      and UN.IDFILIAL = :IDFILIAL

     left join CFOP CF
       on CF.IDCFOP = E.IDCFOP
      and CF.IDFILIAL = :IDFILIAL

     left join CONDICAOPAGTO CP
       on CP.IDCONDICAOPAGTO = E.IDCONDICAOPAGTO

     left join FORNECEDOR F
       on F.IDFORNECEDOR = IT.IDFORNECEDOR

     where IT.IDFILIAL = :IDFILIAL
       and E.DATAENTRADA between :DTENTRADAINI and :DTENTRADAFIM
       and E.bonificacao between :bonificadoini and :bonificadofim
       and E.DATANOTAFISCAL between :DTNOTAFISCALINI and :DTNOTAFISCALFIM
       and IT.IDFORNECEDOR between :IDFORINI and :IDFORFIM
       and E.IDCFOP between :IDCFOPINI and :IDCFOPFIM
       into :NOMEFORNECEDOR, :DATAENTRADA, :IDNOTA, :CONDICAOPAGTO,
            :CFOP, :CENTROCUSTO, :TOTALIPI, :TOTALFRETE, :DESCONTO, TOTALLIQUIDO,
            :IDPRODUTO, :NOMEPRODUTO, :UNIDADE, :QTDECOMPRA, :CUSTONOTA, :TOTALPRODUTO,
            :IDFORNECEDOR, :EMBALAGEM, :TIPO_NOTA
   do
     suspend;




   ---------------------------------------
   -- PELO C100
   ---------------------------------------

   for select 'Forn.: ' || E.IDFORNECEDOR || ' - ' || COLLATEBR(F.NOME), E.DT_E_S, E.IDNOTA, COLLATEBR(CP.DESCRICAO),
              CF.CFOP, COLLATEBR(CC.DESCRICAO), E.VL_IPI, E.VL_FRT, E.VL_DESC, E.VL_MERC,
              IT.IDPRODUTO, COLLATEBR(P.ESPECIFICACAO), COLLATEBR(UN.ABREVIATURA), IT.QTD, IT.VL_ITEM, E.VL_MERC,
              E.IDFORNECEDOR, P.EMBALAGEM, E.TIPO_NOTA  from C170_ITENS_NF IT


     join C100_NF E
       on E.IDNOTA = IT.IDNOTA
      and E.CPF_CNPJ = IT.CPF_CNPJ
      and E.IDFILIAL = :IDFILIAL

     left join CENTROCUSTO CC
       on CC.IDCENTROCUSTO = E.IDCENTRO_CUSTO

     left join PRODUTO P
       on P.IDPRODUTO = IT.IDPRODUTO
      and P.IDFILIAL = :IDFILIAL

     left join UNIDADEMEDIDA UN
       on UN.IDUNIDADEMEDIDA = IT.IDUNIDADEMEDIDA
      and UN.IDFILIAL = :IDFILIAL

     left join CFOP CF
       on CF.IDCFOP = E.IDCFOP
      and CF.IDFILIAL = :IDFILIAL

     left join CONDICAOPAGTO CP
       on CP.IDCONDICAOPAGTO = E.IDCONDICAO_PAGTO

     left join FORNECEDOR F
       on F.IDFORNECEDOR = E.IDFORNECEDOR

     where IT.IDFILIAL = :IDFILIAL
       and E.DT_E_S between :DTENTRADAINI and :DTENTRADAFIM
       and E.bonificacao between :bonificadoini and :bonificadofim
       and E.DT_DOC between :DTNOTAFISCALINI and :DTNOTAFISCALFIM
       and E.IDFORNECEDOR between :IDFORINI and :IDFORFIM
       and E.IDCFOP between :IDCFOPINI and :IDCFOPFIM
       and IT.NOTA_PROPRIA_TERCEIROS = 'T'

       and E.NOTA_PROPRIA_TERCEIROS = 'T'
       and E.CADASTRADO_PELA_ENTRADA = 'S'

       into :NOMEFORNECEDOR, :DATAENTRADA, :IDNOTA, :CONDICAOPAGTO,
            :CFOP, :CENTROCUSTO, :TOTALIPI, :TOTALFRETE, :DESCONTO, TOTALLIQUIDO,
            :IDPRODUTO, :NOMEPRODUTO, :UNIDADE, :QTDECOMPRA, :CUSTONOTA, :TOTALPRODUTO,
            :IDFORNECEDOR, :EMBALAGEM, :TIPO_NOTA
   do
     suspend;
end^


ALTER PROCEDURE REL_ENTRADA_NF_DEVOLUCAO (
    IDFILIAL INTEGER,
    DTENTRADAINI DATE,
    DTENTRADAFIM DATE,
    IDFORINI INTEGER,
    IDFORFIM INTEGER,
    DTNOTAFISCALINI DATE,
    DTNOTAFISCALFIM DATE,
    BONIFICADOINI VARCHAR(1),
    BONIFICADOFIM VARCHAR(1))
RETURNS (
    NOMEFORNECEDOR VARCHAR(100),
    DATAENTRADA DATE,
    IDNOTA INTEGER,
    CONDICAOPAGTO VARCHAR(35),
    CFOP VARCHAR(5),
    CENTROCUSTO VARCHAR(40),
    TOTALIPI NUMERIC(16,2),
    TOTALFRETE NUMERIC(16,2),
    DESCONTO NUMERIC(10,2),
    TOTALLIQUIDO NUMERIC(10,2),
    IDPRODUTO INTEGER,
    NOMEPRODUTO VARCHAR(60),
    UNIDADE CHAR(6),
    QTDECOMPRA NUMERIC(10,2),
    CUSTONOTA NUMERIC(16,2),
    TOTALPRODUTO NUMERIC(16,2),
    IDFORNECEDOR INTEGER,
    EMBALAGEM VARCHAR(10))
AS
begin
   for select 'Forn.: ' || IT.IDFORNECEDOR || ' - ' || COLLATEBR(F.NOME), E.DATAENTRADA, E.IDNOTA, COLLATEBR(CP.DESCRICAO),
              CF.CFOP, COLLATEBR(CC.DESCRICAO), E.TOTALDESCONTO, E.TOTALLIQUIDO,
              IT.IDPRODUTO, COLLATEBR(P.ESPECIFICACAO), COLLATEBR(UN.ABREVIATURA), IT.QTDECOMPRA, E.TOTALPRODUTO,
              IT.IDFORNECEDOR, P.EMBALAGEM, IT.custoproduto  from itens_devolucao_entrada IT

     join devolucao_entrada E
       on E.IDNOTA = IT.IDNOTA
      and E.IDFORNECEDOR = IT.IDFORNECEDOR
      and E.IDFILIAL = :IDFILIAL

     left join CENTROCUSTO CC
       on CC.IDCENTROCUSTO = E.IDCENTROCUSTO

     left join PRODUTO P
       on P.IDPRODUTO = IT.IDPRODUTO
      and P.IDFILIAL = :IDFILIAL

     left join UNIDADEMEDIDA UN
       on UN.IDUNIDADEMEDIDA = IT.IDUNIDADEMEDIDA
      and UN.IDFILIAL = :IDFILIAL

     left join CFOP CF
       on CF.IDCFOP = E.IDCFOP
      and CF.IDFILIAL = :IDFILIAL

     left join CONDICAOPAGTO CP
       on CP.IDCONDICAOPAGTO = E.IDCONDICAOPAGTO

     left join FORNECEDOR F
       on F.IDFORNECEDOR = IT.IDFORNECEDOR

     where IT.IDFILIAL = :IDFILIAL
       and E.DATAENTRADA between :DTENTRADAINI and :DTENTRADAFIM
       and E.bonificacao between :bonificadoini and :bonificadofim
       and E.DATANOTAFISCAL between :DTNOTAFISCALINI and :DTNOTAFISCALFIM
       and IT.IDFORNECEDOR between :IDFORINI and :IDFORFIM
       into :NOMEFORNECEDOR, :DATAENTRADA, :IDNOTA, :CONDICAOPAGTO,
            :CFOP, :CENTROCUSTO, :DESCONTO, TOTALLIQUIDO,
            :IDPRODUTO, :NOMEPRODUTO, :UNIDADE, :QTDECOMPRA, :TOTALPRODUTO,
            :IDFORNECEDOR, :EMBALAGEM, :custonota
   do
     suspend;
end^


ALTER PROCEDURE REL_ENTRADA_SAIDA_CONFERENCIA (
    IDFILIAL INTEGER,
    DTINI DATE,
    DTFIM DATE,
    IDPROINI INTEGER,
    IDPROFIM INTEGER,
    V_AJUSTEESTOQUE VARCHAR(1),
    V_ITENSPEDIDO VARCHAR(1),
    V_ITENSENTRADA VARCHAR(1),
    V_ITENSDEVOLUCAO VARCHAR(1))
RETURNS (
    DATAFICHA DATE,
    IDPRODUTO INTEGER,
    NOMEPRODUTO VARCHAR(60) CHARACTER SET NONE,
    HISTORICO VARCHAR(70) CHARACTER SET NONE,
    VALORENTRADA NUMERIC(10,3),
    VALORSAIDA NUMERIC(10,3),
    FATORCONVERSAO INTEGER)
AS
begin
  if (V_AJUSTEESTOQUE = 'S') then begin
      for select AJ.DTAJUSTE, AJ.IDPRODUTO, COLLATEBR(P.ESPECIFICACAO), COLLATEBR(AJ.OBSERVACAO || '    ' || AJ.IDAJUSTEESTOQUE), P.FATORCONVERSAO,
                 sum(AJ.QTDEAJUSTE*IF_SN(AJ.TIPOOPERACAO,'=','+',AJ.FATORCONVERSAO,0)),
                 sum(AJ.QTDEAJUSTE*IF_SN(AJ.TIPOOPERACAO,'=','-',AJ.FATORCONVERSAO,0)) from AJUSTEESTOQUE AJ
    
          join PRODUTO P
            on P.IDFILIAL = :IDFILIAL
           and P.IDPRODUTO = AJ.IDPRODUTO
    
          where AJ.IDFILIAL = :IDFILIAL
            and AJ.DTAJUSTE between :DTINI and :DTFIM
            and AJ.IDPRODUTO between :IDPROINI and :IDPROFIM
            group by AJ.DTAJUSTE, AJ.IDPRODUTO, COLLATEBR(P.ESPECIFICACAO), COLLATEBR(AJ.OBSERVACAO || '    ' || AJ.IDAJUSTEESTOQUE),
                     P.FATORCONVERSAO
            into :DATAFICHA, :IDPRODUTO, :NOMEPRODUTO, :HISTORICO, :FATORCONVERSAO, :VALORENTRADA, :VALORSAIDA
      do
          suspend;
          HISTORICO = null;
  end
  HISTORICO = null;

  if (:V_ITENSPEDIDO = 'S') then begin
      for select PE.DATAPEDIDO, IT.IDPRODUTO, COLLATEBR(P.ESPECIFICACAO), COLLATEBR(C.NOME || '     ' || IT.IDPEDIDO || '/' || IT.IDFOLHA),
                 P.FATORCONVERSAO,  sum(IT.QTDEPEDIDO*IT.FATORCONVERSAO) from ITENSPEDIDO IT

          right join PEDIDO PE
            on PE.IDFILIAL = :IDFILIAL
           and PE.IDPEDIDO = IT.IDPEDIDO
           and PE.IDFOLHA =  IT.IDFOLHA
    
          join CLIENTE C
            on C.IDCLIENTE = PE.IDCLIENTE
          join PRODUTO P
            on P.IDFILIAL = :IDFILIAL
           and P.IDPRODUTO = IT.IDPRODUTO
    
          where IT.IDFILIAL = :IDFILIAL
           and PE.DATAPEDIDO between :DTINI and :DTFIM
           and IT.IDPRODUTO between :IDPROINI and :IDPROFIM
            group by PE.DATAPEDIDO, IT.IDPRODUTO, COLLATEBR(P.ESPECIFICACAO), COLLATEBR(C.NOME || '     ' || IT.IDPEDIDO || '/' || IT.IDFOLHA),
                     P.FATORCONVERSAO
            into :DATAFICHA, :IDPRODUTO, :NOMEPRODUTO, :HISTORICO, :FATORCONVERSAO, :VALORSAIDA
      do
        begin
           VALORENTRADA = 0;
           if (:VALORSAIDA is null) then VALORSAIDA = 0;
           if (:VALORENTRADA is null) then VALORENTRADA = 0;
           suspend;
        end
  end

  if (V_ITENSENTRADA = 'S') then begin
      for select E.DATAENTRADA, IT.IDPRODUTO, COLLATEBR(P.ESPECIFICACAO), COLLATEBR(F.NOME || '     ' || IT.IDNOTA), P.FATORCONVERSAO,
                 sum(IT.QTDECOMPRA*IT.FATORCONVERSAO) from ITENSENTRADA IT
          right join ENTRADA E
            on E.IDFILIAL = :IDFILIAL
           and E.IDFORNECEDOR = IT.IDFORNECEDOR
           and E.IDNOTA = IT.IDNOTA
    
          join FORNECEDOR F
            on F.IDFORNECEDOR = E.IDFORNECEDOR
    
          join PRODUTO P
            on P.IDFILIAL = :IDFILIAL
           and P.IDPRODUTO = IT.IDPRODUTO
    
          where IT.IDFILIAL = :IDFILIAL
            and E.DATAENTRADA between :DTINI and :DTFIM
            and IT.IDPRODUTO between :IDPROINI and :IDPROFIM
            group by E.DATAENTRADA, IT.IDPRODUTO, COLLATEBR(P.ESPECIFICACAO),COLLATEBR(F.NOME || '     ' || IT.IDNOTA), P.FATORCONVERSAO
            into :DATAFICHA, :IDPRODUTO, :NOMEPRODUTO, :HISTORICO, :FATORCONVERSAO, :VALORENTRADA
      do
        begin
           VALORSAIDA = 0;
           if (:VALORSAIDA is null) then VALORSAIDA = 0;
           if (:VALORENTRADA is null) then VALORENTRADA = 0;
          suspend;
        end
  end

  if (:V_ITENSDEVOLUCAO = 'S') then begin
      for select D.DATAPEDIDO, IT.IDPRODUTO, COLLATEBR(P.ESPECIFICACAO), COLLATEBR(C.NOME || '     ' || IT.IDPEDIDO || '/' || IT.IDFOLHA), P.FATORCONVERSAO,
                 sum(IT.QTDEPEDIDO*IT.FATORCONVERSAO) from ITENSDEVOLUCAO IT
          join DEVOLUCAO D
            on D.IDFILIAL = :IDFILIAL
           and D.IDPEDIDO = IT.IDPEDIDO
           and D.IDFOLHA = IT.IDFOLHA
    
          join CLIENTE C
            on C.IDCLIENTE = D.IDCLIENTE
    
          join PRODUTO P
            on P.IDFILIAL = :IDFILIAL
           and P.IDPRODUTO = IT.IDPRODUTO
    
          where IT.IDFILIAL = :IDFILIAL
            and D.DATAPEDIDO between :DTINI and :DTFIM
            and IT.IDPRODUTO between :IDPROINI and :IDPROFIM
            group by D.DATAPEDIDO, IT.IDPRODUTO, COLLATEBR(P.ESPECIFICACAO),COLLATEBR(C.NOME || '     ' || IT.IDPEDIDO || '/' || IT.IDFOLHA), P.FATORCONVERSAO
            into :DATAFICHA, :IDPRODUTO, :NOMEPRODUTO, :HISTORICO, :FATORCONVERSAO, :VALORENTRADA
      do
        begin
           VALORSAIDA = 0;
           if (:VALORSAIDA is null) then VALORSAIDA = 0;
           if (:VALORENTRADA is null) then VALORENTRADA = 0;
          suspend;
        end
    end
end^


ALTER PROCEDURE REL_ENTRADA_SAIDA_MT_PRIMA (
    IDFILIAL SMALLINT,
    DTINI DATE,
    DTFIM DATE)
RETURNS (
    IDMATERIA_PRIMA INTEGER,
    DESCRICAO VARCHAR(60),
    VALORENTRADA NUMERIC(15,2),
    VALORSAIDA NUMERIC(15,2))
AS
declare variable VQTDE numeric(15,2);
declare variable VTIPOAJUSTE char(1);
begin
   /* AJUSTE */
  for select AJ.IDMATERIA_PRIMA, COLLATEBR(MP.ESPECIFICACAO), AJ.TIPOOPERACAO, AJ.QTDE from AJUSTE_MATERIA_PRIMA AJ
     join PRODUTO MP
       on MP.IDFILIAL = :IDFILIAL
      and MP.IDPRODUTO = AJ.IDMATERIA_PRIMA
      and MP.CONSUMO = 'S'
    where AJ.IDFILIAL = :IDFILIAL
      and AJ.DATA between :DTINI and :DTFIM
     into :IDMATERIA_PRIMA, :DESCRICAO, :VTIPOAJUSTE, :VQTDE
  do
    begin
      if (VTIPOAJUSTE = '+') then begin
         VALORENTRADA = :VQTDE;
         VALORSAIDA = 0; end
      else begin
         VALORSAIDA = :VQTDE;
         VALORENTRADA = 0;
      end
      suspend;
    end

   /* ENTRADA */
  for select IT.IDMATERIA_PRIMA, COLLATEBR(MP.ESPECIFICACAO), sum(IT.QTDE) from ITENS_ENT_MATERIA_PRIMA IT
     join ENT_MATERIA_PRIMA EM
       on EM.IDFILIAL = :IDFILIAL
      and EM.IDCONTROLE = IT.IDCONTROLE
     join PRODUTO MP
       on MP.IDFILIAL = :IDFILIAL
      and MP.IDPRODUTO = IT.IDMATERIA_PRIMA
      and MP.CONSUMO = 'S'

    where IT.IDFILIAL = :IDFILIAL
      and EM.DTENTRADA between :DTINI and :DTFIM
     group by IT.IDMATERIA_PRIMA, COLLATEBR(MP.ESPECIFICACAO)
     into :IDMATERIA_PRIMA, :DESCRICAO, :VALORENTRADA
  do
    begin
      VALORSAIDA = 0;
      suspend;
    end

  /* SAINDA */
  for select IT.IDMATERIA_PRIMA, COLLATEBR(MP.ESPECIFICACAO), sum(IT.QTDE*P.QTDE_RECEITA) from PRODUCAO P
    join RECEITA R
      on R.IDFILIAL = :IDFILIAL
     and R.IDCONTROLE = P.IDRECEITA
    join ITENSRECEITA IT
      on IT.IDFILIAL = :IDFILIAL
     and IT.IDCONTROLE = R.IDCONTROLE
    join PRODUTO MP
      on MP.IDFILIAL = :IDFILIAL
     and MP.IDPRODUTO = IT.IDMATERIA_PRIMA
      and MP.CONSUMO = 'S'

    where P.IDFILIAL = :IDFILIAL
      and P.DATA between :DTINI and :DTFIM
     group by IT.IDMATERIA_PRIMA, COLLATEBR(MP.ESPECIFICACAO)
     into :IDMATERIA_PRIMA, :DESCRICAO, :VALORSAIDA
  do
    begin
      VALORENTRADA = 0;
      suspend;
    end
end^


ALTER PROCEDURE REL_ENTRADAPRODUTO_FOR (
    IDFILIAL INTEGER,
    IDFORINI INTEGER,
    IDFORFIM INTEGER,
    IDGRUPOINI INTEGER,
    IDGRUPOFIM INTEGER,
    DTENTRADAINI DATE,
    DTENTRADAFIM DATE,
    DTNOTAFISCALINI DATE,
    DTNOTAFISCALFIM DATE)
RETURNS (
    IDFORNECEDOR INTEGER,
    NOMEFORNECEDOR VARCHAR(40),
    IDGRUPO INTEGER,
    NOMEGRUPO VARCHAR(40),
    IDPRODUTO INTEGER,
    NOMEPRODUTO VARCHAR(60),
    UNIDADE VARCHAR(20),
    FATORCONVERSAO INTEGER,
    QTDEVENDIDA NUMERIC(16,2),
    TOTALVENDIDO NUMERIC(16,2),
    TOTALCUSTO NUMERIC(15,2),
    IDSUB_GRUPO INTEGER,
    FATURAMENTO_CX NUMERIC(15,3))
AS
begin
  for select PR.IDFORNECEDOR, COLLATEBR(F.NOME), PR.IDGRUPO, COLLATEBR(G.NOME), IT.IDPRODUTO, COLLATEBR(PR.ESPECIFICACAO),
             COLLATEBR(UM.DESCRICAO),UM.FATORCONVERSAO, sum(IT.QTDECOMPRA*IT.FATORCONVERSAO), sum(IT.CUSTOPRODUTO*IT.QTDECOMPRA),
             sum(IT.CUSTONOTAUNIT*IT.FATORCONVERSAO) , PR.IDSUB_GRUPO,
             sum((IT.QTDECOMPRA*IT.FATORCONVERSAO)/PR.FATORCONVERSAO) from ITENSENTRADA IT
        left join ENTRADA ET
          on ET.IDNOTA = IT.IDNOTA
         and ET.IDFORNECEDOR = IT.IDFORNECEDOR
         and ET.IDFILIAL = :IDFILIAL

        join PRODUTO PR
          on PR.IDPRODUTO = IT.IDPRODUTO
         and PR.IDFILIAL = :IDFILIAL

        join GRUPO G
          on G.IDGRUPO = PR.IDGRUPO

        join FORNECEDOR F
          on F.IDFORNECEDOR = PR.IDFORNECEDOR

        join UNIDADEMEDIDA UM
          on UM.IDUNIDADEMEDIDA = PR.IDUNIDADEMEDIDA
         and UM.IDFILIAL = :IDFILIAL
         
        where IT.IDFILIAL = :IDFILIAL
          and ET.DATAENTRADA between :DTENTRADAINI and :DTENTRADAFIM
          and ET.DATANOTAFISCAL between :DTNOTAFISCALINI and :DTNOTAFISCALFIM
          and PR.IDFORNECEDOR between :IDFORINI and :IDFORFIM
          and PR.IDGRUPO between :IDGRUPOINI and :IDGRUPOFIM
        group by PR.IDFORNECEDOR, COLLATEBR(F.NOME), PR.IDGRUPO, COLLATEBR(G.NOME),IT.IDPRODUTO, COLLATEBR(PR.ESPECIFICACAO), COLLATEBR(UM.DESCRICAO), UM.FATORCONVERSAO, PR.IDSUB_GRUPO
        into :IDFORNECEDOR, :NOMEFORNECEDOR, :IDGRUPO,:NOMEGRUPO,:IDPRODUTO, :NOMEPRODUTO, :UNIDADE,:FATORCONVERSAO,:QTDEVENDIDA, :TOTALVENDIDO, :TOTALCUSTO, :IDSUB_GRUPO, :FATURAMENTO_CX
  do
    begin
--        TOTALCUSTO = (TOTALVENDIDO/FATURAMENTO_CX);
        suspend;
    end




  ------------------------------
  -- C100
  ------------------------------

  for select PR.IDFORNECEDOR, COLLATEBR(F.NOME), PR.IDGRUPO, COLLATEBR(G.NOME), IT.IDPRODUTO, COLLATEBR(PR.ESPECIFICACAO),
             COLLATEBR(UM.DESCRICAO),UM.FATORCONVERSAO, sum(IT.QTD), sum(IT.VL_ITEM),
             sum(IT.VL_ITEM) , PR.IDSUB_GRUPO,
             sum((IT.QTD*UM1.FATORCONVERSAO)/PR.FATORCONVERSAO) from C170_ITENS_NF IT

        left join C100_NF ET
          on ET.IDNOTA = IT.IDNOTA
         and ET.CPF_CNPJ = IT.CPF_CNPJ
         and ET.IDFILIAL = :IDFILIAL

        join PRODUTO PR
          on PR.IDPRODUTO = IT.IDPRODUTO
         and PR.IDFILIAL = :IDFILIAL

        join GRUPO G
          on G.IDGRUPO = PR.IDGRUPO

        join FORNECEDOR F
          on F.IDFORNECEDOR = PR.IDFORNECEDOR

        join UNIDADEMEDIDA UM
          on UM.IDUNIDADEMEDIDA = PR.IDUNIDADEMEDIDA
         and UM.IDFILIAL = :IDFILIAL

        join UNIDADEMEDIDA UM1
          on UM1.IDUNIDADEMEDIDA = IT.IDUNIDADEMEDIDA
         and UM1.IDFILIAL = :IDFILIAL

         
        where IT.IDFILIAL = :IDFILIAL
          and ET.DT_E_S between :DTENTRADAINI and :DTENTRADAFIM
          and ET.DT_DOC between :DTNOTAFISCALINI and :DTNOTAFISCALFIM
          and PR.IDFORNECEDOR between :IDFORINI and :IDFORFIM
          and PR.IDGRUPO between :IDGRUPOINI and :IDGRUPOFIM

          and IT.NOTA_PROPRIA_TERCEIROS = 'T'

          and ET.NOTA_PROPRIA_TERCEIROS = 'T'
          and ET.CADASTRADO_PELA_ENTRADA = 'S'

        group by PR.IDFORNECEDOR, COLLATEBR(F.NOME), PR.IDGRUPO, COLLATEBR(G.NOME),IT.IDPRODUTO, COLLATEBR(PR.ESPECIFICACAO), COLLATEBR(UM.DESCRICAO), UM.FATORCONVERSAO, PR.IDSUB_GRUPO
        into :IDFORNECEDOR, :NOMEFORNECEDOR, :IDGRUPO,:NOMEGRUPO,:IDPRODUTO, :NOMEPRODUTO, :UNIDADE,:FATORCONVERSAO,:QTDEVENDIDA, :TOTALVENDIDO, :TOTALCUSTO, :IDSUB_GRUPO, :FATURAMENTO_CX
  do
    begin
--        TOTALCUSTO = (TOTALVENDIDO/FATURAMENTO_CX);
        suspend;
    end
end^


ALTER PROCEDURE REL_ENTRADAPRODUTO_PESO (
    IDFILIAL INTEGER,
    DTINI DATE,
    DTFIM DATE,
    IDPRODUTOINI INTEGER,
    IDPRODUTOFIM INTEGER,
    IDFORNECEDORINI INTEGER,
    IDFORNECEDORFIM INTEGER)
RETURNS (
    IDPRODUTO INTEGER,
    NOMEPRODUTO VARCHAR(60) CHARACTER SET NONE,
    NOMEFORNECEDOR VARCHAR(60) CHARACTER SET NONE,
    IDUNIDADEMEDIDA INTEGER,
    PESO NUMERIC(10,3),
    EMBALAGEM VARCHAR(20) CHARACTER SET NONE,
    IDFORNECEDOR INTEGER,
    FATORCONVERSAO INTEGER,
    ABREVIATURA VARCHAR(10) CHARACTER SET NONE,
    QTDECAIXA NUMERIC(16,3),
    IDGRUPO INTEGER,
    IDSUBGRUPO INTEGER)
AS
declare variable VDEV_QTDEPEDIDO numeric(10,3);
begin
    for select IT.IDPRODUTO,COLLATEBR(P.ESPECIFICACAO), COLLATEBR(R.NOME),
       P.IDUNIDADEMEDIDA, P.PESO, P.EMBALAGEM,R.IDFORNECEDOR, P.FATORCONVERSAO, UN.ABREVIATURA,
       sum(IT.QTDECOMPRA*IT.FATORCONVERSAO), p.IDGRUPO, p.IDSUB_GRUPO from ITENSENTRADA IT
    
    right join ENTRADA PE
      on PE.IDFILIAL = :IDFILIAL
     and PE.IDNOTA = IT.IDNOTA
     and PE.IDFORNECEDOR = IT.IDFORNECEDOR
    
    left join FORNECEDOR R
      on R.IDFORNECEDOR = PE.IDFORNECEDOR
    
    join PRODUTO P
      on P.IDFILIAL = :IDFILIAL
     and P.IDPRODUTO = IT.IDPRODUTO
    
    left join FORNECEDOR F
       on F.IDFORNECEDOR = P.IDFORNECEDOR

    join UNIDADEMEDIDA  UN
       on UN.IDUNIDADEMEDIDA = P.IDUNIDADEMEDIDA
      and UN.IDFILIAL = :IDFILIAL
    
    where IT.IDFILIAL = :IDFILIAL
      and PE.DATAENTRADA between :DTINI and :DTFIM
      and P.IDFORNECEDOR between :IDFORNECEDORINI and :IDFORNECEDORFIM
      and IT.IDPRODUTO between :IDPRODUTOINI and :IDPRODUTOFIM
      group by IT.IDPRODUTO,COLLATEBR(P.ESPECIFICACAO), COLLATEBR(R.NOME),
               P.IDUNIDADEMEDIDA, P.PESO, P.EMBALAGEM,R.IDFORNECEDOR, P.FATORCONVERSAO, UN.ABREVIATURA, P.IDGRUPO, P.IDSUB_GRUPO
      into :IDPRODUTO, :NOMEPRODUTO, :NOMEFORNECEDOR, :IDUNIDADEMEDIDA, :PESO, :EMBALAGEM, :IDFORNECEDOR, :FATORCONVERSAO, :ABREVIATURA,
           :QTDECAIXA, :IDGRUPO, :IDSUBGRUPO
    
     do
       begin
           suspend;
       end
end^


ALTER PROCEDURE REL_EQUIPE_VENDA_SUPERVISOR (
    IDFILIAL INTEGER,
    DTINI DATE,
    DTFIM DATE,
    CPF VARCHAR(14))
RETURNS (
    IDREPRESENTANTE SMALLINT,
    NOMEREPRESENTANTE VARCHAR(60),
    COTAS NUMERIC(14,2),
    TOTALPEDIDO NUMERIC(14,2),
    PORCENTAGEM NUMERIC(10,2))
AS
declare variable VDEV_TOTALPEDIDO numeric(16,2);
begin
   for select P.IDREPRESENTANTE, R.NOME, sum(P.TOTALPEDIDO), R.COTAS from PEDIDO P

      join REPRESENTANTE R
        on R.IDREPRESENTANTE = P.IDREPRESENTANTE

     where P.SITUACAOPEDIDO = 'V'
       and P.DATAPEDIDO between :DTINI and :DTFIM
       and exists(select S.IDREPRESENTANTE from REPRESENTANTE S
                   where S.CPF_SUPERVISOR = :CPF
                     and S.IDREPRESENTANTE = P.IDREPRESENTANTE)
     group by P.IDREPRESENTANTE, R.NOME, R.COTAS
     into :IDREPRESENTANTE, :NOMEREPRESENTANTE, :TOTALPEDIDO, :COTAS
   do begin
      PORCENTAGEM = 0;
      if (:COTAS is null) then COTAS = 0;
      select sum(D.TOTALPEDIDO) from DEVOLUCAO D
        where D.IDFILIAL = :IDFILIAL
          and D.SITUACAOPEDIDO = 'V'
          and D.DATAPEDIDO between :DTINI and :DTFIM
          and D.IDREPRESENTANTE = :IDREPRESENTANTE
        into :vDEV_TOTALPEDIDO;

      if (:TOTALPEDIDO is null) then TOTALPEDIDO = 0;
      if (:vDEV_TOTALPEDIDO is null) then vDEV_TOTALPEDIDO = 0;
      TOTALPEDIDO = TOTALPEDIDO-(vDEV_TOTALPEDIDO);
      if (:COTAS <> 0) then
        PORCENTAGEM = (TOTALPEDIDO/:COTAS)*100;
      else
        PORCENTAGEM = 100;
      suspend;
   end
end^


ALTER PROCEDURE REL_FICHA_ENT_SAI_DEPOS_SINT (
    IDFILIAL INTEGER,
    DTINI DATE,
    DTFIM DATE,
    IDPROINI INTEGER,
    IDPROFIM INTEGER,
    IDDEPOSITO INTEGER)
RETURNS (
    IDPRODUTO INTEGER,
    NOMEPRODUTO VARCHAR(60),
    SALDO NUMERIC(10,3),
    FATORCONVERSAO INTEGER,
    IDCONTROLE INTEGER,
    CUSTO_PRODUTO NUMERIC(16,4))
AS
begin
 for select F.IDPRODUTO, P.ESPECIFICACAO,
             P.FATORCONVERSAO, max(F.IDCONTROLE), avg(F.CUSTO_PRODUTO) from ESTOQUE_FISICO_DEPOSITO F

     join PRODUTO P
       on P.IDFILIAL = F.IDFILIAL
      and P.IDPRODUTO = F.IDPRODUTO

    where F.IDFILIAL = :IDFILIAL
      and F.DTMOVTO between :DTINI and :DTFIM
      and F.IDPRODUTO between :IDPROINI and :IDPROFIM
      group by F.IDPRODUTO, P.ESPECIFICACAO, P.FATORCONVERSAO
      into :IDPRODUTO, :NOMEPRODUTO,  :FATORCONVERSAO, :IDCONTROLE, :CUSTO_PRODUTO
  do
    begin
        select E.SALDO from ESTOQUE_FISICO_DEPOSITO E
           where E.IDFILIAL = :IDFILIAL
             and E.IDCONTROLE = :IDCONTROLE
          into :SALDO;

          CUSTO_PRODUTO = (CUSTO_PRODUTO*:SALDO);
        suspend;
    end
end^


ALTER PROCEDURE REL_FICHA_ENT_SAI_DEPOSITO (
    IDFILIAL INTEGER,
    DTINI DATE,
    DTFIM DATE,
    IDPROINI INTEGER,
    IDPROFIM INTEGER,
    IDDEPOSITO INTEGER)
RETURNS (
    DATAFICHA DATE,
    IDPRODUTO INTEGER,
    NOMEPRODUTO VARCHAR(60),
    HISTORICO VARCHAR(60),
    QTDEENTRADA NUMERIC(10,3),
    QTDESAIDA NUMERIC(10,3),
    FATORCONVERSAO INTEGER,
    QTDEANTERIOR NUMERIC(10,3),
    QTDEATUAL NUMERIC(10,3),
    SALDO NUMERIC(10,3))
AS
declare variable SITUACAO varchar(1);
begin
  for select F.IDPRODUTO, P.ESPECIFICACAO, F.DTMOVTO, F.HISTORICO,
             F.SITUACAO, F.QTDE, P.QTDEANTERIOR, P.FATORCONVERSAO, F.SALDO from ESTOQUE_FISICO_DEPOSITO F

     join PRODUTO P
       on P.IDFILIAL = F.IDFILIAL
      and P.IDPRODUTO = F.IDPRODUTO

    where F.IDFILIAL = :IDFILIAL
      and F.DTMOVTO between :DTINI and :DTFIM
      and F.IDPRODUTO between :IDPROINI and :IDPROFIM
      and F.IDDEPOSITO = :IDDEPOSITO
      order by F.DTMOVTO, F.IDCONTROLE
      into :IDPRODUTO, :NOMEPRODUTO, :DATAFICHA, :HISTORICO, :SITUACAO, :QTDEATUAL, :QTDEANTERIOR,
           :FATORCONVERSAO, :SALDO
  do
    begin
        if (:SITUACAO = '+') then
           QTDEENTRADA = :QTDEATUAL;
        else
           QTDESAIDA = :QTDEATUAL;


        suspend;
        QTDEENTRADA = null;
        QTDESAIDA = null;
    end
end^


ALTER PROCEDURE REL_FICHA_ENTRADA_SAIDA (
    IDFILIAL INTEGER,
    DTINI DATE,
    DTFIM DATE,
    IDPROINI INTEGER,
    IDPROFIM INTEGER)
RETURNS (
    DATAFICHA DATE,
    IDPRODUTO INTEGER,
    NOMEPRODUTO VARCHAR(60),
    HISTORICO VARCHAR(60),
    QTDEENTRADA NUMERIC(10,3),
    QTDESAIDA NUMERIC(10,3),
    FATORCONVERSAO INTEGER,
    QTDEANTERIOR NUMERIC(10,3),
    QTDEATUAL NUMERIC(10,3),
    SALDO NUMERIC(10,3))
AS
declare variable SITUACAO varchar(1);
begin
  for select F.IDPRODUTO, P.ESPECIFICACAO, F.DTMOVTO, F.HISTORICO,
             F.SITUACAO, F.QTDE, P.QTDEANTERIOR, P.FATORCONVERSAO, F.SALDO from ESTOQUE_FISICO F

     join PRODUTO P
       on P.IDFILIAL = F.IDFILIAL
      and P.IDPRODUTO = F.IDPRODUTO

    where F.IDFILIAL = :IDFILIAL
      and F.DTMOVTO between :DTINI and :DTFIM
      and F.IDPRODUTO between :IDPROINI and :IDPROFIM
      order by F.DTMOVTO, F.IDCONTROLE
      into :IDPRODUTO, :NOMEPRODUTO, :DATAFICHA, :HISTORICO, :SITUACAO, :QTDEATUAL, :QTDEANTERIOR,
           :FATORCONVERSAO, :SALDO
  do
    begin
        if (:SITUACAO = '+') then
           QTDEENTRADA = :QTDEATUAL;
        else
           QTDESAIDA = :QTDEATUAL;


        suspend;
        QTDEENTRADA = null;
        QTDESAIDA = null;
    end
end^


ALTER PROCEDURE REL_FICHA_ENTRADA_SAIDA_SINT (
    IDFILIAL INTEGER,
    DTINI DATE,
    DTFIM DATE,
    IDPROINI INTEGER,
    IDPROFIM INTEGER)
RETURNS (
    IDPRODUTO INTEGER,
    NOMEPRODUTO VARCHAR(60) CHARACTER SET NONE,
    SALDO NUMERIC(10,3),
    FATORCONVERSAO INTEGER,
    IDCONTROLE INTEGER,
    CUSTO_PRODUTO NUMERIC(16,4),
    DTESTOQUE DATE,
    VCUSTO NUMERIC(16,2))
AS
begin
 for select F.IDPRODUTO, P.ESPECIFICACAO,
             P.FATORCONVERSAO, max(F.IDCONTROLE), avg(F.CUSTO_PRODUTO), max(F.DTMOVTO), f.CUSTO_PRODUTO from ESTOQUE_FISICO F

     left join PRODUTO P
       on P.IDFILIAL = F.IDFILIAL
      and P.IDPRODUTO = F.IDPRODUTO

    where F.IDFILIAL = :IDFILIAL
      and F.DTMOVTO between :DTINI and :DTFIM
      and F.IDPRODUTO between :IDPROINI and :IDPROFIM
      group by F.IDPRODUTO, P.ESPECIFICACAO, P.FATORCONVERSAO, f.CUSTO_PRODUTO
      into :IDPRODUTO, :NOMEPRODUTO,  :FATORCONVERSAO, :IDCONTROLE, :CUSTO_PRODUTO, :DTESTOQUE, :VCUSTO
  do
    begin
        select E.SALDO from ESTOQUE_FISICO E
           where E.IDFILIAL = :IDFILIAL
             and E.IDCONTROLE = :IDCONTROLE
          into :SALDO;

          CUSTO_PRODUTO = (CUSTO_PRODUTO*:SALDO);
        suspend;
    end
end^


ALTER PROCEDURE REL_FLUXO_CAIXA (
    IDFILIAL SMALLINT,
    DTVEN_INI DATE,
    DTVEN_FIM DATE)
RETURNS (
    DATA DATE,
    VRECEBER NUMERIC(15,2),
    VPAGAR NUMERIC(15,2),
    VCHEQUE NUMERIC(15,2))
AS
begin
  /* CONTAS A RECEBER */
  for select P.DATAVENCIMENTO, sum(P.VALORDOCUMENTO) from PAGAR P
    where P.IDFILIAL = :IDFILIAL
      and P.DATAVENCIMENTO between :DTVEN_INI and :DTVEN_FIM
      and P.VALORPAGAMENTO is null
     group by P.DATAVENCIMENTO
     into :DATA, :VPAGAR
  do
      suspend;

  vPAGAR = null;
  vCHEQUE = null;

  /* CONTAS A RECEBER */
  for select R.DATAVENCIMENTO, sum(R.VALORDOCUMENTO) from RECEBER R
    where R.IDFILIAL = :IDFILIAL
      and R.DATAVENCIMENTO between :DTVEN_INI and :DTVEN_FIM
      and R.VALORPAGAMENTO is null
     group by R.DATAVENCIMENTO
     into :DATA, :vRECEBER
  do
      suspend;

  vPAGAR = null;
  vCHEQUE = null;
  vRECEBER = null;

  /* CHEQUE PRÉ */
  for select C.DATAPRE, sum(C.VALORCHEQUE) from CHEQUES C
    where C.IDFILIAL = :IDFILIAL
      and C.SITUACAOCHEQUE = 'A'
      and C.DATAPRE between :DTVEN_INI and :DTVEN_FIM
    group by C.DATAPRE
    into :DATA,:VCHEQUE
  do
    suspend;
end^


ALTER PROCEDURE REL_ICMS (
    IDFILIAL INTEGER,
    DTINICIAL DATE,
    DTFINAL DATE)
RETURNS (
    DTENTRADA DATE,
    ENT_VALORBASE NUMERIC(16,2),
    ENT_VALORICMS NUMERIC(16,2),
    NOT_VALORBASE NUMERIC(16,2),
    NOT_VALORICMS NUMERIC(16,2),
    DIF_VALORBASE NUMERIC(16,2),
    DIF_VALORICMS NUMERIC(16,2))
AS
declare variable VDTNOTA date;
begin
  for select * from REL_ICMSENTRADA(:IDFILIAL, :DTINICIAL, :DTFINAL) E

    full join REL_ICMSNOTA(:IDFILIAL, :DTINICIAL, :DTFINAL) N
      on N.DTNOTA = E.DTENTRADA

    into :DTENTRADA, :ENT_VALORBASE, :ENT_VALORICMS, :vDTNOTA, :NOT_VALORBASE, :NOT_VALORICMS
  do
    begin
      if (:DTENTRADA is null) then
        DTENTRADA = :vDTNOTA;
      if (:ENT_VALORBASE is null) then ENT_VALORBASE = 0;
      if (:ENT_VALORICMS is null) then ENT_VALORICMS = 0;
      if (:NOT_VALORBASE is null) then NOT_VALORBASE = 0;
      if (:NOT_VALORICMS is null) then NOT_VALORICMS = 0;
      DIF_VALORBASE = ENT_VALORBASE-NOT_VALORBASE;
      DIF_VALORICMS = ENT_VALORICMS-NOT_VALORICMS;
      suspend;
    end
end^


ALTER PROCEDURE REL_ICMS_COMPRA_ENTRADA (
    IDFILIAL INTEGER,
    DTINI DATE,
    DTFIM DATE,
    IDTRIBUTO_1 INTEGER,
    IDTRIBUTO_2 INTEGER,
    IDTRIBUTO_3 INTEGER)
RETURNS (
    IDFORNECEDOR INTEGER,
    NOMEFORNECEDOR VARCHAR(60),
    CFOP VARCHAR(5),
    IDNOTA INTEGER,
    TOTALBASE NUMERIC(15,2),
    LABEL_1 VARCHAR(15),
    LABEL_2 VARCHAR(15),
    LABEL_3 VARCHAR(15),
    VALOR_BASE_1 NUMERIC(15,2),
    VALOR_ICMS_1 NUMERIC(15,2),
    VALOR_BASE_3 NUMERIC(15,2),
    VALOR_BASE_2 NUMERIC(15,2),
    VALOR_ICMS_2 NUMERIC(15,2),
    VALOR_ICMS_3 NUMERIC(15,2),
    DATA_NOTA DATE,
    SITUACAO_NOTA VARCHAR(1))
AS
declare variable VBASE_1 NUMERIC(10,2);
declare variable VBASE_2 NUMERIC(10,2);
declare variable VBASE_3 NUMERIC(10,2);
begin
  for select N.IDFORNECEDOR, C.NOME, CF.CFOP, N.IDNOTA, N.DATAENTRADA from ENTRADA N
     join FORNECEDOR C
       on C.IDFORNECEDOR = N.IDFORNECEDOR

     left join CFOP CF
       on CF.IDCFOP = N.IDCFOP
      and CF.IDFILIAL = N.IDFILIAL

    where N.IDFILIAL = :IDFILIAL
      and N.DATAENTRADA between :DTINI and :DTFIM
    into :IDFORNECEDOR, :NOMEFORNECEDOR, :CFOP, :IDNOTA, :DATA_NOTA
  do begin
     VALOR_BASE_1 = 0;
     VALOR_ICMS_1 = 0;
     VBASE_1 = 0;

     VALOR_BASE_2 = 0;
     VALOR_ICMS_2 = 0;
     VBASE_2 = 0;

     VALOR_BASE_3 = 0;
     VALOR_ICMS_3 = 0;
     VBASE_3 = 0;

     TOTALBASE = 0;


     if (:IDTRIBUTO_1 > 0) then begin
        select T.TAXAICMS from TRIBUTO T
          where T.IDFILIAL = :IDFILIAL
            and T.IDTRIBUTO = :IDTRIBUTO_1
         into :VBASE_1;
         LABEL_1 = 'B.' || '' || :VBASE_1 || '' || '%';

         select sum(IT.VALOR_BASE), sum(IT.VALOR_ICMS) from ITENSENTRADA IT

           where IT.IDFILIAL = :IDFILIAL
             and IT.IDNOTA = :IDNOTA
             and IT.IDTRIBUTO = :IDTRIBUTO_1
           into :VALOR_BASE_1, VALOR_ICMS_1;

--           if (:VALOR_BASE_1 > 0) then begin
--               = (:VALOR_BASE_1*:VBASE_1)/100;
--           end
     end


     if (:IDTRIBUTO_2 > 0) then begin
        select T.TAXAICMS from TRIBUTO T
          where T.IDFILIAL = :IDFILIAL
            and T.IDTRIBUTO = :IDTRIBUTO_2
         into :VBASE_2;
         LABEL_2 = 'B.' || '' || :VBASE_2 || '' || '%';

         select sum(IT.VALOR_BASE), sum(IT.VALOR_ICMS) from ITENSENTRADA IT

           where IT.IDFILIAL = :IDFILIAL
             and IT.IDNOTA = :IDNOTA
             and IT.IDTRIBUTO = :IDTRIBUTO_2
           into :VALOR_BASE_2,VALOR_ICMS_2;

--           if (:VALOR_BASE_2 > 0) then begin
--               = (:VALOR_BASE_2*:VBASE_2)/100;
--           end
     end


     if (:IDTRIBUTO_3 > 0) then begin
        select T.TAXAICMS from TRIBUTO T
          where T.IDFILIAL = :IDFILIAL
            and T.IDTRIBUTO = :IDTRIBUTO_3
         into :VBASE_3;
         LABEL_3 = 'B.' || '' || :VBASE_3 || '' || '%';

         select sum(IT.VALOR_BASE), sum(IT.VALOR_ICMS) from ITENSENTRADA IT

           where IT.IDFILIAL = :IDFILIAL
             and IT.IDNOTA = :IDNOTA
             and IT.IDTRIBUTO = :IDTRIBUTO_3
           into :VALOR_BASE_3, VALOR_ICMS_3;

--           if (:VALOR_BASE_3 > 0) then begin
--              VALOR_ICMS_3 = (:VALOR_BASE_3*:VBASE_3)/100;
--           end
     end



     if (:VALOR_BASE_1 is null) then VALOR_BASE_1 = 0;
     if (:VALOR_BASE_2 is null) then VALOR_BASE_2 = 0;
     if (:VALOR_BASE_3 is null) then VALOR_BASE_3 = 0;
     TOTALBASE = :VALOR_BASE_1+VALOR_BASE_2+VALOR_BASE_3;

     suspend;
  end
end^


ALTER PROCEDURE REL_ICMS_NOTAS_FISCAIS (
    IDFILIAL INTEGER,
    DTINI DATE,
    DTFIM DATE,
    IDTRIBUTO_1 INTEGER,
    IDTRIBUTO_2 INTEGER,
    IDTRIBUTO_3 INTEGER)
RETURNS (
    IDCLIENTE INTEGER,
    NOMECLIENTE VARCHAR(60),
    CFOP VARCHAR(5),
    IDNOTA INTEGER,
    IDPEDIDO VARCHAR(8),
    TOTALBASE NUMERIC(15,2),
    LABEL_1 VARCHAR(15),
    LABEL_2 VARCHAR(15),
    LABEL_3 VARCHAR(15),
    VALOR_BASE_1 NUMERIC(15,2),
    VALOR_ICMS_1 NUMERIC(15,2),
    VALOR_BASE_3 NUMERIC(15,2),
    VALOR_BASE_2 NUMERIC(15,2),
    VALOR_ICMS_2 NUMERIC(15,2),
    VALOR_ICMS_3 NUMERIC(15,2),
    DATA_NOTA DATE,
    SITUACAO_NOTA VARCHAR(1))
AS
declare variable VBASE_1 NUMERIC(10,2);
declare variable VBASE_2 NUMERIC(10,2);
declare variable VBASE_3 NUMERIC(10,2);
begin
  for select N.IDCLIENTE, C.NOME, CF.CFOP, N.IDNOTA, N.IDPEDIDO, N.DATANOTA, N.SITUACAONOTA from NOTA N
     join CLIENTE C
       on C.IDCLIENTE = N.IDCLIENTE

     left join CFOP CF
       on CF.IDCFOP = N.IDCFOP
      and CF.IDFILIAL = N.IDFILIAL

    where N.IDFILIAL = :IDFILIAL
      and N.DATANOTA between :DTINI and :DTFIM
    into :IDCLIENTE, :NOMECLIENTE, :CFOP, :IDNOTA, :IDPEDIDO, :DATA_NOTA , :SITUACAO_NOTA
  do begin
     VALOR_BASE_1 = 0;
     VALOR_ICMS_1 = 0;
     VBASE_1 = 0;

     VALOR_BASE_2 = 0;
     VALOR_ICMS_2 = 0;
     VBASE_2 = 0;

     VALOR_BASE_3 = 0;
     VALOR_ICMS_3 = 0;
     VBASE_3 = 0;

     TOTALBASE = 0;


     if (:IDTRIBUTO_1 > 0) then begin
        select T.TAXAICMS from TRIBUTO T
          where T.IDFILIAL = :IDFILIAL
            and T.IDTRIBUTO = :IDTRIBUTO_1
         into :VBASE_1;
         LABEL_1 = 'B.' || '' || :VBASE_1 || '' || '%';

         select sum(IT.VALOR_BASE), sum(IT.VALOR_ICMS) from ITENSNOTA IT

           where IT.IDFILIAL = :IDFILIAL
             and IT.IDNOTA = :IDNOTA
             and IT.IDTRIBUTO = :IDTRIBUTO_1
           into :VALOR_BASE_1, VALOR_ICMS_1;

--           if (:VALOR_BASE_1 > 0) then begin
--               = (:VALOR_BASE_1*:VBASE_1)/100;
--           end
     end


     if (:IDTRIBUTO_2 > 0) then begin
        select T.TAXAICMS from TRIBUTO T
          where T.IDFILIAL = :IDFILIAL
            and T.IDTRIBUTO = :IDTRIBUTO_2
         into :VBASE_2;
         LABEL_2 = 'B.' || '' || :VBASE_2 || '' || '%';

         select sum(IT.VALOR_BASE), sum(IT.VALOR_ICMS) from ITENSNOTA IT

           where IT.IDFILIAL = :IDFILIAL
             and IT.IDNOTA = :IDNOTA
             and IT.IDTRIBUTO = :IDTRIBUTO_2
           into :VALOR_BASE_2,VALOR_ICMS_2;

--           if (:VALOR_BASE_2 > 0) then begin
--               = (:VALOR_BASE_2*:VBASE_2)/100;
--           end
     end


     if (:IDTRIBUTO_3 > 0) then begin
        select T.TAXAICMS from TRIBUTO T
          where T.IDFILIAL = :IDFILIAL
            and T.IDTRIBUTO = :IDTRIBUTO_3
         into :VBASE_3;
         LABEL_3 = 'B.' || '' || :VBASE_3 || '' || '%';

         select sum(IT.VALOR_BASE), sum(IT.VALOR_ICMS) from ITENSNOTA IT

           where IT.IDFILIAL = :IDFILIAL
             and IT.IDNOTA = :IDNOTA
             and IT.IDTRIBUTO = :IDTRIBUTO_3
           into :VALOR_BASE_3, VALOR_ICMS_3;

--           if (:VALOR_BASE_3 > 0) then begin
--              VALOR_ICMS_3 = (:VALOR_BASE_3*:VBASE_3)/100;
--           end
     end



     if (:VALOR_BASE_1 is null) then VALOR_BASE_1 = 0;
     if (:VALOR_BASE_2 is null) then VALOR_BASE_2 = 0;
     if (:VALOR_BASE_3 is null) then VALOR_BASE_3 = 0;
     TOTALBASE = :VALOR_BASE_1+VALOR_BASE_2+VALOR_BASE_3;

     suspend;
  end
end^


ALTER PROCEDURE REL_ICMSENTRADA (
    IDFILIAL INTEGER,
    DTINICIAL DATE,
    DTFINAL DATE)
RETURNS (
    DTENTRADA DATE,
    VALORBASE NUMERIC(16,2),
    VALORICMS NUMERIC(16,2))
AS
begin
  for select E.DATAENTRADA,
             sum(IT.VALOR_BASE),
             sum(IT.VALOR_ICMS) from ITENSENTRADA IT

      right join ENTRADA E
        on E.IDFILIAL = :IDFILIAL
       and E.IDNOTA = IT.IDNOTA
       and E.IDFORNECEDOR = IT.IDFORNECEDOR

      left join TRIBUTO T
        on T.IDFILIAL = :IDFILIAL
       and T.IDTRIBUTO = IT.IDTRIBUTO

   where IT.IDFILIAL = :IDFILIAL
     and E.DATAENTRADA between :DTINICIAL and :DTFINAL
    group by E.DATAENTRADA
     into :DTENTRADA, :VALORBASE, :VALORICMS
  do
    suspend;
end^


ALTER PROCEDURE REL_ICMSNOTA (
    IDFILIAL INTEGER,
    DTINICIAL DATE,
    DTFINAL DATE)
RETURNS (
    DTNOTA DATE,
    VALORBASE NUMERIC(16,2),
    VALORICMS NUMERIC(16,2))
AS
begin
  for select N.DATANOTA,
          sum(IT.VALOR_BASE),
          sum(IT.VALOR_ICMS)  from ITENSNOTA IT

      right join NOTA N
        on N.IDFILIAL = :IDFILIAL
       and N.IDNOTA = IT.IDNOTA

      join CFOP C
        on C.IDCFOP = N.IDCFOP
       and C.IDFILIAL = :IDFILIAL

      left join PRODUTO P
        on P.IDPRODUTO = IT.IDPRODUTO
       and P.IDFILIAL = :IDFILIAL

      join TRIBUTO T
        on T.IDFILIAL = :IDFILIAL
       and T.IDTRIBUTO = IT.IDTRIBUTO

    where IT.IDFILIAL = :IDFILIAL
      and N.DATANOTA between :DTINICIAL and :DTFINAL
      and IT.TROCA = 'N'
      and N.SITUACAONOTA is null
    group by N.DATANOTA
      into :DTNOTA, :VALORBASE, :VALORICMS
  do
    suspend;
end^


ALTER PROCEDURE REL_LUCRATIVIDADE (
    IDFILIAL INTEGER,
    DTINI DATE,
    DTFIM DATE,
    IDGRUPOINI INTEGER,
    IDGRUPOFIM INTEGER,
    IDREPINI INTEGER,
    IDREPFIM INTEGER,
    TIPOCUSTO CHAR(1),
    IDSUB_GRUPOINI SMALLINT,
    IDSUB_GRUPOFIM SMALLINT,
    IDCLIENTEINI INTEGER,
    IDCLIENTEFIM INTEGER,
    TIPOPEDIDOINI VARCHAR(1),
    TIPOPEDIDOFIM VARCHAR(1))
RETURNS (
    IDGRUPO INTEGER,
    NOMEGRUPO VARCHAR(35),
    IDPRODUTO INTEGER,
    NOMEPRODUTO VARCHAR(60),
    QTDECAIXA NUMERIC(16,2),
    PRECOVENDA NUMERIC(16,2),
    CUSTO NUMERIC(16,2),
    MARGEM NUMERIC(10,2),
    FATORCONVERSAO INTEGER,
    IDSUB_GRUPO SMALLINT,
    NOMESUB_GRUPO VARCHAR(30))
AS
declare variable VDEV_QTDEPEDIDO numeric(10,3);
declare variable VDEV_PRECOVENDA numeric(14,2);
declare variable VDEV_CUSTO numeric(14,2);
declare variable VTIPOEMPRESA varchar(20);
begin

      for select IT.IDPRODUTO, IT.NOMEPRODUTO,
              sum(IT.QTDEPEDIDO*IT.FATORCONVERSAO)-coalesce(sum(ITD.QTDEPEDIDO*ITD.FATORCONVERSAO),0),
              sum(IT.QTDEPEDIDO*IT.PRECOVENDA)-coalesce(sum(ITD.QTDEPEDIDO*ITD.PRECOVENDA),0),
              sum(IT.QTDEPEDIDO*IF_SN(:TIPOCUSTO,'=','N',IT.CUSTONOTA,IT.CUSTOENCARGOS))-coalesce(sum(ITD.QTDEPEDIDO*IF_SN(:TIPOCUSTO,'=','N',ITD.CUSTONOTA,ITD.CUSTOENCARGOS)),0),
              IT.FATORPRODUTO, IT.IDGRUPO, IT.NOMEGRUPO, IT.IDSUB_GRUPO, IT.NOMESUBGRUPO
              from REL_ITENS_PEDIDO IT

        join REL_PEDIDO PE
          on PE.IDPEDIDO = IT.IDPEDIDO
         and PE.IDFOLHA = IT.IDFOLHA
         and PE.IDFILIAL = :IDFILIAL

        left join REL_ITENS_DEVOLUCAO ITD
          on ITD.IDPEDIDO = IT.IDPEDIDO
         and ITD.IDFOLHA = IT.IDFOLHA
         and ITD.IDFILIAL = IT.IDFILIAL
         and ITD.IDPRODUTO = IT.IDPRODUTO

       where IT.IDFILIAL = :IDFILIAL
         and PE.DATAPEDIDO between :DTINI and :DTFIM
         and IT.TROCA = 'N'
         and PE.IDCLIENTE between :IDCLIENTEINI and :IDCLIENTEFIM
         and IT.IDGRUPO between :IDGRUPOINI and :IDGRUPOFIM
         and coalesce(IT.IDSUB_GRUPO,1) between :IDSUB_GRUPOINI and :IDSUB_GRUPOFIM
         and PE.IDREPRESENTANTE between :IDREPINI and :IDREPFIM
         and PE.SITUACAOPEDIDO = 'V'
          group by IT.IDPRODUTO, IT.NOMEPRODUTO, IT.FATORPRODUTO, IT.IDGRUPO, IT.NOMEGRUPO, IT.IDSUB_GRUPO, IT.NOMESUBGRUPO
         into :IDPRODUTO, :NOMEPRODUTO, :QTDECAIXA, :PRECOVENDA, :CUSTO, :FATORCONVERSAO, :IDGRUPO,
              :NOMEGRUPO, :IDSUB_GRUPO, :NOMESUB_GRUPO
      do
      begin
            if ((PRECOVENDA <> 0) and
                 (QTDECAIXA <> 0)) then begin
                  if (:CUSTO > 0) then
                     if (:VTIPOEMPRESA = 'CENTRAL') then
                        MARGEM = (1-(CUSTO/PRECOVENDA))*100;
                     else
                        MARGEM = ((PRECOVENDA/CUSTO)-1)*100;
--                 suspend;
              end
        suspend;
      end

  exit;

  -- TODOS OS TIPO DE PEDIDOS
  select F.TIPOEMPRESA from FILIAL F
    where F.IDFILIAL = :IDFILIAL
     into :VTIPOEMPRESA;

  if (TIPOPEDIDOINI = '@') then begin
      for select IT.IDPRODUTO, COLLATEBR(P.ESPECIFICACAO), sum(IT.QTDEPEDIDO*IT.FATORCONVERSAO),
              sum(IT.QTDEPEDIDO*IT.PRECOVENDA), sum(IT.QTDEPEDIDO*IF_SN(:TIPOCUSTO,'=','N',IT.CUSTONOTA,IT.CUSTOENCARGOS)),
              P.FATORCONVERSAO, P.IDGRUPO, COLLATEBR(G.NOME), P.IDSUB_GRUPO, COLLATEBR(S.DESCRICAO) from ITENSPEDIDO IT
        right join PEDIDO PE
          on PE.IDPEDIDO = IT.IDPEDIDO
         and PE.IDFOLHA = IT.IDFOLHA
         and PE.IDFILIAL = :IDFILIAL
    
        join PRODUTO P
          on P.IDPRODUTO = IT.IDPRODUTO
         and P.IDFILIAL = :IDFILIAL
    
        join GRUPO G
          on G.IDGRUPO = P.IDGRUPO
    
        left join SUB_GRUPO S
          on S.IDSUB_GRUPO = P.IDSUB_GRUPO
    
       where IT.IDFILIAL = :IDFILIAL
         and PE.DATAPEDIDO between :DTINI and :DTFIM
         and IT.TROCA = 'N'
         and PE.IDCLIENTE between :IDCLIENTEINI and :IDCLIENTEFIM
         and P.IDGRUPO between :IDGRUPOINI and :IDGRUPOFIM
         and coalesce(P.IDSUB_GRUPO,1) between :IDSUB_GRUPOINI and :IDSUB_GRUPOFIM
         and PE.IDREPRESENTANTE between :IDREPINI and :IDREPFIM
         and PE.SITUACAOPEDIDO = 'V'
          group by IT.IDPRODUTO, COLLATEBR(P.ESPECIFICACAO), P.FATORCONVERSAO, P.IDGRUPO, COLLATEBR(G.NOME), P.IDSUB_GRUPO, COLLATEBR(S.DESCRICAO)
         into :IDPRODUTO, :NOMEPRODUTO, :QTDECAIXA, :PRECOVENDA, :CUSTO, :FATORCONVERSAO, :IDGRUPO,
              :NOMEGRUPO, :IDSUB_GRUPO, :NOMESUB_GRUPO
      do
        begin
             select sum(IT.QTDEPEDIDO*IT.FATORCONVERSAO),
                    sum(IT.PRECOVENDA*IT.QTDEPEDIDO),
                    sum(IT.QTDEPEDIDO*IF_SN(:TIPOCUSTO,'=','N',IT.CUSTONOTA,IT.CUSTOENCARGOS))  from ITENSDEVOLUCAO IT
    
                 right join DEVOLUCAO D
                   on D.IDFILIAL = :IDFILIAL
                  and D.IDPEDIDO = IT.IDPEDIDO
                  and D.IDFOLHA = IT.IDFOLHA
    
                left join PRODUTO P
                  on  P.IDPRODUTO = IT.IDPRODUTO
                  and P.IDFILIAL = IT.IDFILIAL
    
               where IT.IDFILIAL = :IDFILIAL
                 and D.DATAPEDIDO between :DTINI and :DTFIM
                 and IT.TROCA = 'N'
                 and IT.IDPRODUTO = :IDPRODUTO
                 and D.IDCLIENTE between :IDCLIENTEINI and :IDCLIENTEFIM
                 and P.IDGRUPO = :IDGRUPO
                 and coalesce(P.IDSUB_GRUPO,1) between :IDSUB_GRUPOINI and :IDSUB_GRUPOFIM
                 and D.IDREPRESENTANTE between :IDREPINI and :IDREPFIM
                 and D.SITUACAOPEDIDO = 'V'
                into :vDEV_QTDEPEDIDO, :vDEV_PRECOVENDA, :vDEV_CUSTO;
    
              if (:vDEV_QTDEPEDIDO is null) then vDEV_QTDEPEDIDO = 0;
              if (:vDEV_PRECOVENDA is null) then vDEV_PRECOVENDA = 0;
              if (:vDEV_CUSTO is null) then vDEV_CUSTO = 0;
    
              QTDECAIXA = (:QTDECAIXA-:vDEV_QTDEPEDIDO);
              PRECOVENDA = (:PRECOVENDA-:vDEV_PRECOVENDA);
              CUSTO = (:CUSTO-:vDEV_CUSTO);
    
          if ((PRECOVENDA <> 0) and
             (QTDECAIXA <> 0)) then begin
              if (:CUSTO > 0) then
                 if (:VTIPOEMPRESA = 'CENTRAL') then
                    MARGEM = (1-(CUSTO/PRECOVENDA))*100;
                 else
                    MARGEM = ((PRECOVENDA/CUSTO)-1)*100;
             suspend;
          end
        end
  end



  -- SO OS DO RETAGUARDA
  if (TIPOPEDIDOINI = '*') then begin
      for select IT.IDPRODUTO, COLLATEBR(P.ESPECIFICACAO), sum(IT.QTDEPEDIDO*IT.FATORCONVERSAO),
              sum(IT.QTDEPEDIDO*IT.PRECOVENDA), sum(IT.QTDEPEDIDO*IF_SN(:TIPOCUSTO,'=','N',IT.CUSTONOTA,IT.CUSTOENCARGOS)),
              P.FATORCONVERSAO, P.IDGRUPO, COLLATEBR(G.NOME), P.IDSUB_GRUPO, COLLATEBR(S.DESCRICAO) from ITENSPEDIDO IT

        right join PEDIDO PE
          on PE.IDPEDIDO = IT.IDPEDIDO
         and PE.IDFOLHA = IT.IDFOLHA
         and PE.IDFILIAL = :IDFILIAL
    
        join PRODUTO P
          on P.IDPRODUTO = IT.IDPRODUTO
         and P.IDFILIAL = :IDFILIAL
    
        join GRUPO G
          on G.IDGRUPO = P.IDGRUPO
    
        left join SUB_GRUPO S
          on S.IDSUB_GRUPO = P.IDSUB_GRUPO
    
       where IT.IDFILIAL = :IDFILIAL
         and PE.DATAPEDIDO between :DTINI and :DTFIM
         and IT.TROCA = 'N'
         and PE.IDCLIENTE between :IDCLIENTEINI and :IDCLIENTEFIM
         and P.IDGRUPO between :IDGRUPOINI and :IDGRUPOFIM
         and PE.TIPO_PEDIDO is null
         and coalesce(P.IDSUB_GRUPO,1) between :IDSUB_GRUPOINI and :IDSUB_GRUPOFIM
         and PE.IDREPRESENTANTE between :IDREPINI and :IDREPFIM
         and PE.SITUACAOPEDIDO = 'V'
          group by IT.IDPRODUTO, COLLATEBR(P.ESPECIFICACAO), P.FATORCONVERSAO, P.IDGRUPO, COLLATEBR(G.NOME), P.IDSUB_GRUPO, COLLATEBR(S.DESCRICAO)
         into :IDPRODUTO, :NOMEPRODUTO, :QTDECAIXA, :PRECOVENDA, :CUSTO, :FATORCONVERSAO, :IDGRUPO,
              :NOMEGRUPO, :IDSUB_GRUPO, :NOMESUB_GRUPO
      do
        begin
             select sum(IT.QTDEPEDIDO*IT.FATORCONVERSAO),
                    sum(IT.PRECOVENDA*IT.QTDEPEDIDO),
                    sum(IT.QTDEPEDIDO*IF_SN(:TIPOCUSTO,'=','N',IT.CUSTONOTA,IT.CUSTOENCARGOS))  from ITENSDEVOLUCAO IT
    
                 right join DEVOLUCAO D
                   on D.IDFILIAL = :IDFILIAL
                  and D.IDPEDIDO = IT.IDPEDIDO
                  and D.IDFOLHA = IT.IDFOLHA
    
                left join PRODUTO P
                  on  P.IDPRODUTO = IT.IDPRODUTO
                  and P.IDFILIAL = IT.IDFILIAL
    
               where IT.IDFILIAL = :IDFILIAL
                 and D.DATAPEDIDO between :DTINI and :DTFIM
                 and IT.TROCA = 'N'
                 and IT.IDPRODUTO = :IDPRODUTO
                 and D.IDCLIENTE between :IDCLIENTEINI and :IDCLIENTEFIM
                 and P.IDGRUPO = :IDGRUPO
                 and coalesce(P.IDSUB_GRUPO,1) between :IDSUB_GRUPOINI and :IDSUB_GRUPOFIM
    
                 and D.TIPO_PEDIDO is null
    
                 and D.IDREPRESENTANTE between :IDREPINI and :IDREPFIM
                 and D.SITUACAOPEDIDO = 'V'
                into :vDEV_QTDEPEDIDO, :vDEV_PRECOVENDA, :vDEV_CUSTO;
    
              if (:vDEV_QTDEPEDIDO is null) then vDEV_QTDEPEDIDO = 0;
              if (:vDEV_PRECOVENDA is null) then vDEV_PRECOVENDA = 0;
              if (:vDEV_CUSTO is null) then vDEV_CUSTO = 0;
    
              QTDECAIXA = (:QTDECAIXA-:vDEV_QTDEPEDIDO);
              PRECOVENDA = (:PRECOVENDA-:vDEV_PRECOVENDA);
              CUSTO = (:CUSTO-:vDEV_CUSTO);
    
          if ((PRECOVENDA <> 0) and
             (QTDECAIXA <> 0)) then begin
              if (:CUSTO > 0) then
                if (:VTIPOEMPRESA = 'CENTRAL') then
                  MARGEM = (1-(CUSTO/PRECOVENDA))*100;
                else
                  MARGEM = ((PRECOVENDA/CUSTO)-1)*100;

             suspend;
          end
        end
  end



  -- BALCAO E FRENTE DE CAIXA
  if ((TIPOPEDIDOINI = 'B') or (TIPOPEDIDOINI = 'F')) then begin
      for select IT.IDPRODUTO, COLLATEBR(P.ESPECIFICACAO), sum(IT.QTDEPEDIDO*IT.FATORCONVERSAO),
              sum(IT.QTDEPEDIDO*IT.PRECOVENDA), sum(IT.QTDEPEDIDO*IF_SN(:TIPOCUSTO,'=','N',IT.CUSTONOTA,IT.CUSTOENCARGOS)),
              P.FATORCONVERSAO, P.IDGRUPO, COLLATEBR(G.NOME), P.IDSUB_GRUPO, COLLATEBR(S.DESCRICAO) from ITENSPEDIDO IT
        right join PEDIDO PE
          on PE.IDPEDIDO = IT.IDPEDIDO
         and PE.IDFOLHA = IT.IDFOLHA
         and PE.IDFILIAL = :IDFILIAL
    
        join PRODUTO P
          on P.IDPRODUTO = IT.IDPRODUTO
         and P.IDFILIAL = :IDFILIAL
    
        join GRUPO G
          on G.IDGRUPO = P.IDGRUPO
    
        left join SUB_GRUPO S
          on S.IDSUB_GRUPO = P.IDSUB_GRUPO
    
       where IT.IDFILIAL = :IDFILIAL
         and PE.DATAPEDIDO between :DTINI and :DTFIM
         and IT.TROCA = 'N'
         and PE.IDCLIENTE between :IDCLIENTEINI and :IDCLIENTEFIM
         and P.IDGRUPO between :IDGRUPOINI and :IDGRUPOFIM
         and PE.TIPO_PEDIDO between :TIPOPEDIDOINI and :TIPOPEDIDOFIM
         and coalesce(P.IDSUB_GRUPO,1) between :IDSUB_GRUPOINI and :IDSUB_GRUPOFIM
         and PE.IDREPRESENTANTE between :IDREPINI and :IDREPFIM
         and PE.SITUACAOPEDIDO = 'V'
          group by IT.IDPRODUTO, COLLATEBR(P.ESPECIFICACAO), P.FATORCONVERSAO, P.IDGRUPO, COLLATEBR(G.NOME), P.IDSUB_GRUPO, COLLATEBR(S.DESCRICAO)
         into :IDPRODUTO, :NOMEPRODUTO, :QTDECAIXA, :PRECOVENDA, :CUSTO, :FATORCONVERSAO, :IDGRUPO,
              :NOMEGRUPO, :IDSUB_GRUPO, :NOMESUB_GRUPO
      do
        begin
             select sum(IT.QTDEPEDIDO*IT.FATORCONVERSAO),
                    sum(IT.PRECOVENDA*IT.QTDEPEDIDO),
                    sum(IT.QTDEPEDIDO*IF_SN(:TIPOCUSTO,'=','N',IT.CUSTONOTA,IT.CUSTOENCARGOS))  from ITENSDEVOLUCAO IT
    
                 right join DEVOLUCAO D
                   on D.IDFILIAL = :IDFILIAL
                  and D.IDPEDIDO = IT.IDPEDIDO
                  and D.IDFOLHA = IT.IDFOLHA
    
                left join PRODUTO P
                  on  P.IDPRODUTO = IT.IDPRODUTO
                  and P.IDFILIAL = IT.IDFILIAL
    
               where IT.IDFILIAL = :IDFILIAL
                 and D.DATAPEDIDO between :DTINI and :DTFIM
                 and IT.TROCA = 'N'
                 and IT.IDPRODUTO = :IDPRODUTO
                 and D.IDCLIENTE between :IDCLIENTEINI and :IDCLIENTEFIM
                 and P.IDGRUPO = :IDGRUPO
                 and coalesce(P.IDSUB_GRUPO,1) between :IDSUB_GRUPOINI and :IDSUB_GRUPOFIM
    
                 and D.TIPO_PEDIDO between :TIPOPEDIDOINI and :TIPOPEDIDOFIM
    
                 and D.IDREPRESENTANTE between :IDREPINI and :IDREPFIM
                 and D.SITUACAOPEDIDO = 'V'
                into :vDEV_QTDEPEDIDO, :vDEV_PRECOVENDA, :vDEV_CUSTO;
    
              if (:vDEV_QTDEPEDIDO is null) then vDEV_QTDEPEDIDO = 0;
              if (:vDEV_PRECOVENDA is null) then vDEV_PRECOVENDA = 0;
              if (:vDEV_CUSTO is null) then vDEV_CUSTO = 0;
    
              QTDECAIXA = (:QTDECAIXA-:vDEV_QTDEPEDIDO);
              PRECOVENDA = (:PRECOVENDA-:vDEV_PRECOVENDA);
              CUSTO = (:CUSTO-:vDEV_CUSTO);
    
          if ((PRECOVENDA <> 0) and
             (QTDECAIXA <> 0)) then begin
              if (:CUSTO > 0) then
                if (:VTIPOEMPRESA = 'CENTRAL') then
                  MARGEM = (1-(CUSTO/PRECOVENDA))*100;
                else
                  MARGEM = ((PRECOVENDA/CUSTO)-1)*100;
             suspend;
          end
        end
  end
end^


ALTER PROCEDURE REL_LUCRATIVIDADE_MSCERCAS (
    IDFILIAL INTEGER,
    DTINI DATE,
    DTFIM DATE,
    IDGRUPOINI INTEGER,
    IDGRUPOFIM INTEGER,
    IDREPINI INTEGER,
    IDREPFIM INTEGER,
    TIPOCUSTO CHAR(1),
    IDSUB_GRUPOINI SMALLINT,
    IDSUB_GRUPOFIM SMALLINT,
    IDCLIENTEINI INTEGER,
    IDCLIENTEFIM INTEGER,
    TIPOPEDIDOINI VARCHAR(1),
    TIPOPEDIDOFIM VARCHAR(1),
    IDOBRASINI INTEGER,
    IDOBRASFIM INTEGER)
RETURNS (
    IDGRUPO INTEGER,
    NOMEGRUPO VARCHAR(35),
    IDPRODUTO INTEGER,
    NOMEPRODUTO VARCHAR(60),
    QTDECAIXA NUMERIC(16,2),
    PRECOVENDA NUMERIC(16,2),
    CUSTO NUMERIC(16,2),
    MARGEM NUMERIC(10,2),
    FATORCONVERSAO INTEGER,
    IDSUB_GRUPO SMALLINT,
    NOMESUB_GRUPO VARCHAR(30))
AS
declare variable vdev_qtdepedido numeric(10,3);
declare variable vdev_precovenda numeric(14,2);
declare variable vdev_custo numeric(14,2);
begin
  -- SE NENHUMA OBRA FOR SELECIONADA

  if (:IDOBRASINI <= 0) then begin
      -- TODOS OS TIPO DE PEDIDOS
      if (TIPOPEDIDOINI = '@') then begin
          for select IT.IDPRODUTO, COLLATEBR(P.ESPECIFICACAO), sum(IT.QTDEPEDIDO*IT.FATORCONVERSAO),
                  sum(IT.QTDEPEDIDO*IT.PRECOVENDA), sum(IT.QTDEPEDIDO*IF_SN(:TIPOCUSTO,'=','N',IT.CUSTONOTA,IT.CUSTOENCARGOS)),
                  P.FATORCONVERSAO, P.IDGRUPO, COLLATEBR(G.NOME), P.IDSUB_GRUPO, COLLATEBR(S.DESCRICAO) from ITENSPEDIDO IT
            right join PEDIDO PE
              on PE.IDPEDIDO = IT.IDPEDIDO
             and PE.IDFOLHA = IT.IDFOLHA
             and PE.IDFILIAL = :IDFILIAL
        
            join PRODUTO P
              on P.IDPRODUTO = IT.IDPRODUTO
             and P.IDFILIAL = :IDFILIAL
        
            join GRUPO G
              on G.IDGRUPO = P.IDGRUPO
        
            left join SUB_GRUPO S
              on S.IDSUB_GRUPO = P.IDSUB_GRUPO
        
           where IT.IDFILIAL = :IDFILIAL
             and PE.DATAPEDIDO between :DTINI and :DTFIM
             and IT.TROCA = 'N'
             and PE.IDCLIENTE between :IDCLIENTEINI and :IDCLIENTEFIM
             and P.IDGRUPO between :IDGRUPOINI and :IDGRUPOFIM
             and P.IDSUB_GRUPO between :IDSUB_GRUPOINI and :IDSUB_GRUPOFIM
             and PE.IDREPRESENTANTE between :IDREPINI and :IDREPFIM
             and PE.SITUACAOPEDIDO = 'V'
              group by IT.IDPRODUTO, COLLATEBR(P.ESPECIFICACAO), P.FATORCONVERSAO, P.IDGRUPO, COLLATEBR(G.NOME), P.IDSUB_GRUPO, COLLATEBR(S.DESCRICAO)
             into :IDPRODUTO, :NOMEPRODUTO, :QTDECAIXA, :PRECOVENDA, :CUSTO, :FATORCONVERSAO, :IDGRUPO,
                  :NOMEGRUPO, :IDSUB_GRUPO, :NOMESUB_GRUPO
          do
            begin
                 select sum(IT.QTDEPEDIDO*IT.FATORCONVERSAO),
                        sum(IT.PRECOVENDA*IT.QTDEPEDIDO),
                        sum(IT.QTDEPEDIDO*IF_SN(:TIPOCUSTO,'=','N',IT.CUSTONOTA,IT.CUSTOENCARGOS))  from ITENSDEVOLUCAO IT
        
                     right join DEVOLUCAO D
                       on D.IDFILIAL = :IDFILIAL
                      and D.IDPEDIDO = IT.IDPEDIDO
                      and D.IDFOLHA = IT.IDFOLHA
        
                    left join PRODUTO P
                      on  P.IDPRODUTO = IT.IDPRODUTO
                      and P.IDFILIAL = IT.IDFILIAL
        
                   where IT.IDFILIAL = :IDFILIAL
                     and D.DATAPEDIDO between :DTINI and :DTFIM
                     and IT.TROCA = 'N'
                     and IT.IDPRODUTO = :IDPRODUTO
                     and D.IDCLIENTE between :IDCLIENTEINI and :IDCLIENTEFIM
                     and P.IDGRUPO = :IDGRUPO
                     and P.IDSUB_GRUPO between :IDSUB_GRUPOINI and :IDSUB_GRUPOFIM
                     and D.IDREPRESENTANTE between :IDREPINI and :IDREPFIM
                     and D.SITUACAOPEDIDO = 'V'
                    into :vDEV_QTDEPEDIDO, :vDEV_PRECOVENDA, :vDEV_CUSTO;
        
                  if (:vDEV_QTDEPEDIDO is null) then vDEV_QTDEPEDIDO = 0;
                  if (:vDEV_PRECOVENDA is null) then vDEV_PRECOVENDA = 0;
                  if (:vDEV_CUSTO is null) then vDEV_CUSTO = 0;
        
                  QTDECAIXA = (:QTDECAIXA-:vDEV_QTDEPEDIDO);
                  PRECOVENDA = (:PRECOVENDA-:vDEV_PRECOVENDA);
                  CUSTO = (:CUSTO-:vDEV_CUSTO);
        
              if ((PRECOVENDA <> 0) and
                 (QTDECAIXA <> 0)) then begin
                  if (:CUSTO > 0) then
                      MARGEM = ((PRECOVENDA/CUSTO)-1)*100;
                 suspend;
              end
            end
      end
    
    
    
      -- SO OS DO RETAGUARDA
      if (TIPOPEDIDOINI = '*') then begin
          for select IT.IDPRODUTO, COLLATEBR(P.ESPECIFICACAO), sum(IT.QTDEPEDIDO*IT.FATORCONVERSAO),
                  sum(IT.QTDEPEDIDO*IT.PRECOVENDA), sum(IT.QTDEPEDIDO*IF_SN(:TIPOCUSTO,'=','N',IT.CUSTONOTA,IT.CUSTOENCARGOS)),
                  P.FATORCONVERSAO, P.IDGRUPO, COLLATEBR(G.NOME), P.IDSUB_GRUPO, COLLATEBR(S.DESCRICAO) from ITENSPEDIDO IT
            right join PEDIDO PE
              on PE.IDPEDIDO = IT.IDPEDIDO
             and PE.IDFOLHA = IT.IDFOLHA
             and PE.IDFILIAL = :IDFILIAL
        
            join PRODUTO P
              on P.IDPRODUTO = IT.IDPRODUTO
             and P.IDFILIAL = :IDFILIAL
        
            join GRUPO G
              on G.IDGRUPO = P.IDGRUPO
        
            left join SUB_GRUPO S
              on S.IDSUB_GRUPO = P.IDSUB_GRUPO
        
           where IT.IDFILIAL = :IDFILIAL
             and PE.DATAPEDIDO between :DTINI and :DTFIM
             and IT.TROCA = 'N'
             and PE.IDCLIENTE between :IDCLIENTEINI and :IDCLIENTEFIM
             and P.IDGRUPO between :IDGRUPOINI and :IDGRUPOFIM
             and PE.TIPO_PEDIDO is null
             and P.IDSUB_GRUPO between :IDSUB_GRUPOINI and :IDSUB_GRUPOFIM
             and PE.IDREPRESENTANTE between :IDREPINI and :IDREPFIM
             and PE.SITUACAOPEDIDO = 'V'
              group by IT.IDPRODUTO, COLLATEBR(P.ESPECIFICACAO), P.FATORCONVERSAO, P.IDGRUPO, COLLATEBR(G.NOME), P.IDSUB_GRUPO, COLLATEBR(S.DESCRICAO)
             into :IDPRODUTO, :NOMEPRODUTO, :QTDECAIXA, :PRECOVENDA, :CUSTO, :FATORCONVERSAO, :IDGRUPO,
                  :NOMEGRUPO, :IDSUB_GRUPO, :NOMESUB_GRUPO
          do
            begin
                 select sum(IT.QTDEPEDIDO*IT.FATORCONVERSAO),
                        sum(IT.PRECOVENDA*IT.QTDEPEDIDO),
                        sum(IT.QTDEPEDIDO*IF_SN(:TIPOCUSTO,'=','N',IT.CUSTONOTA,IT.CUSTOENCARGOS))  from ITENSDEVOLUCAO IT
        
                     right join DEVOLUCAO D
                       on D.IDFILIAL = :IDFILIAL
                      and D.IDPEDIDO = IT.IDPEDIDO
                      and D.IDFOLHA = IT.IDFOLHA
        
                    left join PRODUTO P
                      on  P.IDPRODUTO = IT.IDPRODUTO
                      and P.IDFILIAL = IT.IDFILIAL
        
                   where IT.IDFILIAL = :IDFILIAL
                     and D.DATAPEDIDO between :DTINI and :DTFIM
                     and IT.TROCA = 'N'
                     and IT.IDPRODUTO = :IDPRODUTO
                     and D.IDCLIENTE between :IDCLIENTEINI and :IDCLIENTEFIM
                     and P.IDGRUPO = :IDGRUPO
                     and P.IDSUB_GRUPO between :IDSUB_GRUPOINI and :IDSUB_GRUPOFIM
        
                     and D.TIPO_PEDIDO is null
        
                     and D.IDREPRESENTANTE between :IDREPINI and :IDREPFIM
                     and D.SITUACAOPEDIDO = 'V'
                    into :vDEV_QTDEPEDIDO, :vDEV_PRECOVENDA, :vDEV_CUSTO;
        
                  if (:vDEV_QTDEPEDIDO is null) then vDEV_QTDEPEDIDO = 0;
                  if (:vDEV_PRECOVENDA is null) then vDEV_PRECOVENDA = 0;
                  if (:vDEV_CUSTO is null) then vDEV_CUSTO = 0;
        
                  QTDECAIXA = (:QTDECAIXA-:vDEV_QTDEPEDIDO);
                  PRECOVENDA = (:PRECOVENDA-:vDEV_PRECOVENDA);
                  CUSTO = (:CUSTO-:vDEV_CUSTO);
        
              if ((PRECOVENDA <> 0) and
                 (QTDECAIXA <> 0)) then begin
                  if (:CUSTO > 0) then
                      MARGEM = ((PRECOVENDA/CUSTO)-1)*100;
                 suspend;
              end
            end
      end
    
    
    
      -- BALCAO E FRENTE DE CAIXA
      if ((TIPOPEDIDOINI = 'B') or (TIPOPEDIDOINI = 'F')) then begin
          for select IT.IDPRODUTO, COLLATEBR(P.ESPECIFICACAO), sum(IT.QTDEPEDIDO*IT.FATORCONVERSAO),
                  sum(IT.QTDEPEDIDO*IT.PRECOVENDA), sum(IT.QTDEPEDIDO*IF_SN(:TIPOCUSTO,'=','N',IT.CUSTONOTA,IT.CUSTOENCARGOS)),
                  P.FATORCONVERSAO, P.IDGRUPO, COLLATEBR(G.NOME), P.IDSUB_GRUPO, COLLATEBR(S.DESCRICAO) from ITENSPEDIDO IT
            right join PEDIDO PE
              on PE.IDPEDIDO = IT.IDPEDIDO
             and PE.IDFOLHA = IT.IDFOLHA
             and PE.IDFILIAL = :IDFILIAL
        
            join PRODUTO P
              on P.IDPRODUTO = IT.IDPRODUTO
             and P.IDFILIAL = :IDFILIAL
        
            join GRUPO G
              on G.IDGRUPO = P.IDGRUPO
        
            left join SUB_GRUPO S
              on S.IDSUB_GRUPO = P.IDSUB_GRUPO
        
           where IT.IDFILIAL = :IDFILIAL
             and PE.DATAPEDIDO between :DTINI and :DTFIM
             and IT.TROCA = 'N'
             and PE.IDCLIENTE between :IDCLIENTEINI and :IDCLIENTEFIM
             and P.IDGRUPO between :IDGRUPOINI and :IDGRUPOFIM
             and PE.TIPO_PEDIDO between :TIPOPEDIDOINI and :TIPOPEDIDOFIM
             and P.IDSUB_GRUPO between :IDSUB_GRUPOINI and :IDSUB_GRUPOFIM
             and PE.IDREPRESENTANTE between :IDREPINI and :IDREPFIM
             and PE.SITUACAOPEDIDO = 'V'
              group by IT.IDPRODUTO, COLLATEBR(P.ESPECIFICACAO), P.FATORCONVERSAO, P.IDGRUPO, COLLATEBR(G.NOME), P.IDSUB_GRUPO, COLLATEBR(S.DESCRICAO)
             into :IDPRODUTO, :NOMEPRODUTO, :QTDECAIXA, :PRECOVENDA, :CUSTO, :FATORCONVERSAO, :IDGRUPO,
                  :NOMEGRUPO, :IDSUB_GRUPO, :NOMESUB_GRUPO
          do
            begin
                 select sum(IT.QTDEPEDIDO*IT.FATORCONVERSAO),
                        sum(IT.PRECOVENDA*IT.QTDEPEDIDO),
                        sum(IT.QTDEPEDIDO*IF_SN(:TIPOCUSTO,'=','N',IT.CUSTONOTA,IT.CUSTOENCARGOS))  from ITENSDEVOLUCAO IT
        
                     right join DEVOLUCAO D
                       on D.IDFILIAL = :IDFILIAL
                      and D.IDPEDIDO = IT.IDPEDIDO
                      and D.IDFOLHA = IT.IDFOLHA
        
                    left join PRODUTO P
                      on  P.IDPRODUTO = IT.IDPRODUTO
                      and P.IDFILIAL = IT.IDFILIAL
        
                   where IT.IDFILIAL = :IDFILIAL
                     and D.DATAPEDIDO between :DTINI and :DTFIM
                     and IT.TROCA = 'N'
                     and IT.IDPRODUTO = :IDPRODUTO
                     and D.IDCLIENTE between :IDCLIENTEINI and :IDCLIENTEFIM
                     and P.IDGRUPO = :IDGRUPO
                     and P.IDSUB_GRUPO between :IDSUB_GRUPOINI and :IDSUB_GRUPOFIM
        
                     and D.TIPO_PEDIDO between :TIPOPEDIDOINI and :TIPOPEDIDOFIM
        
                     and D.IDREPRESENTANTE between :IDREPINI and :IDREPFIM
                     and D.SITUACAOPEDIDO = 'V'
                    into :vDEV_QTDEPEDIDO, :vDEV_PRECOVENDA, :vDEV_CUSTO;
        
                  if (:vDEV_QTDEPEDIDO is null) then vDEV_QTDEPEDIDO = 0;
                  if (:vDEV_PRECOVENDA is null) then vDEV_PRECOVENDA = 0;
                  if (:vDEV_CUSTO is null) then vDEV_CUSTO = 0;
        
                  QTDECAIXA = (:QTDECAIXA-:vDEV_QTDEPEDIDO);
                  PRECOVENDA = (:PRECOVENDA-:vDEV_PRECOVENDA);
                  CUSTO = (:CUSTO-:vDEV_CUSTO);
        
              if ((PRECOVENDA <> 0) and
                 (QTDECAIXA <> 0)) then begin
                  if (:CUSTO > 0) then
                  MARGEM = ((PRECOVENDA/CUSTO)-1)*100;
                 suspend;
              end
            end
      end
   end

   -- se nao
   else begin
      -- TODOS OS TIPO DE PEDIDOS
      if (TIPOPEDIDOINI = '@') then begin
          for select IT.IDPRODUTO, COLLATEBR(P.ESPECIFICACAO), sum(IT.QTDEPEDIDO*IT.FATORCONVERSAO),
                  sum(IT.QTDEPEDIDO*IT.PRECOVENDA), sum(IT.QTDEPEDIDO*IF_SN(:TIPOCUSTO,'=','N',IT.CUSTONOTA,IT.CUSTOENCARGOS)),
                  P.FATORCONVERSAO, P.IDGRUPO, COLLATEBR(G.NOME), P.IDSUB_GRUPO, COLLATEBR(S.DESCRICAO) from ITENSPEDIDO IT
            right join PEDIDO PE
              on PE.IDPEDIDO = IT.IDPEDIDO
             and PE.IDFOLHA = IT.IDFOLHA
             and PE.IDFILIAL = :IDFILIAL
        
            join PRODUTO P
              on P.IDPRODUTO = IT.IDPRODUTO
             and P.IDFILIAL = :IDFILIAL
        
            join GRUPO G
              on G.IDGRUPO = P.IDGRUPO
        
            left join SUB_GRUPO S
              on S.IDSUB_GRUPO = P.IDSUB_GRUPO
        
           where IT.IDFILIAL = :IDFILIAL
             and PE.DATAPEDIDO between :DTINI and :DTFIM
             and IT.TROCA = 'N'
             and PE.IDCLIENTE between :IDCLIENTEINI and :IDCLIENTEFIM
             and P.IDGRUPO between :IDGRUPOINI and :IDGRUPOFIM
             and P.IDSUB_GRUPO between :IDSUB_GRUPOINI and :IDSUB_GRUPOFIM
             and PE.IDOBRAS between :IDOBRASINI and :IDOBRASFIM
             and PE.IDREPRESENTANTE between :IDREPINI and :IDREPFIM
             and PE.SITUACAOPEDIDO = 'V'
              group by IT.IDPRODUTO, COLLATEBR(P.ESPECIFICACAO), P.FATORCONVERSAO, P.IDGRUPO, COLLATEBR(G.NOME), P.IDSUB_GRUPO, COLLATEBR(S.DESCRICAO)
             into :IDPRODUTO, :NOMEPRODUTO, :QTDECAIXA, :PRECOVENDA, :CUSTO, :FATORCONVERSAO, :IDGRUPO,
                  :NOMEGRUPO, :IDSUB_GRUPO, :NOMESUB_GRUPO
          do
            begin
                 select sum(IT.QTDEPEDIDO*IT.FATORCONVERSAO),
                        sum(IT.PRECOVENDA*IT.QTDEPEDIDO),
                        sum(IT.QTDEPEDIDO*IF_SN(:TIPOCUSTO,'=','N',IT.CUSTONOTA,IT.CUSTOENCARGOS))  from ITENSDEVOLUCAO IT
        
                     right join DEVOLUCAO D
                       on D.IDFILIAL = :IDFILIAL
                      and D.IDPEDIDO = IT.IDPEDIDO
                      and D.IDFOLHA = IT.IDFOLHA
        
                    left join PRODUTO P
                      on  P.IDPRODUTO = IT.IDPRODUTO
                      and P.IDFILIAL = IT.IDFILIAL
        
                   where IT.IDFILIAL = :IDFILIAL
                     and D.DATAPEDIDO between :DTINI and :DTFIM
                     and IT.TROCA = 'N'
                     and IT.IDPRODUTO = :IDPRODUTO
                     and D.IDOBRAS between :IDOBRASINI and :IDOBRASFIM
                     and D.IDCLIENTE between :IDCLIENTEINI and :IDCLIENTEFIM
                     and P.IDGRUPO = :IDGRUPO
                     and P.IDSUB_GRUPO between :IDSUB_GRUPOINI and :IDSUB_GRUPOFIM
                     and D.IDREPRESENTANTE between :IDREPINI and :IDREPFIM
                     and D.SITUACAOPEDIDO = 'V'
                    into :vDEV_QTDEPEDIDO, :vDEV_PRECOVENDA, :vDEV_CUSTO;
        
                  if (:vDEV_QTDEPEDIDO is null) then vDEV_QTDEPEDIDO = 0;
                  if (:vDEV_PRECOVENDA is null) then vDEV_PRECOVENDA = 0;
                  if (:vDEV_CUSTO is null) then vDEV_CUSTO = 0;
        
                  QTDECAIXA = (:QTDECAIXA-:vDEV_QTDEPEDIDO);
                  PRECOVENDA = (:PRECOVENDA-:vDEV_PRECOVENDA);
                  CUSTO = (:CUSTO-:vDEV_CUSTO);
        
              if ((PRECOVENDA <> 0) and
                 (QTDECAIXA <> 0)) then begin
                  if (:CUSTO > 0) then
                      MARGEM = ((PRECOVENDA/CUSTO)-1)*100;
                 suspend;
              end
            end
      end
    
    
    
      -- SO OS DO RETAGUARDA
      if (TIPOPEDIDOINI = '*') then begin
          for select IT.IDPRODUTO, COLLATEBR(P.ESPECIFICACAO), sum(IT.QTDEPEDIDO*IT.FATORCONVERSAO),
                  sum(IT.QTDEPEDIDO*IT.PRECOVENDA), sum(IT.QTDEPEDIDO*IF_SN(:TIPOCUSTO,'=','N',IT.CUSTONOTA,IT.CUSTOENCARGOS)),
                  P.FATORCONVERSAO, P.IDGRUPO, COLLATEBR(G.NOME), P.IDSUB_GRUPO, COLLATEBR(S.DESCRICAO) from ITENSPEDIDO IT
            right join PEDIDO PE
              on PE.IDPEDIDO = IT.IDPEDIDO
             and PE.IDFOLHA = IT.IDFOLHA
             and PE.IDFILIAL = :IDFILIAL
        
            join PRODUTO P
              on P.IDPRODUTO = IT.IDPRODUTO
             and P.IDFILIAL = :IDFILIAL
        
            join GRUPO G
              on G.IDGRUPO = P.IDGRUPO
        
            left join SUB_GRUPO S
              on S.IDSUB_GRUPO = P.IDSUB_GRUPO
        
           where IT.IDFILIAL = :IDFILIAL
             and PE.DATAPEDIDO between :DTINI and :DTFIM
             and IT.TROCA = 'N'
             and PE.IDCLIENTE between :IDCLIENTEINI and :IDCLIENTEFIM
             and P.IDGRUPO between :IDGRUPOINI and :IDGRUPOFIM
             and PE.IDOBRAS between :IDOBRASINI and :IDOBRASFIM
             and PE.TIPO_PEDIDO is null
             and P.IDSUB_GRUPO between :IDSUB_GRUPOINI and :IDSUB_GRUPOFIM
             and PE.IDREPRESENTANTE between :IDREPINI and :IDREPFIM
             and PE.SITUACAOPEDIDO = 'V'
              group by IT.IDPRODUTO, COLLATEBR(P.ESPECIFICACAO), P.FATORCONVERSAO, P.IDGRUPO, COLLATEBR(G.NOME), P.IDSUB_GRUPO, COLLATEBR(S.DESCRICAO)
             into :IDPRODUTO, :NOMEPRODUTO, :QTDECAIXA, :PRECOVENDA, :CUSTO, :FATORCONVERSAO, :IDGRUPO,
                  :NOMEGRUPO, :IDSUB_GRUPO, :NOMESUB_GRUPO
          do
            begin
                 select sum(IT.QTDEPEDIDO*IT.FATORCONVERSAO),
                        sum(IT.PRECOVENDA*IT.QTDEPEDIDO),
                        sum(IT.QTDEPEDIDO*IF_SN(:TIPOCUSTO,'=','N',IT.CUSTONOTA,IT.CUSTOENCARGOS))  from ITENSDEVOLUCAO IT
        
                     right join DEVOLUCAO D
                       on D.IDFILIAL = :IDFILIAL
                      and D.IDPEDIDO = IT.IDPEDIDO
                      and D.IDFOLHA = IT.IDFOLHA
        
                    left join PRODUTO P
                      on  P.IDPRODUTO = IT.IDPRODUTO
                      and P.IDFILIAL = IT.IDFILIAL
        
                   where IT.IDFILIAL = :IDFILIAL
                     and D.DATAPEDIDO between :DTINI and :DTFIM
                     and IT.TROCA = 'N'
                     and IT.IDPRODUTO = :IDPRODUTO
                     and D.IDOBRAS between :IDOBRASINI and :IDOBRASFIM
                     and D.IDCLIENTE between :IDCLIENTEINI and :IDCLIENTEFIM
                     and P.IDGRUPO = :IDGRUPO
                     and P.IDSUB_GRUPO between :IDSUB_GRUPOINI and :IDSUB_GRUPOFIM
        
                     and D.TIPO_PEDIDO is null
        
                     and D.IDREPRESENTANTE between :IDREPINI and :IDREPFIM
                     and D.SITUACAOPEDIDO = 'V'
                    into :vDEV_QTDEPEDIDO, :vDEV_PRECOVENDA, :vDEV_CUSTO;
        
                  if (:vDEV_QTDEPEDIDO is null) then vDEV_QTDEPEDIDO = 0;
                  if (:vDEV_PRECOVENDA is null) then vDEV_PRECOVENDA = 0;
                  if (:vDEV_CUSTO is null) then vDEV_CUSTO = 0;
        
                  QTDECAIXA = (:QTDECAIXA-:vDEV_QTDEPEDIDO);
                  PRECOVENDA = (:PRECOVENDA-:vDEV_PRECOVENDA);
                  CUSTO = (:CUSTO-:vDEV_CUSTO);
        
              if ((PRECOVENDA <> 0) and
                 (QTDECAIXA <> 0)) then begin
                  if (:CUSTO > 0) then
                      MARGEM = ((PRECOVENDA/CUSTO)-1)*100;
                 suspend;
              end
            end
      end
    
    
    
      -- BALCAO E FRENTE DE CAIXA
      if ((TIPOPEDIDOINI = 'B') or (TIPOPEDIDOINI = 'F')) then begin
          for select IT.IDPRODUTO, COLLATEBR(P.ESPECIFICACAO), sum(IT.QTDEPEDIDO*IT.FATORCONVERSAO),
                  sum(IT.QTDEPEDIDO*IT.PRECOVENDA), sum(IT.QTDEPEDIDO*IF_SN(:TIPOCUSTO,'=','N',IT.CUSTONOTA,IT.CUSTOENCARGOS)),
                  P.FATORCONVERSAO, P.IDGRUPO, COLLATEBR(G.NOME), P.IDSUB_GRUPO, COLLATEBR(S.DESCRICAO) from ITENSPEDIDO IT
            right join PEDIDO PE
              on PE.IDPEDIDO = IT.IDPEDIDO
             and PE.IDFOLHA = IT.IDFOLHA
             and PE.IDFILIAL = :IDFILIAL
        
            join PRODUTO P
              on P.IDPRODUTO = IT.IDPRODUTO
             and P.IDFILIAL = :IDFILIAL
        
            join GRUPO G
              on G.IDGRUPO = P.IDGRUPO
        
            left join SUB_GRUPO S
              on S.IDSUB_GRUPO = P.IDSUB_GRUPO
        
           where IT.IDFILIAL = :IDFILIAL
             and PE.DATAPEDIDO between :DTINI and :DTFIM
             and IT.TROCA = 'N'
             and PE.IDCLIENTE between :IDCLIENTEINI and :IDCLIENTEFIM
             and P.IDGRUPO between :IDGRUPOINI and :IDGRUPOFIM
             and PE.IDOBRAS between :IDOBRASINI and :IDOBRASFIM
             and PE.TIPO_PEDIDO between :TIPOPEDIDOINI and :TIPOPEDIDOFIM
             and P.IDSUB_GRUPO between :IDSUB_GRUPOINI and :IDSUB_GRUPOFIM
             and PE.IDREPRESENTANTE between :IDREPINI and :IDREPFIM
             and PE.SITUACAOPEDIDO = 'V'
              group by IT.IDPRODUTO, COLLATEBR(P.ESPECIFICACAO), P.FATORCONVERSAO, P.IDGRUPO, COLLATEBR(G.NOME), P.IDSUB_GRUPO, COLLATEBR(S.DESCRICAO)
             into :IDPRODUTO, :NOMEPRODUTO, :QTDECAIXA, :PRECOVENDA, :CUSTO, :FATORCONVERSAO, :IDGRUPO,
                  :NOMEGRUPO, :IDSUB_GRUPO, :NOMESUB_GRUPO
          do
            begin
                 select sum(IT.QTDEPEDIDO*IT.FATORCONVERSAO),
                        sum(IT.PRECOVENDA*IT.QTDEPEDIDO),
                        sum(IT.QTDEPEDIDO*IF_SN(:TIPOCUSTO,'=','N',IT.CUSTONOTA,IT.CUSTOENCARGOS))  from ITENSDEVOLUCAO IT
        
                     right join DEVOLUCAO D
                       on D.IDFILIAL = :IDFILIAL
                      and D.IDPEDIDO = IT.IDPEDIDO
                      and D.IDFOLHA = IT.IDFOLHA
        
                    left join PRODUTO P
                      on  P.IDPRODUTO = IT.IDPRODUTO
                      and P.IDFILIAL = IT.IDFILIAL
        
                   where IT.IDFILIAL = :IDFILIAL
                     and D.DATAPEDIDO between :DTINI and :DTFIM
                     and IT.TROCA = 'N'
                     and IT.IDPRODUTO = :IDPRODUTO
                     and D.IDCLIENTE between :IDCLIENTEINI and :IDCLIENTEFIM
                     and P.IDGRUPO = :IDGRUPO
                     and P.IDSUB_GRUPO between :IDSUB_GRUPOINI and :IDSUB_GRUPOFIM
                     and D.IDOBRAS between :IDOBRASINI and :IDOBRASFIM
                     and D.TIPO_PEDIDO between :TIPOPEDIDOINI and :TIPOPEDIDOFIM
        
                     and D.IDREPRESENTANTE between :IDREPINI and :IDREPFIM
                     and D.SITUACAOPEDIDO = 'V'
                    into :vDEV_QTDEPEDIDO, :vDEV_PRECOVENDA, :vDEV_CUSTO;
        
                  if (:vDEV_QTDEPEDIDO is null) then vDEV_QTDEPEDIDO = 0;
                  if (:vDEV_PRECOVENDA is null) then vDEV_PRECOVENDA = 0;
                  if (:vDEV_CUSTO is null) then vDEV_CUSTO = 0;
        
                  QTDECAIXA = (:QTDECAIXA-:vDEV_QTDEPEDIDO);
                  PRECOVENDA = (:PRECOVENDA-:vDEV_PRECOVENDA);
                  CUSTO = (:CUSTO-:vDEV_CUSTO);
        
              if ((PRECOVENDA <> 0) and
                 (QTDECAIXA <> 0)) then begin
                  if (:CUSTO > 0) then
                  MARGEM = ((PRECOVENDA/CUSTO)-1)*100;
                 suspend;
              end
            end
      end
   end
end^


ALTER PROCEDURE REL_MEDIA_VENDA_CLIENTE (
    IDFILIAL INTEGER,
    IDCLIENTEINI INTEGER,
    IDCLIENTEFIM INTEGER,
    IDREPINI INTEGER,
    IDREPFIM INTEGER,
    DATAINI DATE,
    DATAFIM DATE)
RETURNS (
    IDCLIENTE SMALLINT,
    NOME VARCHAR(60),
    VALORVENDIDO NUMERIC(16,2),
    MEDIACOMPRA NUMERIC(16,2))
AS
declare variable TOTALVENDAS numeric(14,2);
begin
  for select C.IDCLIENTE, C.MEDIACOMPRA, COLLATEBR(C.NOME), sum(IT.QTDEPEDIDO*IT.PRECOVENDA)
      from ITENSPEDIDO IT

      right join PEDIDO PE
         on PE.IDFILIAL = :IDFILIAL
        and PE.IDPEDIDO = IT.IDPEDIDO
        and PE.IDFOLHA  = IT.IDFOLHA

      join CLIENTE C
        on C.IDCLIENTE = PE.IDCLIENTE


      where IT.IDFILIAL = :IDFILIAL
        and IT.TROCA = 'N'
        and PE.SITUACAOPEDIDO = 'V'
        and PE.IDREPRESENTANTE between :IDREPINI and :IDREPFIM
        and C.IDCLIENTE between :IDCLIENTEINI and :IDCLIENTEFIM
        and PE.DATAPEDIDO between :DATAINI and :DATAFIM

      group by C.IDCLIENTE, C.MEDIACOMPRA, COLLATEBR(C.NOME)
      into :IDCLIENTE, :MEDIACOMPRA, :NOME, :VALORVENDIDO
  do
     begin
       select sum(IT.PRECOVENDA*IT.QTDEPEDIDO) from ITENSDEVOLUCAO IT

             right join DEVOLUCAO D
               on D.IDFILIAL = :IDFILIAL
              and D.IDPEDIDO = IT.IDPEDIDO
              and D.IDFOLHA = IT.IDFOLHA

            left join PRODUTO P
              on  P.IDPRODUTO = IT.IDPRODUTO
              and P.IDFILIAL = IT.IDFILIAL

              join CLIENTE C
                on C.IDCLIENTE = D.IDCLIENTE
        
           where IT.IDFILIAL = :IDFILIAL
             and IT.TROCA = 'N'
             and D.SITUACAOPEDIDO = 'V'
             and D.IDREPRESENTANTE between :IDREPINI and :IDREPFIM
             and D.DATAPEDIDO between :DATAINI and :DATAFIM
             into :TOTALVENDAS;

     --     if (:TOTALVENDAS is null) then TOTALVENDAS = 0;
       --   VALORVENDIDO = (:VALORVENDIDO-:TOTALVENDAS);
      suspend;
    end
end^


ALTER PROCEDURE REL_METAS_VENDAS_REPRE (
    IDFILIAL SMALLINT,
    DTINI DATE,
    DTFIM DATE,
    IDCLIENTEINI INTEGER,
    IDCLIENTEFIM INTEGER,
    IDCONVENIOINI INTEGER,
    IDCONVENIOFIM INTEGER,
    IDREPREINI INTEGER,
    IDREPREFIM INTEGER,
    IDGRUPOINI SMALLINT,
    IDGRUPOFIM SMALLINT,
    IDCIDADEINI INTEGER,
    IDCIDADEFIM INTEGER,
    IDSUB_GRUPOINI SMALLINT,
    IDSUB_GRUPOFIM SMALLINT)
RETURNS (
    IDPRODUTO INTEGER,
    NOMEPRODUTO VARCHAR(60),
    UNIDADE VARCHAR(5) CHARACTER SET NONE,
    IDCLIENTE INTEGER,
    NOMECLIENTE VARCHAR(45),
    DTULTIMACOMPRA DATE,
    FONE VARCHAR(13) CHARACTER SET NONE,
    FATORCONVERSAO INTEGER,
    QTDEVENDIDA NUMERIC(14,2),
    TOTALVENDA NUMERIC(14,2),
    IDREPRESENTANTE INTEGER)
AS
DECLARE VARIABLE VDEV_QTDEPEDIDO NUMERIC(10,3);
DECLARE VARIABLE VDEV_PRECOVENDA NUMERIC(14,2);
begin
  for select IT.IDPRODUTO, COLLATEBR(P.ESPECIFICACAO), COLLATEBR(UN.ABREVIATURA), PE.IDCLIENTE,
             COLLATEBR(C.NOME), C.DTULTIMACOMPRA, C.FONE, UN.FATORCONVERSAO, PE.IDREPRESENTANTE, sum(IT.QTDEPEDIDO*IT.FATORCONVERSAO), sum(IT.PRECOVENDA*IT.QTDEPEDIDO) from ITENSPEDIDO IT
    right join PEDIDO PE
      on PE.IDFILIAL = :IDFILIAL
     and PE.IDPEDIDO = IT.IDPEDIDO
     and PE.IDFOLHA = IT.IDFOLHA

    join CLIENTE C
      on C.IDCLIENTE = PE.IDCLIENTE

    join PRODUTO P
      on P.IDFILIAL = :IDFILIAL
     and P.IDPRODUTO = IT.IDPRODUTO

    join UNIDADEMEDIDA UN
      on UN.IDFILIAL = :IDFILIAL
     and UN.IDUNIDADEMEDIDA = P.IDUNIDADEMEDIDA

    where IT.IDFILIAL = :IDFILIAL
      and IT.TROCA = 'N'
      and PE.IDCLIENTE between :IDCLIENTEINI and :IDCLIENTEFIM
      and PE.DATAPEDIDO between :DTINI and :DTFIM
      and C.IDCIDADE between :IDCIDADEINI and :IDCIDADEFIM
      and P.IDGRUPO between :IDGRUPOINI and :IDGRUPOFIM
      and P.IDSUB_GRUPO between :IDSUB_GRUPOINI and :IDSUB_GRUPOFIM
      and PE.IDREPRESENTANTE between :IDREPREINI and :IDREPREFIM
      and C.IDCONVENIO between :IDCONVENIOINI and :IDCONVENIOFIM
      and PE.SITUACAOPEDIDO = 'V'
      group by IT.IDPRODUTO, COLLATEBR(P.ESPECIFICACAO), COLLATEBR(UN.ABREVIATURA), PE.IDCLIENTE,
             COLLATEBR(C.NOME), C.DTULTIMACOMPRA, C.FONE, UN.FATORCONVERSAO, PE.IDREPRESENTANTE
      into :IDPRODUTO, :NOMEPRODUTO, :UNIDADE, :IDCLIENTE, :NOMECLIENTE,
           :DTULTIMACOMPRA, :FONE, :FATORCONVERSAO, :IDREPRESENTANTE, :QTDEVENDIDA, :TOTALVENDA
  do
    begin
         select sum(IT.QTDEPEDIDO*IT.FATORCONVERSAO),
                sum(IT.PRECOVENDA*IT.QTDEPEDIDO) from ITENSDEVOLUCAO IT

             right join DEVOLUCAO D
               on D.IDFILIAL = :IDFILIAL
              and D.IDPEDIDO = IT.IDPEDIDO
              and D.IDFOLHA = IT.IDFOLHA

            left join PRODUTO P
              on  P.IDPRODUTO = IT.IDPRODUTO
              and P.IDFILIAL = IT.IDFILIAL

            where IT.IDFILIAL = :IDFILIAL
              and IT.TROCA = 'N'
              and P.IDGRUPO between :IDGRUPOINI and :IDGRUPOFIM
              and D.IDCLIENTE = :IDCLIENTE
              and IT.IDPRODUTO = :IDPRODUTO
              and P.IDSUB_GRUPO between :IDSUB_GRUPOINI and :IDSUB_GRUPOFIM
              and D.DATAPEDIDO between :DTINI and :DTFIM
              and D.IDREPRESENTANTE between :IDREPREINI and :IDREPREFIM
              and D.SITUACAOPEDIDO = 'V'
             into :vDEV_QTDEPEDIDO, :vDEV_PRECOVENDA;

          if (:vDEV_QTDEPEDIDO is null) then vDEV_QTDEPEDIDO = 0;
          if (:vDEV_PRECOVENDA is null) then vDEV_PRECOVENDA = 0;

          QTDEVENDIDA = (:QTDEVENDIDA-:vDEV_QTDEPEDIDO);
          TOTALVENDA = (:TOTALVENDA-:vDEV_PRECOVENDA);

       if (TOTALVENDA <> 0) then
         suspend;
    end
end^


ALTER PROCEDURE REL_MOVIMENTO (
    IDFILIAL INTEGER,
    IDCAIXA INTEGER,
    DTINI DATE,
    DTFIM DATE,
    IDCENTROCUSTOINI SMALLINT,
    IDCENTROCUSTOFIM SMALLINT,
    ORDEM VARCHAR(1),
    SALDO VARCHAR(1))
RETURNS (
    IDMOVTOCAIXA INTEGER,
    DOCUMENTO VARCHAR(20),
    HISTORICO VARCHAR(111),
    DTMOVIMENTO DATE,
    DTEMISSAO DATE,
    VALORDEBITO NUMERIC(16,2),
    VALORCREDITO NUMERIC(16,2),
    SALDOANTERIOR NUMERIC(16,2),
    TIPOOPERACAO CHAR(1),
    COMPENSADO VARCHAR(1),
    CENTROCUSTO VARCHAR(40))
AS
declare variable VTOTALCREANT numeric(16,2);
declare variable VTOTALDEBANT numeric(16,2);
declare variable VVALORMOVTO numeric(16,2);
declare variable VCOMPLEMENTO varchar(60);
begin
   -- * ASTERISTICO NO MOVTO DE CAIXA SIGINIFICA CHEQUE A COMPENSAR
   if (SALDO = 'S') then begin
       select sum(M.VALORMOVTO) from MOVTOCAIXA M
        where M.IDFILIAL = :IDFILIAL
          and M.IDCAIXA = :IDCAIXA
          and M.TIPOOPERACAO = 'C'
          and M.COMPENSADO <> '*'
          and M.IDCENTROCUSTO between :IDCENTROCUSTOINI and :IDCENTROCUSTOFIM
          and M.DTMOVIMENTO < :DTINI into vTOTALCREANT;
    
       select sum(M.VALORMOVTO) from MOVTOCAIXA M
        where M.IDFILIAL = :IDFILIAL
          and M.IDCAIXA = :IDCAIXA
          and M.TIPOOPERACAO = 'D'
          and M.COMPENSADO <> '*'
          and M.IDCENTROCUSTO between :IDCENTROCUSTOINI and :IDCENTROCUSTOFIM
          and M.DTMOVIMENTO < :DTINI into vTOTALDEBANT;
   end
   if (SALDOANTERIOR is NULL) then SALDOANTERIOR = 0;
   if (vTOTALDEBANT is NULL) then vTOTALDEBANT = 0;
   if (vTOTALCREANT is NULL) then vTOTALCREANT = 0;
   SALDOANTERIOR =(vTOTALCREANT-vTOTALDEBANT);
   HISTORICO = 'SALDO ANTERIOR ========>';
   suspend;

   if (ORDEM = 'T') then begin
       for select COLLATEBR(M.DOCUMENTO),M.IDMOVTOCAIXA, COLLATEBR(M.DESCRICAOHISTORICO), M.TIPOOPERACAO, M.DTMOVIMENTO, M.DTEMISSAO, M.VALORMOVTO,
                  M.COMPENSADO, C.DESCRICAO, M.COMPLEMENTOHISTORICO from MOVTOCAIXA M

         left join CENTROCUSTO C
           on C.IDCENTROCUSTO = M.IDCENTROCUSTO

         where M.IDFILIAL = :IDFILIAL
           and M.IDCAIXA = :IDCAIXA
           and M.DTMOVIMENTO between :DTINI and :DTFIM
--           and C.SITUACAORELATORIO = 'S'
           and M.IDCENTROCUSTO between :IDCENTROCUSTOINI and :IDCENTROCUSTOFIM
          order by M.DTMOVIMENTO, M.TIPOOPERACAO, M.DOCUMENTO
          into :DOCUMENTO, :IDMOVTOCAIXA, :HISTORICO, :TIPOOPERACAO, :DTMOVIMENTO, :DTEMISSAO, :vVALORMOVTO, :COMPENSADO, :CENTROCUSTO,
               :VCOMPLEMENTO
        do
         begin
           if (:VCOMPLEMENTO is null) then VCOMPLEMENTO = '';
           if (:HISTORICO is null) then HISTORICO = '';

--           HISTORICO = VCOMPLEMENTO || ' ' || :HISTORICO;

           if (TIPOOPERACAO = 'C') then begin
              VALORCREDITO = vVALORMOVTO;
              VALORDEBITO = 0; end
           else begin
              VALORDEBITO = vVALORMOVTO;
              VALORCREDITO = 0;
           end
    
           if (:COMPENSADO <> '*') then begin
               if (TIPOOPERACAO = 'C') then
                  SALDOANTERIOR = :SALDOANTERIOR+:VVALORMOVTO;
               else
                  SALDOANTERIOR = :SALDOANTERIOR-:VVALORMOVTO;
           end

           suspend;
         end
    end
    else begin

       for select COLLATEBR(M.DOCUMENTO),M.IDMOVTOCAIXA, COLLATEBR(M.DESCRICAOHISTORICO), M.TIPOOPERACAO, M.DTMOVIMENTO, M.DTEMISSAO, M.VALORMOVTO,
                  M.COMPENSADO, C.DESCRICAO, M.COMPLEMENTOHISTORICO from MOVTOCAIXA M

         left join CENTROCUSTO C
           on C.IDCENTROCUSTO = M.IDCENTROCUSTO

         where M.IDFILIAL = :IDFILIAL
           and M.IDCAIXA = :IDCAIXA
           and M.DTMOVIMENTO between :DTINI and :DTFIM
--           and C.SITUACAORELATORIO = 'S'
           and M.IDCENTROCUSTO between :IDCENTROCUSTOINI and :IDCENTROCUSTOFIM
          order by M.DTMOVIMENTO, M.IDMOVTOCAIXA
          into :DOCUMENTO, :IDMOVTOCAIXA, :HISTORICO, :TIPOOPERACAO, :DTMOVIMENTO, :DTEMISSAO, :vVALORMOVTO, :COMPENSADO, :CENTROCUSTO,
               :VCOMPLEMENTO
        do
         begin
           if (:VCOMPLEMENTO is null) then VCOMPLEMENTO = '';
           if (:HISTORICO is null) then HISTORICO = '';

--           HISTORICO = VCOMPLEMENTO || ' ' || :HISTORICO;

           if (TIPOOPERACAO = 'C') then begin
              VALORCREDITO = vVALORMOVTO;
              VALORDEBITO = 0; end
           else begin
              VALORDEBITO = vVALORMOVTO;
              VALORCREDITO = 0;
           end
    
           if (:COMPENSADO <> '*') then begin
               if (TIPOOPERACAO = 'C') then
                  SALDOANTERIOR = :SALDOANTERIOR+:VVALORMOVTO;
               else
                  SALDOANTERIOR = :SALDOANTERIOR-:VVALORMOVTO;
           end

           suspend;
         end
    end
end^


ALTER PROCEDURE REL_MOVIMENTO_ARTPAN (
    IDFILIAL INTEGER,
    IDCAIXA INTEGER,
    DTINI DATE,
    DTFIM DATE,
    IDCENTROCUSTOINI SMALLINT,
    IDCENTROCUSTOFIM SMALLINT,
    ORDEM VARCHAR(1),
    SALDO VARCHAR(1))
RETURNS (
    IDMOVTOCAIXA INTEGER,
    DOCUMENTO VARCHAR(20) CHARACTER SET NONE,
    HISTORICO VARCHAR(152) CHARACTER SET NONE,
    DTMOVIMENTO DATE,
    DTEMISSAO DATE,
    VALORDEBITO NUMERIC(16,2),
    VALORCREDITO NUMERIC(16,2),
    SALDOANTERIOR NUMERIC(16,2),
    TIPOOPERACAO CHAR(1),
    COMPENSADO VARCHAR(1),
    CENTROCUSTO VARCHAR(40))
AS
declare variable VTOTALCREANT numeric(16,2);
declare variable VTOTALDEBANT numeric(16,2);
declare variable VVALORMOVTO numeric(16,2);
declare variable VCOMPLEMENTO varchar(60);
begin
   -- * ASTERISTICO NO MOVTO DE CAIXA SIGINIFICA CHEQUE A COMPENSAR
   if (SALDO = 'S') then begin
       select sum(M.VALORMOVTO) from MOVTOCAIXA M
        where M.IDFILIAL = :IDFILIAL
          and M.IDCAIXA = :IDCAIXA
          and M.TIPOOPERACAO = 'C'
          and M.COMPENSADO <> '*'
          and M.IDCENTROCUSTO between :IDCENTROCUSTOINI and :IDCENTROCUSTOFIM
          and M.DTMOVIMENTO < :DTINI into vTOTALCREANT;
    
       select sum(M.VALORMOVTO) from MOVTOCAIXA M
        where M.IDFILIAL = :IDFILIAL
          and M.IDCAIXA = :IDCAIXA
          and M.TIPOOPERACAO = 'D'
          and M.COMPENSADO <> '*'
          and M.IDCENTROCUSTO between :IDCENTROCUSTOINI and :IDCENTROCUSTOFIM
          and M.DTMOVIMENTO < :DTINI into vTOTALDEBANT;
   end

   if (SALDOANTERIOR is NULL) then SALDOANTERIOR = 0;
   if (vTOTALDEBANT is NULL) then vTOTALDEBANT = 0;
   if (vTOTALCREANT is NULL) then vTOTALCREANT = 0;
   SALDOANTERIOR =(vTOTALCREANT-vTOTALDEBANT);
   HISTORICO = 'SALDO ANTERIOR ========>';
   suspend;

   if (ORDEM = 'T') then begin
       for select COLLATEBR(M.DOCUMENTO),M.IDMOVTOCAIXA, COLLATEBR(M.DESCRICAOHISTORICO), M.TIPOOPERACAO, M.DTMOVIMENTO, M.DTEMISSAO, M.VALORMOVTO,
                  M.COMPENSADO, C.DESCRICAO, M.COMPLEMENTOHISTORICO from MOVTOCAIXA M

         left join CENTROCUSTO C
           on C.IDCENTROCUSTO = M.IDCENTROCUSTO

         where M.IDFILIAL = :IDFILIAL
           and M.IDCAIXA = :IDCAIXA
           and M.DTMOVIMENTO between :DTINI and :DTFIM
           and M.IDCENTROCUSTO between :IDCENTROCUSTOINI and :IDCENTROCUSTOFIM
          order by M.DTMOVIMENTO, M.TIPOOPERACAO, M.DOCUMENTO
          into :DOCUMENTO, :IDMOVTOCAIXA, :HISTORICO, :TIPOOPERACAO, :DTMOVIMENTO, :DTEMISSAO, :vVALORMOVTO, :COMPENSADO, :CENTROCUSTO,
               :VCOMPLEMENTO
        do
         begin
           if (:VCOMPLEMENTO is null) then VCOMPLEMENTO = '';
           if (:HISTORICO is null) then HISTORICO = '';
           if (:CENTROCUSTO is null) then CENTROCUSTO = '';

           HISTORICO = :CENTROCUSTO || ' ' || VCOMPLEMENTO || ' ' || :HISTORICO;

           if (TIPOOPERACAO = 'C') then begin
              VALORCREDITO = vVALORMOVTO;
              VALORDEBITO = 0; end
           else begin
              VALORDEBITO = vVALORMOVTO;
              VALORCREDITO = 0;
           end
    
           if (:COMPENSADO <> '*') then begin
               if (TIPOOPERACAO = 'C') then
                  SALDOANTERIOR = :SALDOANTERIOR+:VVALORMOVTO;
               else
                  SALDOANTERIOR = :SALDOANTERIOR-:VVALORMOVTO;
           end

           suspend;
         end
    end
    else begin

       for select COLLATEBR(M.DOCUMENTO),M.IDMOVTOCAIXA, COLLATEBR(M.DESCRICAOHISTORICO), M.TIPOOPERACAO, M.DTMOVIMENTO, M.DTEMISSAO, M.VALORMOVTO,
                  M.COMPENSADO, C.DESCRICAO, M.COMPLEMENTOHISTORICO from MOVTOCAIXA M

         left join CENTROCUSTO C
           on C.IDCENTROCUSTO = M.IDCENTROCUSTO

         where M.IDFILIAL = :IDFILIAL
           and M.IDCAIXA = :IDCAIXA
           and M.DTMOVIMENTO between :DTINI and :DTFIM
           and M.IDCENTROCUSTO between :IDCENTROCUSTOINI and :IDCENTROCUSTOFIM
          order by M.DTMOVIMENTO, M.IDMOVTOCAIXA
          into :DOCUMENTO, :IDMOVTOCAIXA, :HISTORICO, :TIPOOPERACAO, :DTMOVIMENTO, :DTEMISSAO, :vVALORMOVTO, :COMPENSADO, :CENTROCUSTO,
               :VCOMPLEMENTO
        do
         begin
           if (:VCOMPLEMENTO is null) then VCOMPLEMENTO = '';
           if (:HISTORICO is null) then HISTORICO = '';
           if (:CENTROCUSTO is null) then CENTROCUSTO = '';

           HISTORICO = :CENTROCUSTO || ' ' || VCOMPLEMENTO || ' ' || :HISTORICO;

           if (TIPOOPERACAO = 'C') then begin
              VALORCREDITO = vVALORMOVTO;
              VALORDEBITO = 0; end
           else begin
              VALORDEBITO = vVALORMOVTO;
              VALORCREDITO = 0;
           end
    
           if (:COMPENSADO <> '*') then begin
               if (TIPOOPERACAO = 'C') then
                  SALDOANTERIOR = :SALDOANTERIOR+:VVALORMOVTO;
               else
                  SALDOANTERIOR = :SALDOANTERIOR-:VVALORMOVTO;
           end

           suspend;
         end
    end
end^


ALTER PROCEDURE REL_MOVIMENTO_FUNCIONARIO (
    IDFILIAL INTEGER,
    IDFUNCIONARIO INTEGER,
    DTINI DATE,
    DTFIM DATE)
RETURNS (
    IDCONTROLE INTEGER,
    HISTORICO VARCHAR(60),
    DTMOVIMENTO DATE,
    VALORDEBITO NUMERIC(16,2),
    VALORCREDITO NUMERIC(16,2),
    SALDOANTERIOR NUMERIC(16,2))
AS
declare variable VTOTALCREANT numeric(16,2);
declare variable VTOTALDEBANT numeric(16,2);
declare variable VTIPOOPERACAO char(1);
declare variable VVALORMOVTO numeric(16,2);
declare variable VTIPOCOMISSAO char(1);
declare variable VIDREPRESENTANTE integer;
begin
   select M.IDREPRESENTANTE, R.TIPOCOMISSAO from FUNCIONARIO M

      join REPRESENTANTE R
        on R.IDREPRESENTANTE = M.IDREPRESENTANTE

    where M.IDFILIAL = :IDFILIAL
      and M.IDFUNCIONARIO = :IDFUNCIONARIO
      into :VIDREPRESENTANTE, :VTIPOCOMISSAO;

   select sum(M.VALOR) from MOVTOFUNCIONARIO M
    where M.IDFILIAL = :IDFILIAL
      and M.IDFUNCIONARIO = :IDFUNCIONARIO
      and M.TIPOOPERACAO = 'C'
      and M.DTMOVIMENTO < :DTINI into vTOTALCREANT;

   select sum(M.VALOR) from MOVTOFUNCIONARIO M
    where M.IDFILIAL = :IDFILIAL
      and M.IDFUNCIONARIO = :IDFUNCIONARIO
      and M.TIPOOPERACAO = 'D'
      and M.DTMOVIMENTO < :DTINI into vTOTALDEBANT;

   if (SALDOANTERIOR is null) then SALDOANTERIOR = 0;
   if (vTOTALDEBANT is null) then vTOTALDEBANT = 0;
   if (vTOTALCREANT is null) then vTOTALCREANT = 0;
   SALDOANTERIOR =(vTOTALCREANT-vTOTALDEBANT);
   HISTORICO = 'SALDO ANTERIOR ===========>';
   suspend;

   for select M.IDCONTROLE, COLLATEBR(M.HISTORICO), M.TIPOOPERACAO, M.DTMOVIMENTO, M.VALOR from MOVTOFUNCIONARIO M

     where M.IDFILIAL = :IDFILIAL
       and M.IDFUNCIONARIO = :IDFUNCIONARIO
       and M.DTMOVIMENTO between :DTINI and :DTFIM
       order by M.TIPOOPERACAO, M.DTMOVIMENTO
          into :IDCONTROLE, :HISTORICO, :vTIPOOPERACAO, :DTMOVIMENTO, :vVALORMOVTO
    do
     begin
       if (vTIPOOPERACAO = 'C') then begin
          VALORCREDITO = vVALORMOVTO;
          VALORDEBITO = 0; end
       else begin
          VALORDEBITO = vVALORMOVTO;
          VALORCREDITO = 0;
       end
       if (vTIPOOPERACAO = 'C') then
          SALDOANTERIOR = SALDOANTERIOR+vVALORMOVTO;
       else
          SALDOANTERIOR = SALDOANTERIOR-vVALORMOVTO;
       suspend;
     end
end^


ALTER PROCEDURE REL_MOVTO_PRODUTOS (
    IDFILIAL INTEGER,
    DTPEDIDOINI DATE,
    DTPEDIDOFIM DATE,
    IDREPREINI SMALLINT,
    IDREPREFIM SMALLINT,
    IDCLIENTEINI INTEGER,
    IDCLIENTEFIM INTEGER,
    IDGRUPOINI INTEGER,
    IDGRUPOFIM INTEGER,
    IDFORNECEDORINI INTEGER,
    IDFORNECEDORFIM INTEGER,
    TIPOVENDA VARCHAR(1))
RETURNS (
    IDPRODUTO INTEGER,
    ESPECIFICACAO VARCHAR(60),
    FATORCONVERSAO INTEGER,
    QTDEPEDIDO NUMERIC(14,3),
    TOTALPEDIDO NUMERIC(15,2),
    QTDEDEVOLUCAO NUMERIC(14,3),
    TOTALDEVOLUCAO NUMERIC(15,2),
    QTDEBONIFICACAO NUMERIC(14,3),
    TOTALBONIFICACAO NUMERIC(15,2),
    QTDETROCA NUMERIC(14,3),
    TOTALTROCA NUMERIC(15,2))
AS
begin
  for select P.IDPRODUTO, P.ESPECIFICACAO, P.FATORCONVERSAO from PRODUTO P
     where P.IDFILIAL = :IDFILIAL
       and P.IDGRUPO between :IDGRUPOINI and :IDGRUPOFIM
       and P.EXCLUIDO is null
       and P.IDFORNECEDOR between :IDFORNECEDORINI and :IDFORNECEDORFIM
       into :IDPRODUTO, :ESPECIFICACAO, :FATORCONVERSAO
  do
    begin
      if ((TIPOVENDA = 'V') or (TIPOVENDA = '*')) then begin
          select sum(distinct IT.QTDEPEDIDO*IT.FATORCONVERSAO),
                 sum(IT.PRECOVENDA*IT.QTDEPEDIDO) from ITENSPEDIDO IT
              left join PEDIDO PE
               on PE.IDPEDIDO = IT.IDPEDIDO
              and PE.IDFOLHA = IT.IDFOLHA
              and PE.IDFILIAL = :IDFILIAL
    
             where IT.IDFILIAL = :IDFILIAL
               and IT.IDPRODUTO = :IDPRODUTO
               and IT.TROCA = 'N'
               and PE.SITUACAOPEDIDO = 'V'
               and PE.IDCLIENTE between :IDCLIENTEINI and :IDCLIENTEFIM
               and PE.IDREPRESENTANTE between :IDREPREINI and :IDREPREFIM
               and PE.DATAPEDIDO between :DTPEDIDOINI and :DTPEDIDOFIM
               into :QTDEPEDIDO, :TOTALPEDIDO;
      end

      if ((TIPOVENDA = 'D') or (TIPOVENDA = '*')) then begin
          select sum(distinct IT.QTDEPEDIDO*IT.FATORCONVERSAO),
                 sum(IT.PRECOVENDA*IT.QTDEPEDIDO)  from ITENSDEVOLUCAO IT
              left join DEVOLUCAO D
               on D.IDPEDIDO = IT.IDPEDIDO
              and D.IDFOLHA = IT.IDFOLHA
              and D.IDFILIAL = :IDFILIAL
    
             where IT.IDFILIAL = :IDFILIAL
               and IT.IDPRODUTO = :IDPRODUTO
               and IT.TROCA = 'N'
               and D.IDREPRESENTANTE between :IDREPREINI and :IDREPREFIM
               and D.IDCLIENTE between :IDCLIENTEINI and :IDCLIENTEFIM
               and D.DATAPEDIDO between :DTPEDIDOINI and :DTPEDIDOFIM
               into :QTDEDEVOLUCAO, :TOTALDEVOLUCAO;
      end

      if ((TIPOVENDA = 'B') or (TIPOVENDA = '*')) then begin
          select sum(distinct IT.QTDEPEDIDO*IT.FATORCONVERSAO),
                 sum(IT.PRECOVENDA*IT.QTDEPEDIDO) from ITENSPEDIDO IT
              left join PEDIDO PE
               on PE.IDPEDIDO = IT.IDPEDIDO
              and PE.IDFOLHA = IT.IDFOLHA
              and PE.IDFILIAL = :IDFILIAL
    
             where IT.IDFILIAL = :IDFILIAL
               and IT.IDPRODUTO = :IDPRODUTO
               and (PE.SITUACAOPEDIDO = 'B' or IT.TROCA = 'S')
               and PE.IDCLIENTE between :IDCLIENTEINI and :IDCLIENTEFIM
               and PE.IDREPRESENTANTE between :IDREPREINI and :IDREPREFIM
               and PE.DATAPEDIDO between :DTPEDIDOINI and :DTPEDIDOFIM
               and not (exists(select D.IDPEDIDO from DEVOLUCAO D
                                   join ITENSDEVOLUCAO ID
                                     on ID.IDFILIAL = :IDFILIAL
                                    and ID.IDPEDIDO = PE.IDPEDIDO
                                    and ID.IDFOLHA = PE.IDFOLHA
                                    and ID.IDPRODUTO = :IDPRODUTO
                                where D.IDFILIAL = :IDFILIAL
                                  and D.IDPEDIDO = PE.IDPEDIDO
                                  and (D.SITUACAOPEDIDO = 'B' or ID.TROCA = 'S')
                                  and D.IDFOLHA = PE.IDFOLHA))
               into :QTDEBONIFICACAO, :TOTALBONIFICACAO;
      end

      if ((TIPOVENDA = 'T') or (TIPOVENDA = '*')) then begin
          select sum(distinct IT.QTDEPEDIDO*IT.FATORCONVERSAO),
                 sum(IT.PRECOVENDA*IT.QTDEPEDIDO) from ITENSPEDIDO IT
              left join PEDIDO PE
               on PE.IDPEDIDO = IT.IDPEDIDO
              and PE.IDFOLHA = IT.IDFOLHA
              and PE.IDFILIAL = :IDFILIAL
    
             where IT.IDFILIAL = :IDFILIAL
               and IT.IDPRODUTO = :IDPRODUTO
               and PE.SITUACAOPEDIDO = 'T'
               and PE.IDCLIENTE between :IDCLIENTEINI and :IDCLIENTEFIM
               and PE.IDREPRESENTANTE between :IDREPREINI and :IDREPREFIM
               and PE.DATAPEDIDO between :DTPEDIDOINI and :DTPEDIDOFIM
               and not (exists(select D.IDPEDIDO from DEVOLUCAO D
                                where D.IDFILIAL = :IDFILIAL
                                  and D.IDPEDIDO = PE.IDPEDIDO
                                  and D.SITUACAOPEDIDO = 'T'
                                  and D.IDFOLHA = PE.IDFOLHA))
               into :QTDETROCA, :TOTALTROCA;
      end

      suspend;
    end
end^


ALTER PROCEDURE REL_NF_EMI_REPRES (
    IDFILIAL INTEGER,
    DTINI DATE,
    DTFIM DATE)
RETURNS (
    IDREPRESENTANTE INTEGER,
    NOME VARCHAR(40),
    QTDE_NFS INTEGER,
    MEDIA_ITENS INTEGER)
AS
begin
  for select N.IDREPRESENTANTE, R.NOME, count(*) from NOTA N
      join REPRESENTANTE R
        on R.IDFILIAL = :IDFILIAL
       and R.IDREPRESENTANTE = N.IDREPRESENTANTE
    where N.IDFILIAL = :IDFILIAL
      and N.DATANOTA between :DTINI and :DTFIM
    group by N.IDREPRESENTANTE, R.NOME
    into :IDREPRESENTANTE, :NOME, :QTDE_NFS
  do begin
    select count(IT.IDPRODUTO) from NOTA N
       left join ITENSNOTA IT
         on IT.IDFILIAL = :IDFILIAL
        and IT.IDNOTA = N.IDNOTA

       where N.IDFILIAL = :IDFILIAL
         and N.DATANOTA between :DTINI and :DTFIM
         and N.IDREPRESENTANTE = :IDREPRESENTANTE
       into :MEDIA_ITENS;
      if (MEDIA_ITENS is null) then MEDIA_ITENS = 0;
      if (QTDE_NFS is null) then QTDE_NFS = 0;
      suspend;
  end
end^


ALTER PROCEDURE REL_ORCAMENTOPRODUTO_PDV (
    IDFILIAL SMALLINT,
    DATAINI DATE,
    DATAFIM DATE,
    IDFORINI INTEGER,
    IDFORFIM INTEGER,
    IDGRUPOINI SMALLINT,
    IDGRUPOFIM SMALLINT,
    IDSUB_GRUPOINI SMALLINT,
    IDSUB_GRUPOFIM SMALLINT,
    IDCLIENTEINI INTEGER,
    IDCLIENTEFIM INTEGER)
RETURNS (
    IDPRODUTO INTEGER,
    NOMEPRODUTO VARCHAR(60) CHARACTER SET NONE,
    PRECOVENDA NUMERIC(10,2),
    QTDEVENDIDA NUMERIC(10,2),
    FATORCONVERSAO INTEGER,
    IDREPRESENTANTE SMALLINT,
    IDGRUPO SMALLINT,
    NOMEGRUPO VARCHAR(25),
    IDSUB_GRUPO SMALLINT,
    NOMESUB_GRUPO VARCHAR(30),
    IDFORNECEDOR SMALLINT,
    NOMEFORNECEDOR VARCHAR(60),
    UNIDADE NUMERIC(15,2))
AS
declare variable VDEV_QTDEPEDIDO numeric(10,3);
declare variable VDEV_PRECOVENDA NUMERIC(10,2);
declare variable VTROCAINI varchar(1);
declare variable VTROCAFIM varchar(1);
begin
    for select IT.IDPRODUTO,COLLATEBR(P.ESPECIFICACAO),sum(IT.PRECOVENDA*IT.QTDEPEDIDO),sum(IT.QTDEPEDIDO*IT.FATORCONVERSAO),P.FATORCONVERSAO,
              PE.IDREPRESENTANTE, P.IDGRUPO, COLLATEBR(G.NOME), P.IDSUB_GRUPO, COLLATEBR(S.DESCRICAO), P.IDFORNECEDOR, F.NOME, sum((IT.QTDEPEDIDO*IT.FATORCONVERSAO)/P.FATORCONVERSAO)
       from ITENSORCAMENTO_PDV IT
    
            right join ORCAMENTO_PDV PE
              on  PE.IDPEDIDO = IT.IDPEDIDO
              and PE.IDFOLHA = IT.IDFOLHA
              and PE.IDFILIAL = :IDFILIAL
    
            left join PRODUTO P
               on P.IDPRODUTO = IT.IDPRODUTO
              and P.IDFILIAL = IT.IDFILIAL
    
            left join FORNECEDOR F
               on F.IDFORNECEDOR = P.IDFORNECEDOR
    
            join GRUPO G
              on G.IDGRUPO = P.IDGRUPO
    
            left join SUB_GRUPO S
              on S.IDSUB_GRUPO = P.IDSUB_GRUPO
    
            where IT.IDFILIAL = :IDFILIAL
              and not PE.TIPO_PVD is null
              and PE.IDCLIENTE between :IDCLIENTEINI and :IDCLIENTEFIM
              and P.IDGRUPO between :IDGRUPOINI and :IDGRUPOFIM
              and P.IDFORNECEDOR between :IDFORINI and :IDFORFIM
              and P.IDSUB_GRUPO between :IDSUB_GRUPOINI and :IDSUB_GRUPOFIM
              and PE.DATAPEDIDO between :DATAINI and :DATAFIM
               group by IT.IDPRODUTO, COLLATEBR(P.ESPECIFICACAO), P.FATORCONVERSAO, PE.IDREPRESENTANTE, P.IDGRUPO, COLLATEBR(G.NOME), P.IDSUB_GRUPO, COLLATEBR(S.DESCRICAO), P.IDFORNECEDOR, F.NOME
               order by IT.IDPRODUTO
               into :IDPRODUTO, :NOMEPRODUTO,:PRECOVENDA, :QTDEVENDIDA, :FATORCONVERSAO,
                    :IDREPRESENTANTE, :IDGRUPO, :NOMEGRUPO, :IDSUB_GRUPO, :NOMESUB_GRUPO, :IDFORNECEDOR, :NOMEFORNECEDOR, :unidade
     do
       begin

        if (:vDEV_QTDEPEDIDO is null) then vDEV_QTDEPEDIDO = 0;
        if (:vDEV_PRECOVENDA is null) then vDEV_PRECOVENDA = 0;
        QTDEVENDIDA = :QTDEVENDIDA-:vDEV_QTDEPEDIDO;
        PRECOVENDA = :PRECOVENDA-:vDEV_PRECOVENDA;
    
         if ((QTDEVENDIDA <> 0) and
            (PRECOVENDA <> 0)) then begin
           suspend;
         end
       end
end^


ALTER PROCEDURE REL_POSICAO_CLIENTE_FORN (
    IDFILIAL INTEGER,
    DTINI DATE,
    DTFIM DATE,
    IDFORNECEDORINI INTEGER,
    IDFORNECEDORFIM INTEGER,
    IDCIDADEINI SMALLINT,
    IDCIDADEFIM SMALLINT)
RETURNS (
    IDCLIENTE INTEGER,
    NOMECLIENTE VARCHAR(80),
    CNPJ VARCHAR(18),
    ENDERECO VARCHAR(45),
    CIDADE VARCHAR(35),
    QTDEVENDIDA NUMERIC(10,2),
    VALORVENDIDO NUMERIC(10,2))
AS
declare variable VDEV_QTDEPEDIDO numeric(10,2);
declare variable VDEV_PRECOVENDA numeric(10,2);
begin
  for select P.IDCLIENTE, COLLATEBR(C.NOME), C.CNPJ, COLLATEBR(C.ENDERECO), COLLATEBR(CI.NOME),
             sum( ((IT.QTDEPEDIDO*IT.FATORCONVERSAO)/U.FATORCONVERSAO) ), sum(IT.QTDEPEDIDO*IT.PRECOVENDA)  from ITENSPEDIDO IT
    right join PEDIDO P
       on P.IDFILIAL = :IDFILIAL
      and P.IDPEDIDO = IT.IDPEDIDO
      and P.IDFOLHA = IT.IDFOLHA

    join CLIENTE C
      on C.IDCLIENTE = P.IDCLIENTE

    left join PRODUTO PR
      on PR.IDFILIAL = :IDFILIAL
     and PR.IDPRODUTO = IT.IDPRODUTO

    left join UNIDADEMEDIDA U
      on U.IDFILIAL = :IDFILIAL
     and U.IDUNIDADEMEDIDA = PR.IDUNIDADEMEDIDA

    join CIDADE CI
      on CI.IDCIDADE = C.IDCIDADE

    where IT.IDFILIAL = :IDFILIAL
      and IT.TROCA = 'N'
      and C.IDCIDADE between :IDCIDADEINI and :IDCIDADEFIM
      and P.SITUACAOPEDIDO = 'V'
      and P.DATAPEDIDO between :DTINI and :DTFIM
      and PR.IDFORNECEDOR between :IDFORNECEDORINI and :IDFORNECEDORFIM
    group by P.IDCLIENTE, COLLATEBR(C.NOME), C.CNPJ, COLLATEBR(C.ENDERECO), COLLATEBR(CI.NOME)
    into :IDCLIENTE, :NOMECLIENTE, :CNPJ, :ENDERECO, :CIDADE, :QTDEVENDIDA, :VALORVENDIDO
  do
    begin
         vDEV_QTDEPEDIDO = 0;
         vDEV_PRECOVENDA = 0;

         select sum( ((IT.QTDEPEDIDO*IT.FATORCONVERSAO)/U.FATORCONVERSAO) ),
                sum(IT.PRECOVENDA*IT.QTDEPEDIDO) from ITENSDEVOLUCAO IT

             right join DEVOLUCAO D
               on D.IDFILIAL = :IDFILIAL
              and D.IDPEDIDO = IT.IDPEDIDO
              and D.IDFOLHA = IT.IDFOLHA

            left join PRODUTO P
              on  P.IDPRODUTO = IT.IDPRODUTO
              and P.IDFILIAL = IT.IDFILIAL

            left join UNIDADEMEDIDA U
              on U.IDFILIAL = :IDFILIAL
             and U.IDUNIDADEMEDIDA = P.IDUNIDADEMEDIDA

             where IT.IDFILIAL = :IDFILIAL
               and D.IDCLIENTE = :IDCLIENTE
               and IT.TROCA = 'N'
               and D.SITUACAOPEDIDO = 'V'
               and D.DATAPEDIDO between :DTINI and :DTFIM
               and P.IDFORNECEDOR between :IDFORNECEDORINI and :IDFORNECEDORFIM
         into :vDEV_QTDEPEDIDO, :vDEV_PRECOVENDA;

         if (:vDEV_QTDEPEDIDO is null) then vDEV_QTDEPEDIDO = 0;
         if (:vDEV_PRECOVENDA is null) then vDEV_PRECOVENDA = 0;

         QTDEVENDIDA = (:QTDEVENDIDA-:vDEV_QTDEPEDIDO);
         VALORVENDIDO = (:VALORVENDIDO-:vDEV_PRECOVENDA);

      suspend;
    end
end^


ALTER PROCEDURE REL_POSICAO_EST_FORNECEDOR (
    IDFILIAL INTEGER,
    DTINI DATE,
    DTFIM DATE,
    IDGRUPOINI SMALLINT,
    IDGRUPOFIM SMALLINT,
    IDFORNECEDORINI INTEGER,
    IDFORNECEDORFIM INTEGER)
RETURNS (
    IDPRODUTO INTEGER,
    NOMEPRODUTO VARCHAR(60),
    IDGRUPO SMALLINT,
    NOMEGRUPO VARCHAR(25),
    IDFORNECEDOR INTEGER,
    NOMEFORNECEDOR VARCHAR(60),
    FATORCONVERSAO INTEGER,
    PRECOVENDAUNIT NUMERIC(16,4),
    CUSTONOTAUNIT NUMERIC(16,4),
    QTDEVENDIDA NUMERIC(10,3),
    CUSTO_VENDIDO NUMERIC(14,2),
    VENDA_VENDIDA NUMERIC(14,2),
    PERCENTUAL_VENDIDO NUMERIC(10,2),
    QTDEESTOQUE NUMERIC(10,3),
    CUSTO_ESTOQUE NUMERIC(14,2),
    VENDA_ESTOQUE NUMERIC(14,2),
    PERCENTUAL_ESTOQUE NUMERIC(10,3))
AS
declare variable VQTDE_DEVOLVIDA numeric(10,3);
begin
   CUSTO_VENDIDO = 0;
   VENDA_VENDIDA = 0;
   PERCENTUAL_VENDIDO = 0;

   for select IT.IDPRODUTO, PR.ESPECIFICACAO, PR.IDGRUPO, G.NOME, PR.IDFORNECEDOR, F.NOME, PR.FATORCONVERSAO,
              PR.PRECOVENDAUNIT, PR.CUSTONOTAUNIT, PR.QTDEATUAL,
              sum(IT.QTDEPEDIDO*IT.FATORCONVERSAO)
               from ITENSPEDIDO IT
       left join PEDIDO PE
         on PE.IDFILIAL = :IDFILIAL
        and PE.IDPEDIDO = IT.IDPEDIDO
        and PE.IDFOLHA = IT.IDFOLHA

      left join PRODUTO PR
         on PR.IDFILIAL = :IDFILIAL
        and PR.IDPRODUTO = IT.IDPRODUTO

      left join GRUPO G
         on G.IDGRUPO = PR.IDGRUPO

      left join FORNECEDOR F
         on F.IDFORNECEDOR = PR.IDFORNECEDOR

      where IT.IDFILIAL = :IDFILIAL
        and PE.DATAPEDIDO between :DTINI and :DTFIM
        and PR.IDGRUPO between :IDGRUPOINI and :IDGRUPOFIM
        and PR.IDFORNECEDOR between :IDFORNECEDORINI and :IDFORNECEDORFIM
      group by IT.IDPRODUTO, PR.ESPECIFICACAO, PR.IDGRUPO, G.NOME, PR.IDFORNECEDOR, F.NOME, PR.FATORCONVERSAO,
               PR.PRECOVENDAUNIT, PR.CUSTONOTAUNIT, PR.QTDEATUAL
      into :IDPRODUTO, :NOMEPRODUTO, :IDGRUPO, :NOMEGRUPO, :IDFORNECEDOR, :NOMEFORNECEDOR, :FATORCONVERSAO,
           :PRECOVENDAUNIT, :CUSTONOTAUNIT,:QTDEESTOQUE, :QTDEVENDIDA
   do begin

     -- O QUE TEM NO ESTOQUE
     CUSTO_ESTOQUE = 0;
     VENDA_ESTOQUE = 0;
     PERCENTUAL_ESTOQUE = 0;

     CUSTO_ESTOQUE = (CUSTONOTAUNIT*QTDEESTOQUE);
     VENDA_ESTOQUE = (PRECOVENDAUNIT*QTDEESTOQUE);
     if (VENDA_ESTOQUE <> 0) then
         PERCENTUAL_ESTOQUE = ((VENDA_ESTOQUE/CUSTO_ESTOQUE)-1)*100;
     else
         PERCENTUAL_ESTOQUE = 0;



     -- DEVOLUCAO
     select sum(IT.QTDEPEDIDO*IT.FATORCONVERSAO) from ITENSDEVOLUCAO IT
      join DEVOLUCAO D
         on D.IDFILIAL = :IDFILIAL
        and D.IDPEDIDO = IT.IDPEDIDO
        and D.IDFOLHA = IT.IDFOLHA

      left join PRODUTO PR
         on PR.IDFILIAL = :IDFILIAL
        and PR.IDPRODUTO = IT.IDPRODUTO

      where IT.IDFILIAL = :IDFILIAL
        and D.DATAPEDIDO between :DTINI and :DTFIM
        and IT.IDPRODUTO = :IDPRODUTO
     into :VQTDE_DEVOLVIDA;

     if (VQTDE_DEVOLVIDA is null) then VQTDE_DEVOLVIDA = 0;


     -- O QUE FOI VENDIDO
     CUSTO_VENDIDO = 0;
     VENDA_VENDIDA = 0;
     PERCENTUAL_VENDIDO = 0;

     CUSTO_VENDIDO = (CUSTONOTAUNIT*(QTDEVENDIDA-:VQTDE_DEVOLVIDA));
     VENDA_VENDIDA = (PRECOVENDAUNIT*(QTDEVENDIDA-:VQTDE_DEVOLVIDA));
     if (VENDA_VENDIDA <> 0) then
         PERCENTUAL_VENDIDO = ((VENDA_VENDIDA/CUSTO_VENDIDO)-1)*100;
     else
         PERCENTUAL_VENDIDO = 0;


     suspend;
   end
end^


ALTER PROCEDURE REL_POSICAO_FINANCEIRA (
    IDFILIAL INTEGER)
RETURNS (
    DESCRICAO VARCHAR(20) CHARACTER SET NONE,
    VALOR NUMERIC(16,2),
    TIPO VARCHAR(3) CHARACTER SET NONE)
AS
DECLARE VARIABLE VVALORTMP NUMERIC(16,2);
begin
   vValorTmp = 0;
   for select 'Estoque: ', sum(P.QTDEATUAL*ROUND_DEC(P.PRECOVENDAUNIT,2)),'+' from PRODUTO P
       where P.IDFILIAL = :IDFILIAL
         and P.SITUACAOPRODUTO = 'A'
         into :DESCRICAO, :VALOR, :TIPO
   do
     suspend;
     if (VALOR is null) then VALOR = 0;
   vValorTmp = vValorTmp+:VALOR;
       
   for select 'Contas Receber: ', sum(R.VALORDOCUMENTO), '+' from RECEBER R
       where R.IDFILIAL = :IDFILIAL
         and R.VALORPAGAMENTO is null
         and R.VALORDOCUMENTO <> 0.00
         into :DESCRICAO, :VALOR, :TIPO
   do
     suspend;
     if (VALOR is null) then VALOR = 0;
   vValorTmp = vValorTmp+VALOR;
   
   for select 'Banco: ', sum(if_sn(M.TIPOOPERACAO,'=','C',M.VALORMOVTO,M.VALORMOVTO*-1)), '+/-' from MOVTOCAIXA M
       join CAIXA C
         on C.IDFILIAL = :IDFILIAL
        and C.IDCAIXA  = M.IDCAIXA
       where M.IDFILIAL = :IDFILIAL
         and C.TIPOCONTA = 'B'
         into :DESCRICAO, :VALOR,:TIPO
   do
     suspend;
     if (VALOR is null) then VALOR = 0;
   vValorTmp = vValorTmp+VALOR;
   
   for select 'Caixa: ', sum(if_sn(M.TIPOOPERACAO,'=','C',M.VALORMOVTO,M.VALORMOVTO*-1)), '+/-' from MOVTOCAIXA M
       join CAIXA C
         on C.IDFILIAL = :IDFILIAL
        and C.IDCAIXA  = M.IDCAIXA
       where M.IDFILIAL = :IDFILIAL
         and C.TIPOCONTA = 'C'
         into :DESCRICAO, :VALOR, :TIPO
   do
     suspend;
     if (VALOR is null) then VALOR = 0;
   vValorTmp = vValorTmp+VALOR;
   
   for select 'Contas Pagar: ', sum(P.VALORDOCUMENTO), '-' from PAGAR P
       where P.IDFILIAL = :IDFILIAL
         and P.VALORPAGAMENTO is null
         and P.VALORDOCUMENTO <> 0.00
         into :DESCRICAO, :VALOR, :TIPO
   do
     suspend;
     if (VALOR is null) then VALOR = 0;
   vValorTmp = vValorTmp-VALOR;
   
   for select 'Cheque: ', sum(C.VALORCHEQUE),'+' from CHEQUES C
       where C.IDFILIAL = :IDFILIAL
         into :DESCRICAO, :VALOR, :TIPO
   do
     suspend;
     if (VALOR is null) then VALOR = 0;
   vValorTmp = vValorTmp+VALOR;

   DESCRICAO = 'Total =============>';
   VALOR = vValorTmp;
   suspend;
end^


ALTER PROCEDURE REL_POSICAO_VENDA_REPRE (
    IDFILIAL SMALLINT,
    DTINI DATE,
    DTFIM DATE,
    IDREPINI SMALLINT,
    IDREPFIM SMALLINT,
    IDGRUPOINI SMALLINT,
    IDGRUPOFIM SMALLINT,
    IDFORNECEDORINI SMALLINT,
    IDFORNECEDORFIM SMALLINT,
    DIASUTEIS SMALLINT,
    IDSUB_GRUPOINI SMALLINT,
    IDSUB_GRUPOFIM SMALLINT,
    IDDIVISAOINI SMALLINT,
    IDDIVISAOFIM SMALLINT,
    IDCIDADEINI SMALLINT,
    IDCIDADEFIM SMALLINT,
    SITINI VARCHAR(1),
    SITFIM VARCHAR(1),
    IDATIVIDADEINI INTEGER,
    IDATIVIDADEFIM INTEGER,
    IDSUB_ATIVIDADEINI INTEGER,
    IDSUB_ATIVIDADEFIM INTEGER)
RETURNS (
    IDREPRESENTANTE INTEGER,
    NOMEREPRESENTANTE VARCHAR(45) CHARACTER SET NONE,
    QTDECLIENTE NUMERIC(10,2),
    QTDEVISITADOS NUMERIC(10,2),
    POR_CLIENTE NUMERIC(10,2),
    TOTALPEDIDO NUMERIC(16,2),
    QTDEPEDIDO NUMERIC(10,2),
    DIAS INTEGER,
    QTDEPEDIDO_DIAS NUMERIC(10,2),
    VALORMEDIO NUMERIC(16,2),
    VENDAS_DIAS NUMERIC(16,2),
    CPF VARCHAR(14))
AS
begin
  DIAS = :DIASUTEIS;
  for select R.IDREPRESENTANTE, COLLATEBR(R.NOME), R.CPF_SUPERVISOR,
             -- Qtde de Clientes Por Represetante
             (select count(RC.IDCLIENTE) from REPCLIENTE RC

                 left join CLIENTE C
                   on C.IDCLIENTE = RC.IDCLIENTE

                 where C.SITUACAOCREDITO <> 'C'
                   and C.EXCLUIDO is null
                   and C.IDCIDADE between :IDCIDADEINI and :IDCIDADEFIM
                   and RC.IDREPRESENTANTE = R.IDREPRESENTANTE),
             -- Qtde Positivados
             (select count(distinct P.IDCLIENTE) from PEDIDO P
                 left join ITENSPEDIDO IT
                   on IT.IDFILIAL = :IDFILIAL
                  and IT.IDPEDIDO = P.IDPEDIDO
                  and IT.IDFOLHA = P.IDFOLHA

                 left join PRODUTO PR
                   on PR.IDFILIAL = :IDFILIAL
                  and PR.IDPRODUTO = IT.IDPRODUTO

                 left join FORNECEDOR F
                    on F.IDFORNECEDOR = PR.IDFORNECEDOR

                 join CLIENTE C
                   on C.IDCLIENTE = P.IDCLIENTE

                 where P.IDFILIAL = :IDFILIAL
                   and PR.IDGRUPO between :IDGRUPOINI and :IDGRUPOFIM
                   and P.SITUACAOPEDIDO between :SITINI and :SITFIM
  --                 and PR.IDSUB_GRUPO between :IDSUB_GRUPOINI and :IDSUB_GRUPOFIM
--                   and F.IDDIVISAO between :IDDIVISAOINI and :IDDIVISAOFIM
                   and C.IDCIDADE between :IDCIDADEINI and :IDCIDADEFIM
                   and PR.IDFORNECEDOR between :IDFORNECEDORINI and :IDFORNECEDORFIM
                   and P.SITUACAOPEDIDO = 'V'
                   and P.DATAPEDIDO between :DTINI and :DTFIM
                   and P.IDREPRESENTANTE = R.IDREPRESENTANTE
                   and C.EXCLUIDO is null
                   and C.SITUACAOCREDITO <> 'C'
                   and C.IDATIVIDADE between :IDATIVIDADEINI and :IDATIVIDADEFIM
--                   and C.IDSUB_ATIVIDADE between :IDSUB_ATIVIDADEINI and :IDSUB_ATIVIDADEFIM

                   and exists(select T.ID from TABELA_AUXILIAR T
                               where T.ID = IT.IDPRODUTO)) ,

             --Total do Pedido menos a Devolucao
             (select sum((IT.PRECOVENDA*IT.QTDEPEDIDO)-if_nn((ID.PRECOVENDA*ID.QTDEPEDIDO),'<>',0,(ID.PRECOVENDA*ID.QTDEPEDIDO),0)) from PEDIDO P
                 left join ITENSPEDIDO IT
                   on IT.IDFILIAL = :IDFILIAL
                  and IT.IDPEDIDO = P.IDPEDIDO
                  and IT.IDFOLHA = P.IDFOLHA

                 left join ITENSDEVOLUCAO ID
                   on ID.IDFILIAL = :IDFILIAL
                  and ID.IDPEDIDO = IT.IDPEDIDO
                  and ID.IDPRODUTO = IT.IDPRODUTO
                  and ID.IDFOLHA = IT.IDFOLHA
                  and ID.TROCA = 'N'

                 left join PRODUTO PR
                   on PR.IDFILIAL = :IDFILIAL
                  and PR.IDPRODUTO = IT.IDPRODUTO

                 left join FORNECEDOR F
                   on F.IDFORNECEDOR = PR.IDFORNECEDOR

                 join CLIENTE C
                   on C.IDCLIENTE = P.IDCLIENTE

                 where P.IDFILIAL = :IDFILIAL
                   and IT.TROCA = 'N'
--                   and PR.IDSUB_GRUPO between :IDSUB_GRUPOINI and :IDSUB_GRUPOFIM
                   and P.SITUACAOPEDIDO between :SITINI and :SITFIM
--                   and F.IDDIVISAO between :IDDIVISAOINI and :IDDIVISAOFIM
                   and PR.IDGRUPO between :IDGRUPOINI and :IDGRUPOFIM
                   and C.IDCIDADE between :IDCIDADEINI and :IDCIDADEFIM
                   and PR.IDFORNECEDOR between :IDFORNECEDORINI and :IDFORNECEDORFIM
                   and P.SITUACAOPEDIDO = 'V'
                   and P.DATAPEDIDO between :DTINI and :DTFIM
                   and C.EXCLUIDO is null
                   and C.SITUACAOCREDITO <> 'C'
                   and C.IDATIVIDADE between :IDATIVIDADEINI and :IDATIVIDADEFIM
--                   and C.IDSUB_ATIVIDADE between :IDSUB_ATIVIDADEINI and :IDSUB_ATIVIDADEFIM
                   and exists(select T.ID from TABELA_AUXILIAR T
                               where T.ID = IT.IDPRODUTO)

                   and P.IDREPRESENTANTE = R.IDREPRESENTANTE),


             -- Qtde Média de Pedidos Positivados Diariamente
             (select count(distinct P.IDPEDIDO) from PEDIDO P
                 left join ITENSPEDIDO IT
                   on IT.IDFILIAL = :IDFILIAL
                  and IT.IDPEDIDO = P.IDPEDIDO
                  and IT.IDFOLHA = P.IDFOLHA

                 left join PRODUTO PR
                   on PR.IDFILIAL = :IDFILIAL
                  and PR.IDPRODUTO = IT.IDPRODUTO

                 left join FORNECEDOR F
                    on F.IDFORNECEDOR = PR.IDFORNECEDOR

                 join CLIENTE C
                   on C.IDCLIENTE = P.IDCLIENTE

                 where P.IDFILIAL = :IDFILIAL
--                   and PR.IDSUB_GRUPO between :IDSUB_GRUPOINI and :IDSUB_GRUPOFIM
--                   and F.IDDIVISAO between :IDDIVISAOINI and :IDDIVISAOFIM
                   and P.SITUACAOPEDIDO between :SITINI and :SITFIM
                   and PR.IDGRUPO between :IDGRUPOINI and :IDGRUPOFIM
                   and C.IDCIDADE between :IDCIDADEINI and :IDCIDADEFIM
                   and PR.IDFORNECEDOR between :IDFORNECEDORINI and :IDFORNECEDORFIM
                   and P.SITUACAOPEDIDO = 'V'
                   and P.DATAPEDIDO between :DTINI and :DTFIM
                   and C.EXCLUIDO is null
                   and C.SITUACAOCREDITO <> 'C'
                   and C.IDATIVIDADE between :IDATIVIDADEINI and :IDATIVIDADEFIM
--                   and C.IDSUB_ATIVIDADE between :IDSUB_ATIVIDADEINI and :IDSUB_ATIVIDADEFIM
                   and exists(select T.ID from TABELA_AUXILIAR T
                               where T.ID = IT.IDPRODUTO)

                   and P.IDREPRESENTANTE = R.IDREPRESENTANTE) from REPRESENTANTE R


    where  R.IDREPRESENTANTE between :IDREPINI and :IDREPFIM

      into :IDREPRESENTANTE, :NOMEREPRESENTANTE, :CPF, :QTDECLIENTE, :QTDEVISITADOS, :TOTALPEDIDO,
           :QTDEPEDIDO
  do
    begin
       VALORMEDIO = TOTALPEDIDO/QTDEPEDIDO;
       QTDEPEDIDO_DIAS = QTDEPEDIDO/:DIAS;
       VENDAS_DIAS = TOTALPEDIDO/:DIAS;

      if ((:QTDEVISITADOS <> 0) and (:QTDECLIENTE <> 0)) then
        POR_CLIENTE = ((:QTDEVISITADOS/:QTDECLIENTE)*100);


      if (QTDECLIENTE is null) then QTDECLIENTE = 0;
      if (QTDEVISITADOS is null) then QTDEVISITADOS = 0;
      if (POR_CLIENTE is null) then POR_CLIENTE = 0;
      if (TOTALPEDIDO is null) then TOTALPEDIDO = 0;
      if (QTDEPEDIDO is null) then QTDEPEDIDO = 0;
      if (QTDEPEDIDO_DIAS is null) then QTDEPEDIDO_DIAS = 0;
      if (VALORMEDIO is null) then VALORMEDIO = 0;
      if (VENDAS_DIAS is null) then VENDAS_DIAS = 0;
      if (QTDEPEDIDO <> 0) then begin
         suspend;
      end

    end
end^


ALTER PROCEDURE REL_PRECO_NORMALPRATICADO (
    IDFILIAL INTEGER,
    DTINI DATE,
    DTFIM DATE,
    IDGRUPOINI INTEGER,
    IDGRUPOFIM INTEGER,
    IDREPINI INTEGER,
    IDREPFIM INTEGER,
    IDSUB_GRUPOINI SMALLINT,
    IDSUB_GRUPOFIM SMALLINT,
    IDPEDIDOINI INTEGER,
    IDPEDIDOFIM INTEGER,
    IDFOLHAINI INTEGER,
    IDFOLHAFIM INTEGER,
    IDCLIENTEINI INTEGER,
    IDCLIENTEFIM INTEGER)
RETURNS (
    IDGRUPO INTEGER,
    NOMEGRUPO VARCHAR(35),
    IDPRODUTO INTEGER,
    NOMEPRODUTO VARCHAR(60),
    QTDECAIXA NUMERIC(16,2),
    PRECOVENDA NUMERIC(16,2),
    PRECOTABELA NUMERIC(16,2),
    MARGEM NUMERIC(16,2),
    FATORCONVERSAO INTEGER,
    IDSUB_GRUPO SMALLINT,
    NOME_SUBGRUPO VARCHAR(30))
AS
declare variable VDEV_QTDEPEDIDO numeric(10,3);
declare variable VDEV_PRECOVENDA numeric(14,2);
declare variable VDEV_PRECOTABELA numeric(14,2);
begin
  for select IT.IDPRODUTO, COLLATEBR(P.ESPECIFICACAO), sum(IT.QTDEPEDIDO*IT.FATORCONVERSAO),
          sum(IT.QTDEPEDIDO*IT.PRECOVENDA), sum(IT.QTDEPEDIDO*IT.PRECOTABELA), P.FATORCONVERSAO,
          P.IDGRUPO, COLLATEBR(G.NOME), P.IDSUB_GRUPO, COLLATEBR(S.DESCRICAO)

           from ITENSPEDIDO IT

    right join PEDIDO PE
      on PE.IDPEDIDO = IT.IDPEDIDO
     and PE.IDFOLHA = IT.IDFOLHA
     and PE.IDFILIAL = :IDFILIAL

    left join PRODUTO P
      on P.IDPRODUTO = IT.IDPRODUTO
     and P.IDFILIAL = :IDFILIAL

    left join GRUPO G
      on G.IDGRUPO = P.IDGRUPO

    left join SUB_GRUPO S
      on S.IDSUB_GRUPO = P.IDSUB_GRUPO

   where IT.IDFILIAL = :IDFILIAL
     and IT.TROCA = 'N'
     and PE.DATAPEDIDO between :DTINI and :DTFIM
     and P.IDGRUPO between :IDGRUPOINI and :IDGRUPOFIM

     and PE.idpedido between :idpedidoini and :idpedidofim
     and PE.idfolha between :idfolhaini and :idfolhafim

     and P.IDSUB_GRUPO between :IDSUB_GRUPOINI and :IDSUB_GRUPOFIM
     and PE.IDREPRESENTANTE between :IDREPINI and :IDREPFIM
     and PE.IDCLIENTE between :IDCLIENTEINI and :IDCLIENTEFIM
     and PE.SITUACAOPEDIDO = 'V'
      group by IT.IDPRODUTO, COLLATEBR(P.ESPECIFICACAO), P.FATORCONVERSAO, P.IDGRUPO, COLLATEBR(G.NOME), P.IDSUB_GRUPO, COLLATEBR(S.DESCRICAO)
     into :IDPRODUTO, :NOMEPRODUTO, :QTDECAIXA, :PRECOVENDA, :PRECOTABELA, :FATORCONVERSAO, :IDGRUPO,
          :NOMEGRUPO, :IDSUB_GRUPO, :NOME_SUBGRUPO
  do
    begin
         select sum(IT.QTDEPEDIDO*IT.FATORCONVERSAO),
                sum(IT.PRECOVENDA*IT.QTDEPEDIDO),
                sum(IT.PRECOTABELA*IT.QTDEPEDIDO) from ITENSDEVOLUCAO IT

             right join DEVOLUCAO D
               on D.IDFILIAL = :IDFILIAL
              and D.IDPEDIDO = IT.IDPEDIDO
              and D.IDFOLHA = IT.IDFOLHA

            left join PRODUTO P
              on  P.IDPRODUTO = IT.IDPRODUTO
              and P.IDFILIAL = IT.IDFILIAL

           where IT.IDFILIAL = :IDFILIAL
             and IT.TROCA = 'N'
             and IT.IDPRODUTO = :IDPRODUTO
             and D.DATAPEDIDO between :DTINI and :DTFIM
             and P.IDGRUPO between :IDGRUPOINI and :IDGRUPOFIM

             and D.idpedido between :idpedidoini and :idpedidofim
             and D.idfolha between :idfolhaini and :idfolhafim

             and P.IDSUB_GRUPO between :IDSUB_GRUPOINI and :IDSUB_GRUPOFIM
             and D.IDREPRESENTANTE between :IDREPINI and :IDREPFIM
             and D.IDCLIENTE between :IDCLIENTEINI and :IDCLIENTEFIM
             and D.SITUACAOPEDIDO = 'V'
             into :vDEV_QTDEPEDIDO, :vDEV_PRECOVENDA, :vDEV_PRECOTABELA;

          if (:vDEV_QTDEPEDIDO is null) then vDEV_QTDEPEDIDO = 0;
          if (:vDEV_PRECOVENDA is null) then vDEV_PRECOVENDA = 0;
          if (:vDEV_PRECOTABELA is null) then vDEV_PRECOTABELA = 0;

          QTDECAIXA = (:QTDECAIXA-:vDEV_QTDEPEDIDO);
          PRECOVENDA = (:PRECOVENDA-:vDEV_PRECOVENDA);
          PRECOTABELA = (:PRECOTABELA-:vDEV_PRECOTABELA);

      if ((PRECOVENDA <> 0) and
         (QTDECAIXA <> 0)) then begin
          MARGEM = ((PRECOVENDA/PRECOTABELA)-1)*100;
         suspend;
      end
    end
end^


ALTER PROCEDURE REL_PREMIACAO (
    IDFILIAL INTEGER,
    IDFOR1 INTEGER,
    IDFOR2 INTEGER,
    IDFOR3 INTEGER,
    DTINI DATE,
    DTFIM DATE)
RETURNS (
    IDREPRESENTANTE INTEGER,
    NOMEREPRESENTANTE VARCHAR(40) CHARACTER SET NONE,
    QTDEPEDIDO INTEGER,
    TOTALVALOR NUMERIC(16,2),
    TOTALFOR1 NUMERIC(16,2),
    TOTALFOR2 NUMERIC(16,2),
    TOTALFOR3 NUMERIC(16,2),
    QTDEFOR1 INTEGER,
    QTDEFOR2 INTEGER,
    QTDEFOR3 INTEGER)
AS
begin
   for select P.IDREPRESENTANTE, COLLATEBR(R.NOME), count(P.IDPEDIDO), sum(P.TOTALPEDIDO) from PEDIDO P

       join REPRESENTANTE R
         on R.SITUACAO = 'A'
        and R.IDREPRESENTANTE = P.IDREPRESENTANTE

      where P.IDFILIAL = :IDFILIAL
        and P.SITUACAOPEDIDO = 'V'
        and P.DATAPEDIDO between :DTINI and :DTFIM
        and P.IDPEDIDO not in (select D.IDPEDIDO from DEVOLUCAO D
                                where D.IDFILIAL = :IDFILIAL
                                  and D.IDPEDIDO = P.IDPEDIDO
                                  and D.SITUACAOPEDIDO = 'V'
                                  and D.IDFOLHA = P.IDFOLHA)

        group by P.IDREPRESENTANTE, COLLATEBR(R.NOME)
        into :IDREPRESENTANTE, :NOMEREPRESENTANTE, :QTDEPEDIDO, :TOTALVALOR
   do
     begin
       select sum(distinct IP.PRECOVENDA*IP.QTDEPEDIDO),count(distinct PE.IDPEDIDO) from PEDIDO PE
              left join ITENSPEDIDO IP
                on IP.IDFILIAL = :IDFILIAL
               and IP.IDPEDIDO = PE.IDPEDIDO
               and IP.TROCA = 'N'
               and IP.IDFOLHA  = PE.IDFOLHA
              join PRODUTO PR
                on PR.IDPRODUTO = IP.IDPRODUTO
               and PR.IDFILIAL  = IP.IDFILIAL
             where PE.IDFILIAL     = :IDFILIAL
               and PR.IDFORNECEDOR = :IDFOR1
               and PE.IDREPRESENTANTE = :IDREPRESENTANTE
               and PE.SITUACAOPEDIDO = 'V'
               and PE.DATAPEDIDO between :DTINI and :DTFIM
               and PE.IDPEDIDO not in (select D.IDPEDIDO from DEVOLUCAO D
                                          where D.IDFILIAL = :IDFILIAL
                                            and D.IDPEDIDO = PE.IDPEDIDO
                                            and D.SITUACAOPEDIDO = 'V'
                                            and D.IDFOLHA = PE.IDFOLHA)
              into :TOTALFOR1, :QTDEFOR1;
       select sum(distinct IP.PRECOVENDA*IP.QTDEPEDIDO), count(distinct PE.IDPEDIDO) from PEDIDO PE
              left join ITENSPEDIDO IP
                on IP.IDFILIAL = :IDFILIAL
               and IP.IDPEDIDO = PE.IDPEDIDO
               and IP.TROCA = 'N'
               and IP.IDFOLHA  = PE.IDFOLHA
              join PRODUTO PR
                 on PR.IDPRODUTO = IP.IDPRODUTO
                and PR.IDFILIAL  = IP.IDFILIAL
                where PE.IDFILIAL     = :IDFILIAL
                  and PR.IDFORNECEDOR = :IDFOR2
                  and PE.IDREPRESENTANTE = :IDREPRESENTANTE
                  and PE.SITUACAOPEDIDO = 'V'
                  and PE.DATAPEDIDO between :DTINI and :DTFIM
                  and PE.IDPEDIDO not in (select D.IDPEDIDO from DEVOLUCAO D
                                          where D.IDFILIAL = :IDFILIAL
                                            and D.IDPEDIDO = PE.IDPEDIDO
                                            and D.SITUACAOPEDIDO = 'V'
                                            and D.IDFOLHA = PE.IDFOLHA)
               into :TOTALFOR2, :QTDEFOR2;

       select sum(distinct IP.PRECOVENDA*IP.QTDEPEDIDO), count(distinct PE.IDPEDIDO) from PEDIDO PE
              left join ITENSPEDIDO IP
                on IP.IDFILIAL = :IDFILIAL
               and IP.TROCA = 'N'
               and IP.IDPEDIDO = PE.IDPEDIDO
               and IP.IDFOLHA  = PE.IDFOLHA
              join PRODUTO PR
                 on PR.IDPRODUTO = IP.IDPRODUTO
                and PR.IDFILIAL  = IP.IDFILIAL
                where PE.IDFILIAL     = :IDFILIAL
                  and PR.IDFORNECEDOR = :IDFOR3
                  and PE.IDREPRESENTANTE = :IDREPRESENTANTE
                  and PE.SITUACAOPEDIDO = 'V'
                  and PE.DATAPEDIDO between :DTINI and :DTFIM
                  and PE.IDPEDIDO not in (select D.IDPEDIDO from DEVOLUCAO D
                                          where D.IDFILIAL = :IDFILIAL
                                            and D.IDPEDIDO = PE.IDPEDIDO
                                            and D.SITUACAOPEDIDO = 'V'
                                            and D.IDFOLHA = PE.IDFOLHA)
                into :TOTALFOR3, :QTDEFOR3;
        suspend;
     end
end^


ALTER PROCEDURE REL_PRODUCAOREPRESENTANTE (
    IDFILIAL SMALLINT,
    IDFORN1 INTEGER,
    IDFORN2 INTEGER,
    IDFORN3 INTEGER,
    DATAINICIAL DATE,
    DATAFINAL DATE)
RETURNS (
    IDREPRESENTANTE SMALLINT,
    NOMEREPRESENTANTE VARCHAR(40) CHARACTER SET NONE,
    TOTALVENDA NUMERIC(10,2),
    TOTALBONIFICACAO NUMERIC(10,2),
    TOTALTROCA NUMERIC(10,2),
    TOTALFORNECEDOR1 NUMERIC(10,2),
    TOTALFORNECEDOR2 NUMERIC(10,2),
    TOTALFORNECEDOR3 NUMERIC(10,2),
    TOTALSALDOCARTEIRA NUMERIC(10,2),
    TOTALPERCREPRESENTANTE NUMERIC(10,2),
    TOTALPERCENTUAL NUMERIC(10,2))
AS
DECLARE VARIABLE VTOTALCARTEIRACREDITO NUMERIC(10,2);
DECLARE VARIABLE VTOTALCARTEIRADEBITO NUMERIC(10,2);
begin
    for select R.IDREPRESENTANTE,COLLATEBR(R.NOME),
               (select distinct sum((IP.PRECOVENDA*IP.QTDEPEDIDO)-if_nn((ID.PRECOVENDA*ID.QTDEPEDIDO),'<>',0,(ID.PRECOVENDA*ID.QTDEPEDIDO),0)) from PEDIDO PE
                     left join ITENSPEDIDO IP
                       on IP.IDFILIAL = :IDFILIAL
                       and IP.TROCA = 'N'
                       and IP.IDPEDIDO = PE.IDPEDIDO
                       and IP.IDFOLHA  = PE.IDFOLHA

                     left join ITENSDEVOLUCAO ID
                       on ID.IDFILIAL = :IDFILIAL
                      and ID.TROCA = 'N'
                      and ID.IDPEDIDO = IP.IDPEDIDO
                      and ID.IDPRODUTO = IP.IDPRODUTO
                      and ID.IDFOLHA  = IP.IDFOLHA

                     join PRODUTO PR
                       on PR.IDPRODUTO = IP.IDPRODUTO
                      and PR.IDFILIAL  = IP.IDFILIAL
                     where PE.IDFILIAL     = :IDFILIAL
                       and PR.IDFORNECEDOR = :IDFORN1
                       and PE.IDREPRESENTANTE = R.IDREPRESENTANTE
                       and PE.SITUACAOPEDIDO = 'V'
                       and PE.DATAPEDIDO between :DATAINICIAL and :DATAFINAL),

               (select distinct sum((IP.PRECOVENDA*IP.QTDEPEDIDO)-if_nn((ID.PRECOVENDA*ID.QTDEPEDIDO),'<>',0,(ID.PRECOVENDA*ID.QTDEPEDIDO),0)) from PEDIDO PE
                     left join ITENSPEDIDO IP
                       on IP.IDFILIAL = :IDFILIAL
                       and IP.IDPEDIDO = PE.IDPEDIDO
                       and IP.TROCA = 'N'
                       and IP.IDFOLHA  = PE.IDFOLHA

                     left join ITENSDEVOLUCAO ID
                       on ID.IDFILIAL = :IDFILIAL
                      and ID.TROCA = 'N'
                      and ID.IDPEDIDO = IP.IDPEDIDO
                      and ID.IDPRODUTO = IP.IDPRODUTO
                      and ID.IDFOLHA  = IP.IDFOLHA

                     join PRODUTO PR
                       on PR.IDPRODUTO = IP.IDPRODUTO
                      and PR.IDFILIAL  = IP.IDFILIAL
                     where PE.IDFILIAL     = :IDFILIAL
                       and PR.IDFORNECEDOR = :IDFORN2
                       and PE.IDREPRESENTANTE = R.IDREPRESENTANTE
                       and PE.SITUACAOPEDIDO = 'V'
                       and PE.DATAPEDIDO between :DATAINICIAL and :DATAFINAL),

               (select distinct sum((IP.PRECOVENDA*IP.QTDEPEDIDO)-if_nn((ID.PRECOVENDA*ID.QTDEPEDIDO),'<>',0,(ID.PRECOVENDA*ID.QTDEPEDIDO),0)) from PEDIDO PE
                     left join ITENSPEDIDO IP
                       on IP.IDFILIAL = :IDFILIAL
                       and IP.IDPEDIDO = PE.IDPEDIDO
                       and IP.TROCA = 'N'
                       and IP.IDFOLHA  = PE.IDFOLHA

                     left join ITENSDEVOLUCAO ID
                       on ID.IDFILIAL = :IDFILIAL
                      and ID.TROCA = 'N'
                      and ID.IDPEDIDO = IP.IDPEDIDO
                      and ID.IDPRODUTO = IP.IDPRODUTO
                      and ID.IDFOLHA  = IP.IDFOLHA

                     join PRODUTO PR
                       on PR.IDPRODUTO = IP.IDPRODUTO
                      and PR.IDFILIAL  = IP.IDFILIAL
                     where PE.IDFILIAL     = :IDFILIAL
                       and PR.IDFORNECEDOR = :IDFORN3
                       and PE.IDREPRESENTANTE = R.IDREPRESENTANTE
                       and PE.SITUACAOPEDIDO = 'V'
                       and PE.DATAPEDIDO between :DATAINICIAL and :DATAFINAL),

             (select sum((IT.PRECOVENDA*IT.QTDEPEDIDO)-if_nn((ID.PRECOVENDA*ID.QTDEPEDIDO),'<>',0,(ID.PRECOVENDA*ID.QTDEPEDIDO),0)) from ITENSPEDIDO IT

                     right join PEDIDO PE
                       on PE.IDFILIAL = :IDFILIAL
                      and PE.IDPEDIDO = IT.IDPEDIDO
                      and PE.IDFOLHA = IT.IDFOLHA

                     left join ITENSDEVOLUCAO ID
                       on ID.IDFILIAL = IT.IDFILIAL
                      and ID.IDPRODUTO = IT.IDPRODUTO
                      and ID.IDPEDIDO = IT.IDPEDIDO
                      and ID.IDFOLHA = IT.IDFOLHA
                      and ID.TROCA = 'N'

                     where IT.IDFILIAL = :IDFILIAL
                       and PE.IDREPRESENTANTE = R.IDREPRESENTANTE
                       and IT.TROCA = 'N'
                       and PE.SITUACAOPEDIDO = 'B'
                       and PE.DATAPEDIDO between :DATAINICIAL and :DATAFINAL),

             (select sum((IT.PRECOVENDA*IT.QTDEPEDIDO)-if_nn((ID.PRECOVENDA*ID.QTDEPEDIDO),'<>',0,(ID.PRECOVENDA*ID.QTDEPEDIDO),0)) from ITENSPEDIDO IT

                     right join PEDIDO PE
                       on PE.IDFILIAL = :IDFILIAL
                      and PE.IDPEDIDO = IT.IDPEDIDO
                      and PE.IDFOLHA = IT.IDFOLHA

                     left join ITENSDEVOLUCAO ID
                       on ID.IDFILIAL = IT.IDFILIAL
                      and ID.IDPRODUTO = IT.IDPRODUTO
                      and ID.IDPEDIDO = IT.IDPEDIDO
                      and ID.IDFOLHA = IT.IDFOLHA
                      and ID.TROCA = 'N'

                     where IT.IDFILIAL = :IDFILIAL
                       and PE.IDREPRESENTANTE = R.IDREPRESENTANTE
                       and IT.TROCA = 'N'
                       and PE.SITUACAOPEDIDO = 'T'
                       and PE.DATAPEDIDO between :DATAINICIAL and :DATAFINAL),

               (select distinct (((sum((IP.PRECOVENDA*IP.QTDEPEDIDO)
                                    -if_nn((ID.PRECOVENDA*ID.QTDEPEDIDO),'<>',0,(ID.PRECOVENDA*ID.QTDEPEDIDO),0))

                                   /sum((IP.PRECOTABELA*IP.QTDEPEDIDO)
                                    -if_nn((ID.PRECOTABELA*ID.QTDEPEDIDO),'<>',0,(ID.PRECOTABELA*ID.QTDEPEDIDO),0))
                                       )-1)*100) from PEDIDO PE

                     left join ITENSPEDIDO IP
                       on IP.IDFILIAL = :IDFILIAL
                      and IP.TROCA = 'N'
                      and IP.IDPEDIDO = PE.IDPEDIDO
                      and IP.IDFOLHA  = PE.IDFOLHA

                     left join ITENSDEVOLUCAO ID
                       on ID.IDFILIAL = IP.IDFILIAL
                      and ID.IDPRODUTO = IP.IDPRODUTO
                      and ID.IDPEDIDO = IP.IDPEDIDO
                      and ID.IDFOLHA = IP.IDFOLHA
                      and ID.TROCA = 'N'

                     join PRODUTO PR
                       on PR.IDPRODUTO = IP.IDPRODUTO
                      and PR.IDFILIAL  = :IDFILIAL
/*
                      and PR.IDFORNECEDOR = if_nn(PR.IDFORNECEDOR,'=',:IDFORN1,:IDFORN1,
                                            if_nn(PR.IDFORNECEDOR,'=',:IDFORN2,:IDFORN2,:IDFORN3))
*/
                    where PE.IDFILIAL = :IDFILIAL
                      and PE.IDREPRESENTANTE = R.IDREPRESENTANTE
                      and PE.SITUACAOPEDIDO = 'V'
                      and PE.DATAPEDIDO between :DATAINICIAL and :DATAFINAL),

             (select sum(CA.VALORCARTEIRA) from CARTEIRA CA
                     where CA.IDFILIAL = :IDFILIAL
                       and CA.IDREPRESENTANTE = R.IDREPRESENTANTE
                       and CA.NATOPERACAO = 'C'),

             (select sum(CA.VALORCARTEIRA) from CARTEIRA CA
                     where CA.IDFILIAL = :IDFILIAL
                       and CA.IDREPRESENTANTE = R.IDREPRESENTANTE
                       and CA.NATOPERACAO = 'D'),

               (select distinct (((sum((IP.PRECOVENDA*IP.QTDEPEDIDO)
                                    -if_nn((ID.PRECOVENDA*ID.QTDEPEDIDO),'<>',0,(ID.PRECOVENDA*ID.QTDEPEDIDO),0))

                                     /sum((IP.PRECOTABELA*IP.QTDEPEDIDO)
                                    -if_nn((ID.PRECOTABELA*ID.QTDEPEDIDO),'<>',0,(ID.PRECOTABELA*ID.QTDEPEDIDO),0))
                                     )-1)*100) from PEDIDO PE

                     left join ITENSPEDIDO IP
                       on IP.IDFILIAL = :IDFILIAL
                      and IP.IDPEDIDO = PE.IDPEDIDO
                      and IP.TROCA = 'N'
                      and IP.IDFOLHA  = PE.IDFOLHA

                     left join ITENSDEVOLUCAO ID
                       on ID.IDFILIAL = IP.IDFILIAL
                      and ID.IDPRODUTO = IP.IDPRODUTO
                      and ID.IDPEDIDO = IP.IDPEDIDO
                      and ID.IDFOLHA = IP.IDFOLHA
                      and ID.TROCA = 'N'

                     join PRODUTO PR
                       on PR.IDPRODUTO = IP.IDPRODUTO
                      and PR.IDFILIAL = :IDFILIAL
/*
                      and PR.IDFORNECEDOR = if_nn(PR.IDFORNECEDOR,'=',:IDFORN1,:IDFORN1,
                                            if_nn(PR.IDFORNECEDOR,'=',:IDFORN2,:IDFORN2,:IDFORN3))
*/

                     where PE.IDFILIAL = :IDFILIAL
                       and PE.SITUACAOPEDIDO = 'V'
                       and PE.DATAPEDIDO between :DATAINICIAL and :DATAFINAL),

             (select sum((IT.PRECOVENDA*IT.QTDEPEDIDO)-if_nn((ID.PRECOVENDA*ID.QTDEPEDIDO),'<>',0,(ID.PRECOVENDA*ID.QTDEPEDIDO),0)) from ITENSPEDIDO IT

                     right join PEDIDO PE
                       on PE.IDFILIAL = :IDFILIAL
                      and PE.IDPEDIDO = IT.IDPEDIDO
                      and PE.IDFOLHA = IT.IDFOLHA

                     left join ITENSDEVOLUCAO ID
                       on ID.IDFILIAL = :IDFILIAL
                      and ID.IDPRODUTO = IT.IDPRODUTO
                      and ID.IDPEDIDO = IT.IDPEDIDO
                      and ID.IDFOLHA = IT.IDFOLHA
                      and ID.TROCA = 'N'

                     where IT.IDFILIAL = :IDFILIAL
                       and PE.IDREPRESENTANTE = R.IDREPRESENTANTE
                       and IT.TROCA = 'N'
                       and PE.SITUACAOPEDIDO = 'V'
                       and PE.DATAPEDIDO between :DATAINICIAL and :DATAFINAL)


      from REPRESENTANTE R
           into
               :IDREPRESENTANTE,:NOMEREPRESENTANTE, :TOTALFORNECEDOR1, :TOTALFORNECEDOR2, TOTALFORNECEDOR3,:TOTALBONIFICACAO,
               :TOTALTROCA, :TOTALPERCREPRESENTANTE, :vTOTALCARTEIRACREDITO ,:vTOTALCARTEIRADEBITO,:TOTALPERCENTUAL, :TOTALVENDA

  do
  begin
    if (TOTALPERCENTUAL is null) then TOTALPERCENTUAL=0;
    if (TOTALTROCA is null) then TOTALTROCA=0;
    if (TOTALVENDA is null) then TOTALVENDA=0;
    if (TOTALBONIFICACAO is null) then TOTALBONIFICACAO=0;
    if (vTOTALCARTEIRACREDITO is null) then vTOTALCARTEIRACREDITO=0;
    if (vTOTALCARTEIRADEBITO is null) then vTOTALCARTEIRADEBITO=0;
    if (TOTALFORNECEDOR1 is null) then TOTALFORNECEDOR1=0;
    if (TOTALFORNECEDOR2 is null) then TOTALFORNECEDOR2=0;
    if (TOTALFORNECEDOR3 is null) then TOTALFORNECEDOR3=0;
    TOTALSALDOCARTEIRA = vTOTALCARTEIRACREDITO-vTOTALCARTEIRADEBITO;
    if (TOTALSALDOCARTEIRA is null) then TOTALSALDOCARTEIRA=0;
/*    TOTALVENDA=TOTALFORNECEDOR1+TOTALFORNECEDOR2+TOTALFORNECEDOR3+TOTALFORNECEDOR4+TOTALFORNECEDOR5;   */
    suspend;
  end
end^


ALTER PROCEDURE REL_PRODUTO_TIPO_MOVIMENTACAO (
    IDFILIAL INTEGER,
    SITUACAOPEDIDO CHAR(1),
    IDCLIENTEINI INTEGER,
    IDCLIENTEFIM INTEGER,
    DTINI DATE,
    DTFIM DATE,
    IDREPRESENTANTEINI SMALLINT,
    IDREPRESENTANTEFIM SMALLINT)
RETURNS (
    IDCLIENTE INTEGER,
    NOMECLIENTE VARCHAR(45),
    IDPRODUTO INTEGER,
    NOMEPRODUTO VARCHAR(60),
    PRECOVENDA NUMERIC(14,2),
    QTDEPEDIDO NUMERIC(10,3),
    FATORCONVERSAO INTEGER)
AS
DECLARE VARIABLE VDEV_QTDEPEDIDO NUMERIC(10,3);
DECLARE VARIABLE VDEV_PRECOVENDA NUMERIC(14,2);
begin
  for select PE.IDCLIENTE, C.NOME, IT.IDPRODUTO, P.ESPECIFICACAO,
             sum(IT.PRECOVENDA*IT.QTDEPEDIDO), sum(IT.QTDEPEDIDO*IT.FATORCONVERSAO),
             P.FATORCONVERSAO from ITENSPEDIDO IT
    right join PEDIDO PE
      on PE.IDPEDIDO = IT.IDPEDIDO
     and PE.IDFILIAL = IT.IDFILIAL
     and PE.IDFOLHA = IT.IDFOLHA

    left join CLIENTE C
      on C.IDCLIENTE = PE.IDCLIENTE

    join PRODUTO P
      on P.IDFILIAL = IT.IDFILIAL
     and P.IDPRODUTO = IT.IDPRODUTO

     where IT.IDFILIAL = :IDFILIAL
       and IT.TROCA = 'N'
       and PE.DATAPEDIDO between :DTINI and :DTFIM
       and PE.SITUACAOPEDIDO = :SITUACAOPEDIDO
       and PE.IDREPRESENTANTE between :IDREPRESENTANTEINI and :IDREPRESENTANTEFIM
       and PE.IDCLIENTE between :IDCLIENTEINI and :IDCLIENTEFIM
       group by PE.IDCLIENTE, C.NOME, IT.IDPRODUTO, P.ESPECIFICACAO,
                P.FATORCONVERSAO
       into :IDCLIENTE, :NOMECLIENTE, :IDPRODUTO, :NOMEPRODUTO,
            :PRECOVENDA, :QTDEPEDIDO, :FATORCONVERSAO
  do
    begin
         select sum(IT.QTDEPEDIDO*IT.FATORCONVERSAO),
                sum(IT.PRECOVENDA*IT.QTDEPEDIDO) from ITENSDEVOLUCAO IT

             right join DEVOLUCAO D
               on D.IDFILIAL = :IDFILIAL
              and D.IDPEDIDO = IT.IDPEDIDO
              and D.IDFOLHA = IT.IDFOLHA

            left join PRODUTO P
              on  P.IDPRODUTO = IT.IDPRODUTO
              and P.IDFILIAL = IT.IDFILIAL

            where IT.IDFILIAL = :IDFILIAL
              and IT.IDPRODUTO = :IDPRODUTO
              and IT.TROCA = 'N'
              and D.DATAPEDIDO between :DTINI and :DTFIM
              and D.SITUACAOPEDIDO = :SITUACAOPEDIDO
              and D.IDREPRESENTANTE between :IDREPRESENTANTEINI and :IDREPRESENTANTEFIM
              and D.IDCLIENTE = :IDCLIENTE
             into :vDEV_QTDEPEDIDO, :vDEV_PRECOVENDA;

        if (:vDEV_QTDEPEDIDO is null) then vDEV_QTDEPEDIDO = 0;
        if (:vDEV_PRECOVENDA is null) then vDEV_PRECOVENDA = 0;

        QTDEPEDIDO = :QTDEPEDIDO-:vDEV_QTDEPEDIDO;
        PRECOVENDA = :PRECOVENDA-:vDEV_PRECOVENDA;
      suspend;
    end
end^


ALTER PROCEDURE REL_PRODUTOCORTE (
    IDFILIAL SMALLINT,
    IDPROINI INTEGER,
    IDPROFIM INTEGER,
    DATAINI DATE,
    DATAFIM DATE,
    TIPOPEDIDO VARCHAR(1),
    IDROM_INI INTEGER,
    IDROM_FIM INTEGER)
RETURNS (
    IDPRODUTO INTEGER,
    NOMEPRODUTO VARCHAR(60),
    IDPEDIDO INTEGER,
    IDFOLHA SMALLINT,
    IDCLIENTE INTEGER,
    NOMECLIENTE VARCHAR(60),
    TOTALPEDIDO NUMERIC(10,2),
    QTDEPEDIDO NUMERIC(10,2),
    FATORCONVERSAO INTEGER,
    FANTASIA VARCHAR(80),
    DTPEDIDO DATE,
    PRECO_ITEM INTEGER)
AS
declare variable VDEV_QTDEPEDIDO numeric(10,3);
declare variable VDEV_PRECOVENDA numeric(14,2);
declare variable IDROMANEIO_PED integer;
begin

     if (:TIPOPEDIDO <> '*') then
     begin
         for select IP.IDPRODUTO, COLLATEBR(PR.ESPECIFICACAO),IP.IDPEDIDO,
                 IP.IDFOLHA,PE.IDCLIENTE, COLLATEBR(C.NOME), PE.TOTALPEDIDO,(IP.QTDEPEDIDO*IP.FATORCONVERSAO), PR.FATORCONVERSAO, PE.DATAPEDIDO, PE.IDROMANEIO,
                 COLLATEBR(C.FANTASIA), (IP.QTDEPEDIDO*IP.PRECOVENDA)  from ITENSPEDIDO IP

                right join PEDIDO PE
                  on PE.IDFILIAL = :IDFILIAL
                 and PE.IDPEDIDO = IP.IDPEDIDO
                 and PE.IDFOLHA = IP.IDFOLHA
                join PRODUTO PR
                   on PR.IDPRODUTO = IP.IDPRODUTO
                   and PR.IDFILIAL  = :IDFILIAL
    
                join CLIENTE C
                   on C.IDCLIENTE = PE.IDCLIENTE
    
                where IP.IDFILIAL = :IDFILIAL
                   and PE.DATAPEDIDO between :DATAINI and :DATAFIM
                   and IP.IDPRODUTO between :IDPROINI and :IDPROFIM
               --    and PE.IDROMANEIO between :IDROM_INI and :IDROM_FIM
                  -- and IP.TROCA = 'N'
                   and PE.SITUACAOPEDIDO = :TIPOPEDIDO

                   order by PR.ESPECIFICACAO
                   into :IDPRODUTO, :NOMEPRODUTO, :IDPEDIDO, :IDFOLHA, :IDCLIENTE,
                        :NOMECLIENTE, :TOTALPEDIDO, :QTDEPEDIDO, :FATORCONVERSAO, :DTPEDIDO, :IDROMANEIO_PED, :FANTASIA, :PRECO_ITEM
          do
            begin
             select sum(IT.QTDEPEDIDO*IT.FATORCONVERSAO),
                    sum(IT.PRECOVENDA*IT.QTDEPEDIDO) from ITENSDEVOLUCAO IT
    
                 right join DEVOLUCAO D
                   on D.IDFILIAL = :IDFILIAL
                  and D.IDPEDIDO = IT.IDPEDIDO
                  and D.IDFOLHA = IT.IDFOLHA
    
                left join PRODUTO P
                  on  P.IDPRODUTO = IT.IDPRODUTO
                  and P.IDFILIAL = IT.IDFILIAL
    
                where IT.IDFILIAL = :IDFILIAL
                   and D.DATAPEDIDO between :DATAINI and :DATAFIM
                   and IT.IDPRODUTO = :IDPRODUTO
                   and D.IDPEDIDO = :IDPEDIDO
                   and D.IDFOLHA = :IDFOLHA
                  -- and IT.TROCA = 'N'
                   and D.SITUACAOPEDIDO = :TIPOPEDIDO
                into :vDEV_QTDEPEDIDO, :vDEV_PRECOVENDA;
    
              if (:vDEV_QTDEPEDIDO is null) then vDEV_QTDEPEDIDO = 0;
              if (:vDEV_PRECOVENDA is null) then vDEV_PRECOVENDA = 0;
    
              QTDEPEDIDO = (:QTDEPEDIDO-:vDEV_QTDEPEDIDO);
              TOTALPEDIDO = (:TOTALPEDIDO-:vDEV_PRECOVENDA);
              if (QTDEPEDIDO <> 0) then begin
                 if (IDROM_INI = IDROM_FIM) then begin
                    if (IDROM_INI = IDROMANEIO_PED) then begin
                       suspend;
                    end
                 end
                 else
                 begin
                   suspend;
                 end
              end
            end
         end
         else begin
            for select IP.IDPRODUTO, COLLATEBR(PR.ESPECIFICACAO),IP.IDPEDIDO,
                 IP.IDFOLHA,PE.IDCLIENTE, COLLATEBR(C.NOME), PE.TOTALPEDIDO,(IP.QTDEPEDIDO*IP.FATORCONVERSAO), PR.FATORCONVERSAO, PE.DATAPEDIDO, PE.IDROMANEIO,
                 COLLATEBR(C.FANTASIA), (IP.QTDEPEDIDO*IP.PRECOVENDA) from ITENSPEDIDO IP

                right join PEDIDO PE
                  on PE.IDFILIAL = :IDFILIAL
                 and PE.IDPEDIDO = IP.IDPEDIDO
                 and PE.IDFOLHA = IP.IDFOLHA
                join PRODUTO PR
                   on PR.IDPRODUTO = IP.IDPRODUTO
                   and PR.IDFILIAL  = :IDFILIAL
    
                join CLIENTE C
                   on C.IDCLIENTE = PE.IDCLIENTE
    
                where IP.IDFILIAL = :IDFILIAL
                   and PE.DATAPEDIDO between :DATAINI and :DATAFIM
                   and IP.IDPRODUTO between :IDPROINI and :IDPROFIM
                -- and PE.IDROMANEIO between :IDROM_INI and :IDROM_FIM
                -- and IP.TROCA = 'N'
                   order by PR.ESPECIFICACAO
                   into :IDPRODUTO, :NOMEPRODUTO, :IDPEDIDO, :IDFOLHA, :IDCLIENTE,
                        :NOMECLIENTE, :TOTALPEDIDO, :QTDEPEDIDO, :FATORCONVERSAO, :DTPEDIDO, :IDROMANEIO_PED, :FANTASIA, :PRECO_ITEM

           do
             begin
              select sum(IT.QTDEPEDIDO*IT.FATORCONVERSAO),
                    sum(IT.PRECOVENDA*IT.QTDEPEDIDO) from ITENSDEVOLUCAO IT
    
                 right join DEVOLUCAO D
                   on D.IDFILIAL = :IDFILIAL
                  and D.IDPEDIDO = IT.IDPEDIDO
                  and D.IDFOLHA = IT.IDFOLHA
    
                left join PRODUTO P
                  on  P.IDPRODUTO = IT.IDPRODUTO
                  and P.IDFILIAL = IT.IDFILIAL
    
                where IT.IDFILIAL = :IDFILIAL
                   and D.DATAPEDIDO between :DATAINI and :DATAFIM
                   and IT.IDPRODUTO = :IDPRODUTO
                   and D.IDPEDIDO = :IDPEDIDO
                   and D.IDFOLHA = :IDFOLHA
                  -- and IT.TROCA = 'N'
                into :vDEV_QTDEPEDIDO, :vDEV_PRECOVENDA;
    
              if (:vDEV_QTDEPEDIDO is null) then vDEV_QTDEPEDIDO = 0;
              if (:vDEV_PRECOVENDA is null) then vDEV_PRECOVENDA = 0;
    
              QTDEPEDIDO = (:QTDEPEDIDO-:vDEV_QTDEPEDIDO);
              TOTALPEDIDO = (:TOTALPEDIDO-:vDEV_PRECOVENDA);
              if (QTDEPEDIDO <> 0) then begin
                 if (IDROM_INI = IDROM_FIM) then begin
                    if (IDROM_INI = IDROMANEIO_PED) then begin
                       suspend;
                    end
                 end
                 else
                 begin
                   suspend;
                 end
              end
            end
         end
end^


ALTER PROCEDURE REL_PRODUTOS_CONFIRMADO (
    IDFILIAL INTEGER,
    DTINI DATE,
    DTFIM DATE,
    IDFORNECEDORINI INTEGER,
    IDFORNECEDORFIM INTEGER,
    IDGRUPOINI SMALLINT,
    IDGRUPOFIM SMALLINT)
RETURNS (
    IDPRODUTO INTEGER,
    NOMEPRODUTO VARCHAR(60),
    VALORCONFIRMADO NUMERIC(15,2),
    FATORCONVERSAO INTEGER,
    QTDE_CONFIRMADA NUMERIC(10,3),
    IDGRUPO SMALLINT,
    NOMEGRUPO VARCHAR(25),
    CLASSIFICACAO_FISCAL VARCHAR(15),
    IDCFOP SMALLINT,
    NM_CFOP VARCHAR(40))
AS
declare variable TOTAL_CFOP numeric(15,2);
begin

  for select PR.CLASSIFICACAO_FISCAL, IT.IDPRODUTO, PR.ESPECIFICACAO, PR.FATORCONVERSAO, PR.IDGRUPO, G.NOME, C.DESCRICAO, P.IDCFOP,
             sum(IT.PRECOVENDA*IT.QTDEPEDIDO),
             sum(IT.QTDEPEDIDO*IT.FATORCONVERSAO)
             from ITENSNOTA IT

     join NOTA P
       on P.IDFILIAL = IT.IDFILIAL
      and P.IDNOTA = IT.IDNOTA


    join PRODUTO PR
      on PR.IDFILIAL = :IDFILIAL
     and PR.IDPRODUTO = IT.IDPRODUTO

    left join GRUPO G
      on G.IDGRUPO = PR.IDGRUPO

    left join CFOP C
      ON C.IDFILIAL = P.IDFILIAL
     and C.IDCFOP = P.IDCFOP


     where IT.IDFILIAL = :IDFILIAL
       and P.DATANOTA between :DTINI and :DTFIM
       and PR.IDFORNECEDOR between :IDFORNECEDORINI and :IDFORNECEDORFIM
       and PR.IDGRUPO between :IDGRUPOINI and :IDGRUPOFIM
       and P.SITUACAONOTA is null
       and P.SITUACAOPEDIDO = 'V'
     group by PR.CLASSIFICACAO_FISCAL, IT.IDPRODUTO, PR.ESPECIFICACAO, PR.FATORCONVERSAO, PR.IDGRUPO, G.NOME, C.DESCRICAO, P.IDCFOP
     into :CLASSIFICACAO_FISCAL, :IDPRODUTO, :NOMEPRODUTO, :FATORCONVERSAO, :IDGRUPO, :NOMEGRUPO,:NM_CFOP,:IDCFOP, :VALORCONFIRMADO,:QTDE_CONFIRMADA

  do begin
      suspend;
  end
end^


ALTER PROCEDURE REL_RANKINGCLIENTE (
    IDFILIAL SMALLINT,
    DATAINI DATE,
    DATAFIM DATE,
    IDCONVENIO_INI SMALLINT,
    IDCONVENIO_FIM SMALLINT,
    IDFORNECEDORINI INTEGER,
    IDFORNECEDORFIM INTEGER,
    IDPRODUTOINI INTEGER,
    IDPRODUTOFIM INTEGER)
RETURNS (
    IDCIDADE SMALLINT,
    IDCLIENTE INTEGER,
    NOMECLIENTE VARCHAR(60),
    FANTASIA VARCHAR(60),
    TOTALPEDIDO NUMERIC(10,2),
    QTDEVENDIDA NUMERIC(10,2),
    IDSUB_CONVENIO INTEGER)
AS
begin
   for select PE.IDCLIENTE,
              PE.NOMECLIENTE,

              cast(sum(IT.QTDEPEDIDO*IT.PRECOVENDA) as numeric(16,2))-coalesce(sum((select distinct sum(RIp.QTDEPEDIDO*RIp.PRECOVENDA) from REL_ITENS_DEVOLUCAO RIP
                                                               where RIP.IDFILIAL = IT.IDFILIAL
                                                                 and RIP.IDPEDIDO = IT.IDPEDIDO
                                                                 and RIP.IDFOLHA  = IT.IDFOLHA
                                                                 and RIP.IDPRODUTO = IT.IDPRODUTO)),0),


              PE.IDCIDADE_CLIENTE,
              sum((IT.QTDEPEDIDO/IT.FATORCONVERSAO))-coalesce(sum((select distinct sum(RIp.QTDEPEDIDO/RIp.FATORCONVERSAO) from REL_ITENS_DEVOLUCAO RIP
                                                               where RIP.IDFILIAL = IT.IDFILIAL
                                                                 and RIP.IDPEDIDO = IT.IDPEDIDO
                                                                 and RIP.IDFOLHA  = IT.IDFOLHA
                                                                 and RIP.IDPRODUTO = IT.IDPRODUTO)),0),

              PE.IDSUB_CONVENIO,
              PE.FANTASIA_CLIENTE from REL_ITENS_PEDIDO IT

      join REL_PEDIDO PE
        on PE.IDFILIAL = IT.IDFILIAL
       and PE.IDPEDIDO = IT.IDPEDIDO
       and PE.IDFOLHA  = IT.IDFOLHA

--      left join REL_ITENS_DEVOLUCAO RID
--        on RID.IDFILIAL = IT.IDFILIAL
--       and RID.IDPEDIDO = IT.IDPEDIDO
--       and RID.IDFOLHA  = IT.IDFOLHA

      where IT.IDFILIAL = :IDFILIAL
        and IT.TROCA = 'N'
        and PE.SITUACAOPEDIDO = 'V'
        and IT.IDFORNECEDOR between :IDFORNECEDORINI and :IDFORNECEDORFIM
        and IT.IDPRODUTO between :IDPRODUTOINI and :IDPRODUTOFIM
        and PE.IDCONVENIO between :IDCONVENIO_INI and :IDCONVENIO_FIM
        and PE.DATAPEDIDO between :DATAINI and :DATAFIM
        and exists(select T.ID from TABELA_AUXILIAR T
                    where T.ID = PE.IDREPRESENTANTE)
        group by PE.IDCLIENTE, PE.NOMECLIENTE, PE.IDCIDADE_CLIENTE, PE.IDSUB_CONVENIO, PE.FANTASIA_CLIENTE
        into :IDCLIENTE, :NOMECLIENTE, :TOTALPEDIDO, :IDCIDADE, :QTDEVENDIDA, :IDSUB_CONVENIO, :FANTASIA
   do
       suspend;

   exit;


   for select PE.IDCLIENTE, COLLATEBR(C.NOME), sum(IT.QTDEPEDIDO*IT.PRECOVENDA), C.IDCIDADE, sum((IT.QTDEPEDIDO/U.FATORCONVERSAO)), C.IDSUBCONVENIO,
          C.FANTASIA from ITENSPEDIDO IT

      right join PEDIDO PE
        on PE.IDFILIAL = IT.IDFILIAL
       and PE.IDPEDIDO = IT.IDPEDIDO
       and PE.IDFOLHA  = IT.IDFOLHA

      join CLIENTE C
        on C.IDCLIENTE = PE.IDCLIENTE

      left join PRODUTO PR
        on PR.IDFILIAL = :IDFILIAL
       and PR.IDPRODUTO = IT.IDPRODUTO

      join UNIDADEMEDIDA U
        on U.IDFILIAL = :IDFILIAL
       and U.IDUNIDADEMEDIDA = IT.IDUNIDADEMEDIDA

      where IT.IDFILIAL = :IDFILIAL
        and IT.TROCA = 'N'
        and PE.SITUACAOPEDIDO = 'V'
        and PR.IDFORNECEDOR between :IDFORNECEDORINI and :IDFORNECEDORFIM
        and IT.IDPRODUTO between :IDPRODUTOINI and :IDPRODUTOFIM
        and C.IDCONVENIO between :IDCONVENIO_INI and :IDCONVENIO_FIM
        and PE.DATAPEDIDO between :DATAINI and :DATAFIM
        and exists(select T.ID from TABELA_AUXILIAR T
                    where T.ID = PE.IDREPRESENTANTE)
        group by PE.IDCLIENTE, COLLATEBR(C.NOME), C.IDCIDADE, C.IDSUBCONVENIO, c.FANTASIA
        into :IDCLIENTE, :NOMECLIENTE, :TOTALPEDIDO, :IDCIDADE, :QTDEVENDIDA, :IDSUB_CONVENIO, :FANTASIA
   do
       suspend;
end^


ALTER PROCEDURE REL_RAZAO_PRODUTO (
    IDFILIAL INTEGER,
    DT_INICIAL DATE,
    DT_FINAL DATE,
    IDGRUPOINI SMALLINT,
    IDGRUPOFIM SMALLINT,
    IDFORNECEDORINI INTEGER,
    IDFORNECEDORFIM INTEGER,
    IDPRODUTOINI INTEGER,
    IDPRODUTOFIM INTEGER)
RETURNS (
    IDPRODUTO INTEGER,
    ESPECIFICACAO VARCHAR(60),
    QTDE_ANTERIOR NUMERIC(15,3),
    QTDE_ENTRADA NUMERIC(15,3),
    QTDE_SAIDA NUMERIC(15,3),
    QTDE_ATUAL NUMERIC(15,3),
    FATORCONVERSAO INTEGER)
AS
declare variable QTDE_ANTERIOR_E numeric(15,3);
declare variable QTDE_ANTERIOR_S numeric(15,3);
declare variable QTDE_DIFERENCA numeric(15,3);
declare variable IDCONTROLE integer;
begin
  for select P.IDPRODUTO, P.ESPECIFICACAO, P.FATORCONVERSAO from PRODUTO P

      where P.IDFILIAL = :IDFILIAL
        and P.IDPRODUTO between :IDPRODUTOINI and :IDPRODUTOFIM
        and P.IDGRUPO between :IDGRUPOINI and :IDGRUPOFIM
        and P.IDFORNECEDOR between :IDFORNECEDORINI and :IDFORNECEDORFIM
      order by P.ESPECIFICACAO

      into :IDPRODUTO, :ESPECIFICACAO , :FATORCONVERSAO
  do
  begin
     QTDE_ANTERIOR_E=0;
     QTDE_ANTERIOR_S=0;
     QTDE_ANTERIOR=0;
     QTDE_ENTRADA=0;
     QTDE_SAIDA=0;
     QTDE_ATUAL=0;

     -- QUANTIDADE ANTERIOR ENTRADA
     select sum(E.QTDE) from ESTOQUE_FISICO E
     where E.IDFILIAL = :IDFILIAL
     and   E.DTMOVTO < :DT_INICIAL
     and   E.IDPRODUTO = :IDPRODUTO
     and   E.SITUACAO = '+'
     into :QTDE_ANTERIOR_E;

     -- QUANTIDADE ANTERIOR SAIDA
     select sum(E.QTDE) from ESTOQUE_FISICO E
     where E.IDFILIAL = :IDFILIAL
     and   E.DTMOVTO  < :DT_INICIAL
     and   E.IDPRODUTO = :IDPRODUTO
     and   E.SITUACAO = '-'
     into :QTDE_ANTERIOR_S;

     -- QUANTIDADE DE ENTRADA NO PERIODO INFORMADO
     select sum(E.QTDE) from ESTOQUE_FISICO E
     where E.IDFILIAL = :IDFILIAL
     and   E.DTMOVTO  between :DT_INICIAL and :DT_FINAL
     and   E.IDPRODUTO = :IDPRODUTO
     and   E.SITUACAO = '+'
--     and  not (E.HISTORICO = 'ACERTO INVENTARIO'
--     and   E.HISTORICO = 'INICIO DE INVENTARIO')
     into :QTDE_ENTRADA;

     -- QUANTIDADE DE SAIDA NO PERIODO INFORMADO
     select sum(E.QTDE) from ESTOQUE_FISICO E
     where E.IDFILIAL = :IDFILIAL
     and   E.DTMOVTO  between :DT_INICIAL and :DT_FINAL
     and   E.IDPRODUTO = :IDPRODUTO
     and   E.SITUACAO = '-'
--     and  not (E.HISTORICO = 'ACERTO INVENTARIO'
--     or   E.HISTORICO = 'INICIO DE INVENTARIO')
     into :QTDE_SAIDA;

--   SALDO ATUAL
     select max(EF.IDCONTROLE) from ESTOQUE_FISICO EF
      where EF.IDFILIAL = :IDFILIAL
        and EF.DTMOVTO <= :DT_FINAL
        and EF.IDPRODUTO = :IDPRODUTO
     into :IDCONTROLE ;


     select E.SALDO from ESTOQUE_FISICO E
     where E.IDFILIAL = :IDFILIAL
     and   E.IDPRODUTO = :IDPRODUTO
     and   E.IDCONTROLE = :IDCONTROLE
     into :QTDE_ATUAL;


     if (QTDE_ANTERIOR_E is null) then QTDE_ANTERIOR_E=0;
     if (QTDE_ANTERIOR_S is null) then QTDE_ANTERIOR_S=0;
     if (QTDE_ANTERIOR is null) then QTDE_ANTERIOR=0;
     if (QTDE_ENTRADA is null)  then QTDE_ENTRADA=0;
     if (QTDE_SAIDA is null)    then QTDE_SAIDA=0;
     if (QTDE_ATUAL is null)    then QTDE_ATUAL=0;


     QTDE_ANTERIOR = (QTDE_ANTERIOR_E-QTDE_ANTERIOR_S) ;
     QTDE_DIFERENCA = QTDE_ATUAL-(QTDE_ANTERIOR+QTDE_ENTRADA-QTDE_SAIDA);
     QTDE_ANTERIOR = QTDE_ANTERIOR + QTDE_DIFERENCA;
     QTDE_ATUAL = (QTDE_ANTERIOR+QTDE_ENTRADA-QTDE_SAIDA);

     suspend ;
  end
end^


ALTER PROCEDURE REL_REGISTRO_APURACAO_ICMS_ENTR (
    IDFILIAL SMALLINT,
    DATAENTRADAINI DATE,
    DATAENTRADAFIM DATE,
    DATANOTAFISCALINI DATE,
    DATANOTAFISCALFIM DATE,
    IDCFOPINI SMALLINT,
    IDCFOPFIM SMALLINT)
RETURNS (
    CFOP VARCHAR(5),
    IDCFOP SMALLINT,
    DESCRICAO VARCHAR(40),
    VALOR_BASE NUMERIC(15,2),
    VALOR_ICMS NUMERIC(15,2),
    VALOR_CONTABEL NUMERIC(15,2),
    ISENTAS NUMERIC(15,2))
AS
begin
   for Select E.IDCFOP, C.CFOP, C.DESCRICAO, sum(I.PRECOVENDA*I.QTDECOMPRA), sum(I.VALOR_BASE) as VALOR_BASE, sum(I.VALOR_ICMS) as VALOR_ICMS From ITENSENTRADA I
    
    join ENTRADA E
      on E.IDFILIAL = I.IDFILIAL
     and E.IDNOTA = I.IDNOTA
    
    join CFOP C
      on C.IDFILIAL = E.IDFILIAL
     and C.IDCFOP = E.IDCFOP
    
    
    where I.IDFILIAL = :IDFILIAL
      and E.DATAENTRADA between :DATAENTRADAINI and :DATAENTRADAFIM
      and E.DATANOTAFISCAL between :DATANOTAFISCALINI and :DATANOTAFISCALFIM
      and E.IDCFOP between :IDCFOPINI and :IDCFOPFIM
      and E.BONIFICACAO = 'N'
      and E.TIPO_ENTRADA = 'N'
     group by E.IDCFOP, C.CFOP , C.DESCRICAO

     into :IDCFOP, :CFOP, :DESCRICAO, :VALOR_CONTABEL, :VALOR_BASE, :VALOR_ICMS
    do
    begin
    if ((VALOR_CONTABEL <> 0) and (VALOR_BASE <> 0)) then
      ISENTAS = VALOR_CONTABEL - VALOR_BASE;
  suspend;
    end
end^


ALTER PROCEDURE REL_REGISTRO_APURACAO_ICMS_SAID (
    IDFILIAL SMALLINT,
    DATANOTAINI DATE,
    DATANOTAFIM DATE,
    IDCFOPINI SMALLINT,
    IDCFOPFIM SMALLINT,
    SITUACAOINI VARCHAR(1),
    SITUACAOFIM VARCHAR(1))
RETURNS (
    CFOP VARCHAR(5),
    IDCFOP SMALLINT,
    DESCRICAO VARCHAR(40),
    VALOR_BASE NUMERIC(15,2),
    VALOR_ICMS NUMERIC(15,2),
    VALOR_CONTABEL NUMERIC(15,2),
    ISENTAS NUMERIC(15,2))
AS
begin
   for Select E.IDCFOP, C.CFOP, C.DESCRICAO, sum(I.PRECOVENDA*I.QTDEPEDIDO), sum(I.VALOR_BASE) as VALOR_BASE, sum(I.VALOR_ICMS) as VALOR_ICMS From ITENSNOTA I
    
    join NOTA E
      on E.IDFILIAL = I.IDFILIAL
     and E.IDNOTA = I.IDNOTA
    
    join CFOP C
      on C.IDFILIAL = E.IDFILIAL
     and C.IDCFOP = E.IDCFOP
    
    
    where I.IDFILIAL = :IDFILIAL
      and E.DATANOTA between :DATANOTAINI and :DATANOTAFIM
      and E.IDCFOP between :IDCFOPINI and :IDCFOPFIM
      and (case when E.SITUACAONOTA is null then 'V' else E.SITUACAONOTA end) between :SITUACAOINI and :SITUACAOFIM
     group by E.IDCFOP,C.CFOP , C.DESCRICAO

     into :IDCFOP,:CFOP, :DESCRICAO, :VALOR_CONTABEL, :VALOR_BASE, :VALOR_ICMS
    do
    begin
    if ((VALOR_CONTABEL <> 0) and (VALOR_BASE <> 0)) then
      ISENTAS = VALOR_CONTABEL - VALOR_BASE;
  suspend;
    end
end^


ALTER PROCEDURE REL_REPRESENTANTE_FORNECEDOR (
    IDFILIAL INTEGER,
    DTINI DATE,
    DTFIM DATE,
    IDFORNECEDOR_01 INTEGER,
    IDFORNECEDOR_02 INTEGER,
    IDFORNECEDOR_03 INTEGER,
    IDFORNECEDOR_04 INTEGER)
RETURNS (
    IDREPRESENTANTE INTEGER,
    NOMEREPRESENTANTE VARCHAR(45),
    POSITIVADO_01 INTEGER,
    POSITIVADO_02 INTEGER,
    POSITIVADO_03 INTEGER,
    POSITIVADO_04 INTEGER,
    REALIZADO_01 NUMERIC(14,2),
    REALIZADO_02 NUMERIC(14,2),
    REALIZADO_03 NUMERIC(14,2),
    REALIZADO_04 NUMERIC(14,2))
AS
DECLARE VARIABLE VDEV_01 INTEGER;
DECLARE VARIABLE VDEV_02 INTEGER;
DECLARE VARIABLE VDEV_03 INTEGER;
DECLARE VARIABLE VDEV_04 INTEGER;
DECLARE VARIABLE VVALORDEV_01 NUMERIC(14,2);
DECLARE VARIABLE VVALORDEV_02 NUMERIC(14,2);
DECLARE VARIABLE VVALORDEV_03 NUMERIC(14,2);
DECLARE VARIABLE VVALORDEV_04 NUMERIC(14,2);
begin
  POSITIVADO_01  = 0; POSITIVADO_02  = 0; POSITIVADO_03  = 0; POSITIVADO_04  = 0;
  REALIZADO_01 = 0;   REALIZADO_02 = 0;   REALIZADO_03 = 0;   REALIZADO_04 = 0;

  if (:IDFORNECEDOR_01 <> -1) then begin
      for select P.IDREPRESENTANTE, R.NOME, count(distinct P.IDCLIENTE), sum(IT.PRECOVENDA*IT.QTDEPEDIDO) from ITENSPEDIDO IT
    
        join PEDIDO P
          on P.IDFILIAL = :IDFILIAL
         and P.IDPEDIDO = IT.IDPEDIDO
         and P.IDFOLHA  = IT.IDFOLHA
    
        join PRODUTO PR
          on PR.IDFILIAL = :IDFILIAL
         and PR.IDPRODUTO = IT.IDPRODUTO
    
        join REPRESENTANTE R
          on R.IDFILIAL = :IDFILIAL
         and R.IDREPRESENTANTE = P.IDREPRESENTANTE
         and R.SITUACAO='A'
    
        where IT.IDFILIAL = :IDFILIAL
          and P.DATAPEDIDO between :DTINI and :DTFIM
          and P.SITUACAOPEDIDO = 'V'
          and IT.TROCA = 'N'
          and PR.IDFORNECEDOR = :IDFORNECEDOR_01
       group by P.IDREPRESENTANTE, R.NOME
       into :IDREPRESENTANTE, :NOMEREPRESENTANTE, :POSITIVADO_01, :REALIZADO_01
      do
        begin

         select count(distinct D.IDCLIENTE),
                  sum(IT.PRECOVENDA*IT.QTDEPEDIDO) from ITENSDEVOLUCAO IT
    
             right join DEVOLUCAO D
               on D.IDFILIAL = :IDFILIAL
              and D.IDPEDIDO = IT.IDPEDIDO
              and D.IDFOLHA = IT.IDFOLHA
    
            join PRODUTO PR
              on PR.IDFILIAL = :IDFILIAL
             and PR.IDPRODUTO = IT.IDPRODUTO
    
           where IT.IDFILIAL = :IDFILIAL
             and IT.TROCA = 'N'
             and D.DATAPEDIDO between :DTINI and :DTFIM
             and D.SITUACAOPEDIDO = 'V'
             and D.IDREPRESENTANTE = :IDREPRESENTANTE
             and PR.IDFORNECEDOR = :IDFORNECEDOR_01
            into :vDEV_01, :VVALORDEV_01;
            if (:VDEV_01 is null) then VDEV_01 = 0;
           /* POSITIVADO_01 = :POSITIVADO_01-:vDEV_01; */
    
           if (:VVALORDEV_01 is null) then vVALORDEV_01 = 0;
           REALIZADO_01 = :REALIZADO_01-:VVALORDEV_01;
    
           if (:POSITIVADO_01 is null) then POSITIVADO_01 = 0;
           if (:REALIZADO_01 is null) then REALIZADO_01 = 0;
          suspend;
        end
  end

  POSITIVADO_01  = 0; POSITIVADO_02  = 0; POSITIVADO_03  = 0; POSITIVADO_04  = 0;
  REALIZADO_01 = 0;   REALIZADO_02 = 0;   REALIZADO_03 = 0;   REALIZADO_04 = 0;


  if (:IDFORNECEDOR_02 <> -1) then begin
      for select P.IDREPRESENTANTE, R.NOME, count(distinct P.IDCLIENTE), sum(IT.PRECOVENDA*IT.QTDEPEDIDO) from ITENSPEDIDO IT
    
        join PEDIDO P
          on P.IDFILIAL = :IDFILIAL
         and P.IDPEDIDO = IT.IDPEDIDO
         and P.IDFOLHA  = IT.IDFOLHA
    
        join PRODUTO PR
          on PR.IDFILIAL = :IDFILIAL
         and PR.IDPRODUTO = IT.IDPRODUTO
    
        join REPRESENTANTE R
          on R.IDFILIAL = :IDFILIAL
         and R.IDREPRESENTANTE = P.IDREPRESENTANTE
         and R.SITUACAO='A'

    
        where IT.IDFILIAL = :IDFILIAL
          and P.DATAPEDIDO between :DTINI and :DTFIM
          and P.SITUACAOPEDIDO = 'V'
          and IT.TROCA = 'N'
          and PR.IDFORNECEDOR = :IDFORNECEDOR_02
       group by P.IDREPRESENTANTE, R.NOME
       into :IDREPRESENTANTE, :NOMEREPRESENTANTE,:POSITIVADO_02, :REALIZADO_02
      do
        begin
         select count(distinct D.IDCLIENTE),
                  sum(IT.PRECOVENDA*IT.QTDEPEDIDO) from ITENSDEVOLUCAO IT
    
             right join DEVOLUCAO D
               on D.IDFILIAL = :IDFILIAL
              and D.IDPEDIDO = IT.IDPEDIDO
              and D.IDFOLHA = IT.IDFOLHA
    
            join PRODUTO PR
              on PR.IDFILIAL = :IDFILIAL
             and PR.IDPRODUTO = IT.IDPRODUTO
    
           where IT.IDFILIAL = :IDFILIAL
             and IT.TROCA = 'N'
             and D.SITUACAOPEDIDO = 'V'
             and D.IDREPRESENTANTE = :IDREPRESENTANTE
             and D.DATAPEDIDO between :DTINI and :DTFIM
             and PR.IDFORNECEDOR = :IDFORNECEDOR_02
            into :vDEV_02, :vVALORDEV_02;
            if (:VDEV_02 is null) then VDEV_02 = 0;
           /* POSITIVADO_02 = :POSITIVADO_02-:vDEV_02;  */
    
           if (:VVALORDEV_02 is null) then vVALORDEV_02 = 0;
           REALIZADO_02 = :REALIZADO_02-:VVALORDEV_02;
    
    
           if (:POSITIVADO_02 is null) then POSITIVADO_02 = 0;
           if (:REALIZADO_02 is null) then REALIZADO_02 = 0;
          suspend;
        end
  end

  POSITIVADO_01  = 0; POSITIVADO_02  = 0; POSITIVADO_03  = 0; POSITIVADO_04  = 0;
  REALIZADO_01 = 0;   REALIZADO_02 = 0;   REALIZADO_03 = 0;   REALIZADO_04 = 0;

  if (:IDFORNECEDOR_03 <> -1) then begin
      for select P.IDREPRESENTANTE, R.NOME, count(distinct P.IDCLIENTE), sum(IT.PRECOVENDA*IT.QTDEPEDIDO) from ITENSPEDIDO IT
    
        join PEDIDO P
          on P.IDFILIAL = :IDFILIAL
         and P.IDPEDIDO = IT.IDPEDIDO
         and P.IDFOLHA  = IT.IDFOLHA
    
        join PRODUTO PR
          on PR.IDFILIAL = :IDFILIAL
         and PR.IDPRODUTO = IT.IDPRODUTO
    
        join REPRESENTANTE R
          on R.IDFILIAL = :IDFILIAL
         and R.IDREPRESENTANTE = P.IDREPRESENTANTE
         and R.SITUACAO='A'

        where IT.IDFILIAL = :IDFILIAL
          and P.DATAPEDIDO between :DTINI and :DTFIM
          and P.SITUACAOPEDIDO = 'V'
          and IT.TROCA = 'N'
          and PR.IDFORNECEDOR = :IDFORNECEDOR_03
       group by P.IDREPRESENTANTE, R.NOME
       into :IDREPRESENTANTE, :NOMEREPRESENTANTE, :POSITIVADO_03, :REALIZADO_03
      do
        begin
         select count(distinct D.IDCLIENTE),
                  sum(IT.PRECOVENDA*IT.QTDEPEDIDO) from ITENSDEVOLUCAO IT
             right join DEVOLUCAO D
               on D.IDFILIAL = :IDFILIAL
              and D.IDPEDIDO = IT.IDPEDIDO
              and D.IDFOLHA = IT.IDFOLHA
    
            join PRODUTO PR
              on PR.IDFILIAL = :IDFILIAL
             and PR.IDPRODUTO = IT.IDPRODUTO
    
           where IT.IDFILIAL = :IDFILIAL
             and IT.TROCA = 'N'
             and D.SITUACAOPEDIDO = 'V'
             and D.IDREPRESENTANTE = :IDREPRESENTANTE
             and D.DATAPEDIDO between :DTINI and :DTFIM
             and PR.IDFORNECEDOR = :IDFORNECEDOR_03
            into :vDEV_03, :VVALORDEV_03;
            if (:VDEV_03 is null) then VDEV_03 = 0;
           /* POSITIVADO_03 = :POSITIVADO_03-:vDEV_03; */
    
           if (:VVALORDEV_03 is null) then vVALORDEV_03 = 0;
           REALIZADO_03 = :REALIZADO_03-:VVALORDEV_03;
    
    
           if (:POSITIVADO_03 is null) then POSITIVADO_03 = 0;
           if (:REALIZADO_03 is null) then REALIZADO_03 = 0;

          suspend;
        end
  end

  POSITIVADO_01  = 0; POSITIVADO_02  = 0; POSITIVADO_03  = 0; POSITIVADO_04  = 0;
  REALIZADO_01 = 0;   REALIZADO_02 = 0;   REALIZADO_03 = 0;   REALIZADO_04 = 0;

  if (:IDFORNECEDOR_04 <> -1) then begin
      for select P.IDREPRESENTANTE, R.NOME, count(distinct P.IDCLIENTE), sum(IT.PRECOVENDA*IT.QTDEPEDIDO) from ITENSPEDIDO IT
    
        join PEDIDO P
          on P.IDFILIAL = :IDFILIAL
         and P.IDPEDIDO = IT.IDPEDIDO
         and P.IDFOLHA  = IT.IDFOLHA
    
        join PRODUTO PR
          on PR.IDFILIAL = :IDFILIAL
         and PR.IDPRODUTO = IT.IDPRODUTO
    
        join REPRESENTANTE R
          on R.IDFILIAL = :IDFILIAL
         and R.IDREPRESENTANTE = P.IDREPRESENTANTE
         and R.SITUACAO='A'
    
        where IT.IDFILIAL = :IDFILIAL
          and P.DATAPEDIDO between :DTINI and :DTFIM
          and P.SITUACAOPEDIDO = 'V'
          and IT.TROCA = 'N'
          and PR.IDFORNECEDOR = :IDFORNECEDOR_04
       group by P.IDREPRESENTANTE, R.NOME
       into :IDREPRESENTANTE, :NOMEREPRESENTANTE, :POSITIVADO_04, :REALIZADO_04
      do
        begin

         select count(distinct D.IDCLIENTE),
                  sum(IT.PRECOVENDA*IT.QTDEPEDIDO) from ITENSDEVOLUCAO IT
             right join DEVOLUCAO D
               on D.IDFILIAL = :IDFILIAL
              and D.IDPEDIDO = IT.IDPEDIDO
              and D.IDFOLHA = IT.IDFOLHA
    
            join PRODUTO PR
              on PR.IDFILIAL = :IDFILIAL
             and PR.IDPRODUTO = IT.IDPRODUTO
    
           where IT.IDFILIAL = :IDFILIAL
             and IT.TROCA = 'N'
             and D.SITUACAOPEDIDO = 'V'
             and D.IDREPRESENTANTE = :IDREPRESENTANTE
             and D.DATAPEDIDO between :DTINI and :DTFIM
             and PR.IDFORNECEDOR = :IDFORNECEDOR_04
            into :vDEV_04, :VVALORDEV_04;
            if (:VDEV_04 is null) then VDEV_04 = 0;
           /* POSITIVADO_04 = :POSITIVADO_04-:vDEV_04; */
    
           if (:VVALORDEV_04 is null) then vVALORDEV_04 = 0;
           REALIZADO_04 = :REALIZADO_04-:VVALORDEV_04;
    
    
           if (:POSITIVADO_04 is null) then POSITIVADO_04 = 0;
           if (:REALIZADO_04 is null) then REALIZADO_04 = 0;
          suspend;
        end
  end

  POSITIVADO_01  = 0; POSITIVADO_02  = 0; POSITIVADO_03  = 0; POSITIVADO_04  = 0;
  REALIZADO_01 = 0;   REALIZADO_02 = 0;   REALIZADO_03 = 0;   REALIZADO_04 = 0;
end^


ALTER PROCEDURE REL_REPRESENTANTE_GRUPO (
    IDFILIAL INTEGER,
    DTINI DATE,
    DTFIM DATE,
    IDGRUPO_01 INTEGER,
    IDGRUPO_02 INTEGER,
    IDGRUPO_03 INTEGER,
    IDGRUPO_04 INTEGER)
RETURNS (
    IDREPRESENTANTE INTEGER,
    NOMEREPRESENTANTE VARCHAR(45),
    POSITIVADO_01 INTEGER,
    POSITIVADO_02 INTEGER,
    POSITIVADO_03 INTEGER,
    POSITIVADO_04 INTEGER,
    REALIZADO_01 NUMERIC(14,2),
    REALIZADO_02 NUMERIC(14,2),
    REALIZADO_03 NUMERIC(14,2),
    REALIZADO_04 NUMERIC(14,2))
AS
DECLARE VARIABLE VDEV_01 INTEGER;
DECLARE VARIABLE VDEV_02 INTEGER;
DECLARE VARIABLE VDEV_03 INTEGER;
DECLARE VARIABLE VDEV_04 INTEGER;
DECLARE VARIABLE VVALORDEV_01 NUMERIC(14,2);
DECLARE VARIABLE VVALORDEV_02 NUMERIC(14,2);
DECLARE VARIABLE VVALORDEV_03 NUMERIC(14,2);
DECLARE VARIABLE VVALORDEV_04 NUMERIC(14,2);
begin
  POSITIVADO_01  = 0; POSITIVADO_02  = 0; POSITIVADO_03  = 0; POSITIVADO_04  = 0;
  REALIZADO_01 = 0;   REALIZADO_02 = 0;   REALIZADO_03 = 0;   REALIZADO_04 = 0;

  if (:IDGRUPO_01 <> -1) then begin
      for select P.IDREPRESENTANTE, R.NOME, count(distinct P.IDCLIENTE), sum(IT.PRECOVENDA*IT.QTDEPEDIDO) from ITENSPEDIDO IT
    
        join PEDIDO P
          on P.IDFILIAL = :IDFILIAL
         and P.IDPEDIDO = IT.IDPEDIDO
         and P.IDFOLHA  = IT.IDFOLHA
    
        join PRODUTO PR
          on PR.IDFILIAL = :IDFILIAL
         and PR.IDPRODUTO = IT.IDPRODUTO
    
        join REPRESENTANTE R
          on R.IDFILIAL = :IDFILIAL
         and R.IDREPRESENTANTE = P.IDREPRESENTANTE
         and R.situacao='A'
    
        where IT.IDFILIAL = :IDFILIAL
          and P.DATAPEDIDO between :DTINI and :DTFIM

          and exists(select T.ID from TABELA_AUXILIAR T
                    where T.IDGRUPO = :IDGRUPO_01
                      and T.ID = PR.IDSUB_GRUPO)

          and P.SITUACAOPEDIDO = 'V'
          and IT.TROCA = 'N'
          and PR.IDGRUPO = :IDGRUPO_01
       group by P.IDREPRESENTANTE, R.NOME
       into :IDREPRESENTANTE, :NOMEREPRESENTANTE,:POSITIVADO_01, :REALIZADO_01
      do
        begin

         select count(distinct D.IDCLIENTE),
                  sum(IT.PRECOVENDA*IT.QTDEPEDIDO) from ITENSDEVOLUCAO IT
    
             right join DEVOLUCAO D
               on D.IDFILIAL = :IDFILIAL
              and D.IDPEDIDO = IT.IDPEDIDO
              and D.IDFOLHA = IT.IDFOLHA
    
            join PRODUTO PR
              on PR.IDFILIAL = :IDFILIAL
             and PR.IDPRODUTO = IT.IDPRODUTO
    
           where IT.IDFILIAL = :IDFILIAL
             and IT.TROCA = 'N'
             and D.DATAPEDIDO between :DTINI and :DTFIM
             and D.SITUACAOPEDIDO = 'V'
             and D.IDREPRESENTANTE = :IDREPRESENTANTE
             and PR.IDGRUPO = :IDGRUPO_01
            into :vDEV_01, :VVALORDEV_01;
            if (:VDEV_01 is null) then VDEV_01 = 0;
           /* POSITIVADO_01 = :POSITIVADO_01-:vDEV_01;  */
    
           if (:VVALORDEV_01 is null) then vVALORDEV_01 = 0;
           REALIZADO_01 = :REALIZADO_01-:VVALORDEV_01;
    
           if (:POSITIVADO_01 is null) then POSITIVADO_01 = 0;
           if (:REALIZADO_01 is null) then REALIZADO_01 = 0;
          suspend;
        end
  end

  POSITIVADO_01  = 0; POSITIVADO_02  = 0; POSITIVADO_03  = 0; POSITIVADO_04  = 0;
  REALIZADO_01 = 0;   REALIZADO_02 = 0;   REALIZADO_03 = 0;   REALIZADO_04 = 0;

  if (:IDGRUPO_02 <> -1) then begin
      for select P.IDREPRESENTANTE, R.NOME, count(distinct P.IDCLIENTE), sum(IT.PRECOVENDA*IT.QTDEPEDIDO) from ITENSPEDIDO IT
    
        join PEDIDO P
          on P.IDFILIAL = :IDFILIAL
         and P.IDPEDIDO = IT.IDPEDIDO
         and P.IDFOLHA  = IT.IDFOLHA
    
        join PRODUTO PR
          on PR.IDFILIAL = :IDFILIAL
         and PR.IDPRODUTO = IT.IDPRODUTO
    
        join REPRESENTANTE R
          on R.IDFILIAL = :IDFILIAL
         and R.IDREPRESENTANTE = P.IDREPRESENTANTE
         and R.situacao='A'

        where IT.IDFILIAL = :IDFILIAL
          and P.DATAPEDIDO between :DTINI and :DTFIM
          and P.SITUACAOPEDIDO = 'V'
          and IT.TROCA = 'N'
          and PR.IDGRUPO = :IDGRUPO_02
          and exists(select T.ID from TABELA_AUXILIAR T
                    where T.IDGRUPO = :IDGRUPO_02
                      and T.ID = PR.IDSUB_GRUPO)

       group by P.IDREPRESENTANTE, R.NOME
       into :IDREPRESENTANTE, :NOMEREPRESENTANTE, :POSITIVADO_02, :REALIZADO_02
      do
        begin

         select count(distinct D.IDCLIENTE),
                  sum(IT.PRECOVENDA*IT.QTDEPEDIDO) from ITENSDEVOLUCAO IT
    
             right join DEVOLUCAO D
               on D.IDFILIAL = :IDFILIAL
              and D.IDPEDIDO = IT.IDPEDIDO
              and D.IDFOLHA = IT.IDFOLHA
    
            join PRODUTO PR
              on PR.IDFILIAL = :IDFILIAL
             and PR.IDPRODUTO = IT.IDPRODUTO
    
           where IT.IDFILIAL = :IDFILIAL
             and IT.TROCA = 'N'
             and D.SITUACAOPEDIDO = 'V'
             and D.IDREPRESENTANTE = :IDREPRESENTANTE
             and D.DATAPEDIDO between :DTINI and :DTFIM
             and PR.IDGRUPO = :IDGRUPO_02
            into :vDEV_02, :vVALORDEV_02;
            if (:VDEV_02 is null) then VDEV_02 = 0;
           /* POSITIVADO_02 = :POSITIVADO_02-:vDEV_02; */
    
           if (:VVALORDEV_02 is null) then vVALORDEV_02 = 0;
           REALIZADO_02 = :REALIZADO_02-:VVALORDEV_02;
    
    
           if (:POSITIVADO_02 is null) then POSITIVADO_02 = 0;
           if (:REALIZADO_02 is null) then REALIZADO_02 = 0;
          suspend;
        end
  end

  POSITIVADO_01  = 0; POSITIVADO_02  = 0; POSITIVADO_03  = 0; POSITIVADO_04  = 0;
  REALIZADO_01 = 0;   REALIZADO_02 = 0;   REALIZADO_03 = 0;   REALIZADO_04 = 0;

  if (:IDGRUPO_03 <> -1) then begin
      for select P.IDREPRESENTANTE, R.NOME, count(distinct P.IDCLIENTE), sum(IT.PRECOVENDA*IT.QTDEPEDIDO) from ITENSPEDIDO IT
    
        join PEDIDO P
          on P.IDFILIAL = :IDFILIAL
         and P.IDPEDIDO = IT.IDPEDIDO
         and P.IDFOLHA  = IT.IDFOLHA
    
        join PRODUTO PR
          on PR.IDFILIAL = :IDFILIAL
         and PR.IDPRODUTO = IT.IDPRODUTO
    
        join REPRESENTANTE R
          on R.IDFILIAL = :IDFILIAL
         and R.IDREPRESENTANTE = P.IDREPRESENTANTE
         and R.SITUACAO='A'
    
        where IT.IDFILIAL = :IDFILIAL
          and P.DATAPEDIDO between :DTINI and :DTFIM
          and P.SITUACAOPEDIDO = 'V'
          and IT.TROCA = 'N'
          and exists(select T.ID from TABELA_AUXILIAR T
                    where T.IDGRUPO = :IDGRUPO_03
                      and T.ID = PR.IDSUB_GRUPO)

          and PR.IDGRUPO = :IDGRUPO_03
       group by P.IDREPRESENTANTE, R.NOME
       into :IDREPRESENTANTE, :NOMEREPRESENTANTE, :POSITIVADO_03, :REALIZADO_03
      do
        begin

    
         select count(distinct D.IDCLIENTE),
                  sum(IT.PRECOVENDA*IT.QTDEPEDIDO) from ITENSDEVOLUCAO IT
             right join DEVOLUCAO D
               on D.IDFILIAL = :IDFILIAL
              and D.IDPEDIDO = IT.IDPEDIDO
              and D.IDFOLHA = IT.IDFOLHA
    
            join PRODUTO PR
              on PR.IDFILIAL = :IDFILIAL
             and PR.IDPRODUTO = IT.IDPRODUTO
    
           where IT.IDFILIAL = :IDFILIAL
             and IT.TROCA = 'N'
             and D.SITUACAOPEDIDO = 'V'
             and D.IDREPRESENTANTE = :IDREPRESENTANTE
             and D.DATAPEDIDO between :DTINI and :DTFIM
             and PR.IDGRUPO = :IDGRUPO_03
            into :vDEV_03, :VVALORDEV_03;
            if (:VDEV_03 is null) then VDEV_03 = 0;
           /* POSITIVADO_03 = :POSITIVADO_03-:vDEV_03;  */
    
           if (:VVALORDEV_03 is null) then vVALORDEV_03 = 0;
           REALIZADO_03 = :REALIZADO_03-:VVALORDEV_03;
    
    
           if (:POSITIVADO_03 is null) then POSITIVADO_03 = 0;
           if (:REALIZADO_03 is null) then REALIZADO_03 = 0;
          suspend;
        end
  end


  POSITIVADO_01  = 0; POSITIVADO_02  = 0; POSITIVADO_03  = 0; POSITIVADO_04  = 0;
  REALIZADO_01 = 0;   REALIZADO_02 = 0;   REALIZADO_03 = 0;   REALIZADO_04 = 0;

  if (:IDGRUPO_04 <> -1) then begin
      for select P.IDREPRESENTANTE, R.NOME, count(distinct P.IDCLIENTE), sum(IT.PRECOVENDA*IT.QTDEPEDIDO) from ITENSPEDIDO IT
    
        join PEDIDO P
          on P.IDFILIAL = :IDFILIAL
         and P.IDPEDIDO = IT.IDPEDIDO
         and P.IDFOLHA  = IT.IDFOLHA
    
        join PRODUTO PR
          on PR.IDFILIAL = :IDFILIAL
         and PR.IDPRODUTO = IT.IDPRODUTO
    
        join REPRESENTANTE R
          on R.IDFILIAL = :IDFILIAL
         and R.IDREPRESENTANTE = P.IDREPRESENTANTE
         and R.SITUACAO='A'
    
        where IT.IDFILIAL = :IDFILIAL
          and P.DATAPEDIDO between :DTINI and :DTFIM
          and P.SITUACAOPEDIDO = 'V'
          and IT.TROCA = 'N'
          and PR.IDGRUPO = :IDGRUPO_04
          and exists(select T.ID from TABELA_AUXILIAR T
                    where T.IDGRUPO = :IDGRUPO_04
                      and T.ID = PR.IDSUB_GRUPO)

       group by P.IDREPRESENTANTE, R.NOME
       into :IDREPRESENTANTE, :NOMEREPRESENTANTE, :POSITIVADO_04, :REALIZADO_04
      do
        begin
         select count(distinct D.IDCLIENTE),
                  sum(IT.PRECOVENDA*IT.QTDEPEDIDO) from ITENSDEVOLUCAO IT
             right join DEVOLUCAO D
               on D.IDFILIAL = :IDFILIAL
              and D.IDPEDIDO = IT.IDPEDIDO
              and D.IDFOLHA = IT.IDFOLHA
    
            join PRODUTO PR
              on PR.IDFILIAL = :IDFILIAL
             and PR.IDPRODUTO = IT.IDPRODUTO
    
           where IT.IDFILIAL = :IDFILIAL
             and IT.TROCA = 'N'
             and D.SITUACAOPEDIDO = 'V'
             and D.IDREPRESENTANTE = :IDREPRESENTANTE
             and D.DATAPEDIDO between :DTINI and :DTFIM
             and PR.IDGRUPO = :IDGRUPO_04
            into :vDEV_04, :VVALORDEV_04;
            if (:VDEV_04 is null) then VDEV_04 = 0;
           /* POSITIVADO_04 = :POSITIVADO_04-:vDEV_04; */
    
           if (:VVALORDEV_04 is null) then vVALORDEV_04 = 0;
           REALIZADO_04 = :REALIZADO_04-:VVALORDEV_04;
    
    
           if (:POSITIVADO_04 is null) then POSITIVADO_04 = 0;
           if (:REALIZADO_04 is null) then REALIZADO_04 = 0;
          suspend;
        end
  end

  POSITIVADO_01  = 0; POSITIVADO_02  = 0; POSITIVADO_03  = 0; POSITIVADO_04  = 0;
  REALIZADO_01 = 0;   REALIZADO_02 = 0;   REALIZADO_03 = 0;   REALIZADO_04 = 0;
end^


ALTER PROCEDURE REL_ROMANEIO_CARGA (
    IDFILIAL INTEGER,
    IDCONTROLE INTEGER)
RETURNS (
    IDPRODUTO INTEGER,
    NOMEPRODUTO VARCHAR(60) CHARACTER SET NONE,
    NOMEFORNECEDOR VARCHAR(60) CHARACTER SET NONE,
    IDGRUPO SMALLINT,
    NOMEGRUPO VARCHAR(25) CHARACTER SET NONE,
    IDUNIDADEMEDIDA INTEGER,
    PESO NUMERIC(10,3),
    EMBALAGEM VARCHAR(20) CHARACTER SET NONE,
    IDFORNECEDOR INTEGER,
    FATORCONVERSAO INTEGER,
    ABREVIATURA VARCHAR(10) CHARACTER SET NONE,
    QTDECAIXA NUMERIC(16,3),
    CODIGO_BARRA VARCHAR(15),
    DUN VARCHAR(15),
    TOTALPRODUTO NUMERIC(16,2),
    CAMARA_FRIA VARCHAR(3),
    IDCFOP INTEGER)
AS
begin
for select IT.IDPRODUTO,COLLATEBR(P.ESPECIFICACAO), COLLATEBR(F.NOME),
   P.IDUNIDADEMEDIDA, P.PESO, P.EMBALAGEM,F.IDFORNECEDOR, P.FATORCONVERSAO, UN.ABREVIATURA,
   sum(IT.QTDEPEDIDO*IT.FATORCONVERSAO), P.IDGRUPO, COLLATEBR(G.NOME), P.CODIGO_BARRA, P.DUN, sum(PE.TOTALPRODUTO), P.PRODUTO_CAMERA_FRIA from ITENSPEDIDO IT

right join ITENSROMANEIO ITR
  on ITR.IDFILIAL = :IDFILIAL
 and ITR.IDPEDIDO = IT.IDPEDIDO
 and ITR.IDFOLHA = IT.IDFOLHA
 and ((ITR.IDFOLHA is null) or (ITR.IDFOLHA = IT.IDFOLHA))

left join PEDIDO PE
  on PE.IDFILIAL = :IDFILIAL
 and PE.IDPEDIDO = IT.IDPEDIDO
 and PE.IDFOLHA = IT.IDFOLHA


join PRODUTO P
  on P.IDFILIAL = :IDFILIAL
 and P.IDPRODUTO = IT.IDPRODUTO

join GRUPO G
 on G.IDGRUPO = P.IDGRUPO

join UNIDADEMEDIDA  UN
   on UN.IDUNIDADEMEDIDA = P.IDUNIDADEMEDIDA
  and UN.IDFILIAL = :IDFILIAL

join FORNECEDOR  F
  on F.IDFORNECEDOR = P.IDFORNECEDOR

where P.IDFILIAL = :IDFILIAL
  and IT.IDFILIAL = :IDFILIAL
  and ITR.IDCONTROLE = :IDCONTROLE
  group by IT.IDPRODUTO,COLLATEBR(P.ESPECIFICACAO), COLLATEBR(F.NOME),
           P.IDUNIDADEMEDIDA, P.PESO, P.EMBALAGEM,F.IDFORNECEDOR, P.FATORCONVERSAO, UN.ABREVIATURA,
           P.IDGRUPO, COLLATEBR(G.NOME), P.CODIGO_BARRA, P.DUN, P.PRODUTO_CAMERA_FRIA
  into :IDPRODUTO, :NOMEPRODUTO, :NOMEFORNECEDOR, :IDUNIDADEMEDIDA, :PESO, :EMBALAGEM, :IDFORNECEDOR, :FATORCONVERSAO, :ABREVIATURA,
       :QTDECAIXA, :IDGRUPO, :NOMEGRUPO, :CODIGO_BARRA, :DUN, :TOTALPRODUTO, :CAMARA_FRIA

 do
   begin
       if (:CAMARA_FRIA = 'S') then
           CAMARA_FRIA = 'SIM';
       else
           CAMARA_FRIA = 'NAO';
       suspend;
   end 

end^


ALTER PROCEDURE REL_ROMANEIO_PEDIDO (
    IDFILIAL INTEGER,
    IDCONTROLE INTEGER)
RETURNS (
    IDPEDIDO INTEGER,
    IDFOLHA SMALLINT,
    NOMEFORMAPAGTO VARCHAR(40),
    NOMECLIENTE VARCHAR(60),
    TOTALPEDIDO NUMERIC(16,2),
    IDCLIENTE INTEGER,
    SITUACAO CHAR(1),
    CONDICAOPAGTO VARCHAR(30),
    IDREPRESENTANTE SMALLINT,
    BAIRRO VARCHAR(25),
    CIDADE VARCHAR(25),
    NOTAFISCAL INTEGER,
    FANTASIA VARCHAR(60),
    LUCRATIVIDADE NUMERIC(15,2),
    TOTALCUSTO NUMERIC(16,2),
    ROTA VARCHAR(3),
    IDCFOP INTEGER)
AS
begin
 for select IT.IDPEDIDO, P.IDFOLHA, COLLATEBR(F.DESCRICAO), COLLATEBR(C.NOME),
            P.TOTALPEDIDO, COLLATEBR(CPAGTO.DESCRICAO), P.IDCLIENTE, P.SITUACAOPEDIDO, P.IDREPRESENTANTE, C.BAIRRO,
            CI.NOME, P.NOTAFISCAL, C.FANTASIA, P.TOTALCUSTO, (1-(P.TOTALCUSTO/P.TOTALPEDIDO))*100 as LUCRATIVIDADE, C.PERIODO_VISITA,
            P.IDCFOP from PEDIDO P

 right join ITENSROMANEIO IT
    on IT.IDPEDIDO = P.IDPEDIDO
   and IT.IDFILIAL = :IDFILIAL
   and IT.IDCONTROLE = :IDCONTROLE
--   and IT.IDFOLHA = P.IDFOLHA
   
 left join FORMAPAGTO F
   on F.IDFORMAPAGTO = P.IDFORMAPAGTO

 join CLIENTE C
   on C.IDCLIENTE = P.IDCLIENTE

 left join CIDADE CI
   on CI.IDCIDADE = C.IDCIDADE

 left join CONDICAOPAGTO CPAGTO
   on CPAGTO.IDCONDICAOPAGTO = P.IDCONDICAOPAGTO

where P.IDFILIAL = :IDFILIAL
  and P.IDFOLHA = IT.IDFOLHA
    order by P.IDPEDIDO, P.IDFOLHA
      into :IDPEDIDO, :IDFOLHA, :NOMEFORMAPAGTO, :NOMECLIENTE, :TOTALPEDIDO, :CONDICAOPAGTO,:IDCLIENTE, :SITUACAO,
           :IDREPRESENTANTE, :BAIRRO, :CIDADE, :NOTAFISCAL, :FANTASIA, :TOTALCUSTO, :LUCRATIVIDADE, :ROTA, :IDCFOP

 do begin
   if (:SITUACAO in ('B','T')) then
   begin
      LUCRATIVIDADE = 0;
   end
   suspend;
 end
end^


ALTER PROCEDURE REL_SINTETICO_FINANCEIRO (
    IDFILIAL INTEGER,
    DTINI DATE,
    DTFIM DATE)
RETURNS (
    TITULO VARCHAR(15),
    IDFORMAPAGTO SMALLINT,
    DESCRICAO VARCHAR(35),
    SALDOANTERIOR NUMERIC(15,2),
    SALDODIARIO NUMERIC(15,2),
    TOTAL NUMERIC(15,2))
AS
begin
  /* A RECEBER */
  for select R.IDFORMAPAGTO, F.DESCRICAO, sum(R.VALORDOCUMENTO) from RECEBER R

      join FORMAPAGTO F
        on F.IDFORMAPAGTO = R.IDFORMAPAGTO

     where R.IDFILIAL = :IDFILIAL
       and R.DATAVENCIMENTO between :DTINI and :DTFIM
       and R.VALORPAGAMENTO is null
     group by R.IDFORMAPAGTO, F.DESCRICAO
     into :IDFORMAPAGTO, :DESCRICAO, :SALDODIARIO
  do
    begin
      TITULO = 'A Receber';
      select sum(R.VALORDOCUMENTO)  from RECEBER R
          where R.IDFILIAL = :IDFILIAL
            and R.IDFORMAPAGTO = :IDFORMAPAGTO
            and R.DATAVENCIMENTO < :DTINI
            and R.VALORPAGAMENTO is null
         into :SALDOANTERIOR;
      if (:SALDOANTERIOR is null) then SALDOANTERIOR = 0;
      if (:SALDODIARIO is null) then SALDODIARIO = 0;
      TOTAL = :SALDOANTERIOR+:SALDODIARIO;
      suspend;
    end


  /* RECIDOS */
  for select R.IDFORMAPAGTO, F.DESCRICAO, sum(R.VALORPAGAMENTO) from RECEBER R

      join FORMAPAGTO F
        on F.IDFORMAPAGTO = R.IDFORMAPAGTO

     where R.IDFILIAL = :IDFILIAL
       and R.DATAPAGAMENTO between :DTINI and :DTFIM
       and not R.VALORPAGAMENTO is null
     group by R.IDFORMAPAGTO, F.DESCRICAO
     into :IDFORMAPAGTO, :DESCRICAO, :SALDODIARIO
  do
    begin
      TITULO = 'Recebidos';
      select sum(R.VALORPAGAMENTO)  from RECEBER R
          where R.IDFILIAL = :IDFILIAL
            and R.IDFORMAPAGTO = :IDFORMAPAGTO
            and R.DATAPAGAMENTO < :DTINI
            and not R.VALORPAGAMENTO is null
         into :SALDOANTERIOR;
      if (:SALDOANTERIOR is null) then SALDOANTERIOR = 0;
      if (:SALDODIARIO is null) then SALDODIARIO = 0;
      TOTAL = :SALDOANTERIOR+:SALDODIARIO;
      suspend;
    end


  /* A PAGAR */
  for select P.IDFORMAPAGTO, F.DESCRICAO, sum(P.VALORDOCUMENTO) from PAGAR P

      join FORMAPAGTO F
        on F.IDFORMAPAGTO = P.IDFORMAPAGTO

     where P.IDFILIAL = :IDFILIAL
       and P.DATAVENCIMENTO between :DTINI and :DTFIM
       and P.VALORPAGAMENTO is null
     group by P.IDFORMAPAGTO, F.DESCRICAO
     into :IDFORMAPAGTO, :DESCRICAO, :SALDODIARIO
  do
    begin
      TITULO = 'A Pagar';
      select sum(P.VALORDOCUMENTO)  from PAGAR P
          where P.IDFILIAL = :IDFILIAL
            and P.IDFORMAPAGTO = :IDFORMAPAGTO
            and P.DATAVENCIMENTO < :DTINI
            and P.VALORPAGAMENTO is null
         into :SALDOANTERIOR;
      if (:SALDOANTERIOR is null) then SALDOANTERIOR = 0;
      if (:SALDODIARIO is null) then SALDODIARIO = 0;
      TOTAL = :SALDOANTERIOR+:SALDODIARIO;
      suspend;
    end


  /* PAGAS */
  for select P.IDFORMAPAGTO, F.DESCRICAO, sum(P.VALORPAGAMENTO) from PAGAR P

      join FORMAPAGTO F
        on F.IDFORMAPAGTO = P.IDFORMAPAGTO

     where P.IDFILIAL = :IDFILIAL
       and P.DATAPAGAMENTO between :DTINI and :DTFIM
       and not P.VALORPAGAMENTO is null
     group by P.IDFORMAPAGTO, F.DESCRICAO
     into :IDFORMAPAGTO, :DESCRICAO, :SALDODIARIO
  do
    begin
      TITULO = 'Pagas';
      select sum(P.VALORPAGAMENTO)  from PAGAR P
          where P.IDFILIAL = :IDFILIAL
            and P.IDFORMAPAGTO = :IDFORMAPAGTO
            and P.DATAPAGAMENTO < :DTINI
            and not P.VALORPAGAMENTO is null
         into :SALDOANTERIOR;
      if (:SALDOANTERIOR is null) then SALDOANTERIOR = 0;
      if (:SALDODIARIO is null) then SALDODIARIO = 0;
      TOTAL = :SALDOANTERIOR+:SALDODIARIO;
      suspend;
    end
end^


ALTER PROCEDURE REL_SUGESTAO_COMPRA (
    IDFILIAL INTEGER,
    IDFORINI INTEGER,
    IDFORFIM INTEGER,
    IDGRUPOINI SMALLINT,
    IDGRUPOFIM SMALLINT,
    SITUACAOINI VARCHAR(1),
    SITUACAOFIM VARCHAR(1),
    IDSUB_GRUPOINI SMALLINT,
    IDSUB_GRUPOFIM SMALLINT)
RETURNS (
    IDPRODUTO INTEGER,
    ESPECIFICACAO VARCHAR(60),
    IDUNIDADEMEDIDA SMALLINT,
    UNIDADE VARCHAR(6),
    FATORCONVERSAO INTEGER,
    QTDEATUAL NUMERIC(10,3),
    NOMEFORNECEDOR VARCHAR(60),
    IDFORNECEDOR INTEGER,
    EMBALAGEM VARCHAR(10),
    QTDEMINIMA NUMERIC(10,3),
    IDFABRICA INTEGER,
    CUSTONOTA NUMERIC(14,2),
    CUSTOENCARGOS NUMERIC(14,2),
    PRECOVENDA NUMERIC(14,2))
AS
begin
    for select P.IDPRODUTO, P.ESPECIFICACAO,  P.IDUNIDADEMEDIDA, UM.ABREVIATURA, UM.FATORCONVERSAO, P.QTDEATUAL, F.NOME,P.IDFORNECEDOR, P.EMBALAGEM, P.QTDEMINIMA,
               FP.IDPRODUTO_FAB, P.CUSTONOTA, P.CUSTOSENCARGOS, P.PRECOVENDA
        from PRODUTO P

       left join FORNECEDOR_PRODUTO FP
           on FP.IDPRODUTO = P.IDPRODUTO
          and FP.IDFORNECEDOR = P.IDFORNECEDOR
          and FP.IDFILIAL = :IDFILIAL

       join FORNECEDOR F
         on F.IDFORNECEDOR = P.IDFORNECEDOR

       join UNIDADEMEDIDA UM
         on UM.IDUNIDADEMEDIDA = P.IDUNIDADEMEDIDA
        and UM.IDFILIAL = P.IDFILIAL
    
       where P.IDFILIAL = :IDFILIAL
         and P.IDGRUPO between :IDGRUPOINI and :IDGRUPOFIM
         and P.IDFORNECEDOR between :IDFORINI and :IDFORFIM
         and P.IDSUB_GRUPO between :IDSUB_GRUPOINI and :IDSUB_GRUPOFIM
         and P.EXCLUIDO is null
         and P.SITUACAOPRODUTO between :SITUACAOINI and :SITUACAOFIM
       into :IDPRODUTO, :ESPECIFICACAO, :IDUNIDADEMEDIDA, :UNIDADE, :FATORCONVERSAO,
           :QTDEATUAL, :NOMEFORNECEDOR, :IDFORNECEDOR, :EMBALAGEM, :QTDEMINIMA, :IDFABRICA, :CUSTONOTA, :CUSTOENCARGOS, :PRECOVENDA
  do
     begin
         if (IDFABRICA is null) then
             IDFABRICA = :IDPRODUTO;
         suspend;
     end
end^


ALTER PROCEDURE REL_TRIMESTRAL_PRODUTO (
    IDFILIAL SMALLINT,
    DT1_MESANOINI DATE,
    DT1_MESANOFIM DATE,
    DT2_MESANOINI DATE,
    DT2_MESANOFIM DATE)
RETURNS (
    IDPRODUTO INTEGER,
    NOMEPRODUTO VARCHAR(60),
    VALORLIQUIDO_1 NUMERIC(14,2),
    VALORLIQUIDO_2 NUMERIC(14,2),
    QTDELIQUIDO_1 NUMERIC(10,3),
    QTDELIQUIDO_2 NUMERIC(10,3),
    NOMEGRUPO VARCHAR(25),
    IDGRUPO SMALLINT)
AS
DECLARE VARIABLE VDEV_VALORLIQUIDO_1 NUMERIC(16,2);
DECLARE VARIABLE VDEV_QTDELIQUIDO_1 NUMERIC(10,3);
DECLARE VARIABLE VDEV_VALORLIQUIDO_2 NUMERIC(16,2);
DECLARE VARIABLE VDEV_QTDELIQUIDO_2 NUMERIC(10,3);
begin

   for select IT.IDPRODUTO, PR.ESPECIFICACAO, G.NOME, PR.IDGRUPO,
                                              sum(IT.PRECOVENDA*IT.QTDEPEDIDO),
                                              sum(IT.QTDEPEDIDO*IT.FATORCONVERSAO)  from ITENSPEDIDO IT

      right join PEDIDO P
         on P.IDFILIAL = :IDFILIAL
        and P.IDPEDIDO = IT.IDPEDIDO
        and P.IDFOLHA = IT.IDFOLHA

      left join PRODUTO PR
         on PR.IDFILIAL = :IDFILIAL
        and PR.IDPRODUTO = IT.IDPRODUTO

      left join GRUPO G
         on G.IDGRUPO = PR.IDGRUPO
        and G.IDFILIAL = :IDFILIAL

      where IT.IDFILIAL = :IDFILIAL
        and P.SITUACAOPEDIDO = 'V'
        and IT.TROCA = 'N'
        and (extract(month from P.DATAPEDIDO) between extract(month from :DT1_MESANOINI) and extract(month from :DT1_MESANOFIM)
                and extract(year from P.DATAPEDIDO) between extract(year from :DT1_MESANOINI) and extract(year from :DT1_MESANOFIM))
      group by IT.IDPRODUTO, PR.ESPECIFICACAO, G.NOME, PR.IDGRUPO
      into :IDPRODUTO, :NOMEPRODUTO, :NOMEGRUPO, :IDGRUPO, :VALORLIQUIDO_1,:QTDELIQUIDO_1

   do
     begin

       select sum(IT.PRECOVENDA*IT.QTDEPEDIDO),
              sum(IT.QTDEPEDIDO*IT.FATORCONVERSAO)  from ITENSDEVOLUCAO IT

       right join DEVOLUCAO D
          on D.IDFILIAL = :IDFILIAL
         and D.IDPEDIDO = IT.IDPEDIDO
         and D.IDFOLHA = IT.IDFOLHA

      left join PRODUTO PR
         on PR.IDFILIAL = :IDFILIAL
        and PR.IDPRODUTO = IT.IDPRODUTO

       where IT.IDFILIAL = :IDFILIAL
         and IT.IDPRODUTO = :IDPRODUTO
         and D.SITUACAOPEDIDO = 'V'
         and IT.TROCA = 'N'
         and (extract(month from D.DATAPEDIDO) between extract(month from :DT1_MESANOINI) and extract(month from :DT1_MESANOFIM)
                 and extract(year from D.DATAPEDIDO) between extract(year from :DT1_MESANOINI) and extract(year from :DT1_MESANOFIM))
       into :vDEV_VALORLIQUIDO_1,:vDEV_QTDELIQUIDO_1;

       if (VDEV_QTDELIQUIDO_1 is null) then VDEV_QTDELIQUIDO_1 = 0;
       if (VDEV_VALORLIQUIDO_1 is null) then VDEV_VALORLIQUIDO_1 = 0;
       if (QTDELIQUIDO_1 is null) then QTDELIQUIDO_1 = 0;
       if (VALORLIQUIDO_1 is null) then VALORLIQUIDO_1 = 0;

       if (VDEV_QTDELIQUIDO_2 is null) then VDEV_QTDELIQUIDO_2 = 0;
       if (VDEV_VALORLIQUIDO_2 is null) then VDEV_VALORLIQUIDO_2 = 0;
       if (QTDELIQUIDO_2 is null) then QTDELIQUIDO_2 = 0;
       if (VALORLIQUIDO_2 is null) then VALORLIQUIDO_2 = 0;

       VALORLIQUIDO_1 = VALORLIQUIDO_1-:VDEV_VALORLIQUIDO_1;
       QTDELIQUIDO_1 = QTDELIQUIDO_1-:VDEV_QTDELIQUIDO_1;
         suspend;
     end



   VDEV_QTDELIQUIDO_1 = 0;
   VDEV_VALORLIQUIDO_1 = 0;
   QTDELIQUIDO_1 = 0;
   VALORLIQUIDO_1 = 0;

   VDEV_QTDELIQUIDO_2 = 0;
   VDEV_VALORLIQUIDO_2 = 0;
   QTDELIQUIDO_2 = 0;
   VALORLIQUIDO_2 = 0;


   -- O SEGUNDO PERIODO
   for select IT.IDPRODUTO, PR.ESPECIFICACAO, G.NOME, PR.IDGRUPO,
                                              sum(IT.PRECOVENDA*IT.QTDEPEDIDO),
                                              sum(IT.QTDEPEDIDO*IT.FATORCONVERSAO)  from ITENSPEDIDO IT

      right join PEDIDO P
         on P.IDFILIAL = :IDFILIAL
        and P.IDPEDIDO = IT.IDPEDIDO
        and P.IDFOLHA = IT.IDFOLHA

      left join PRODUTO PR
         on PR.IDFILIAL = :IDFILIAL
        and PR.IDPRODUTO = IT.IDPRODUTO

      left join GRUPO G
         on G.IDGRUPO = PR.IDGRUPO
        and G.IDFILIAL = :IDFILIAL

      where IT.IDFILIAL = :IDFILIAL
        and P.SITUACAOPEDIDO = 'V'
        and IT.TROCA = 'N'
        and (extract(month from P.DATAPEDIDO) between extract(month from :DT2_MESANOINI) and extract(month from :DT2_MESANOFIM)
                and extract(year from P.DATAPEDIDO) between extract(year from :DT2_MESANOINI) and extract(year from :DT2_MESANOFIM))
      group by IT.IDPRODUTO, PR.ESPECIFICACAO, G.NOME, PR.IDGRUPO
      into :IDPRODUTO, :NOMEPRODUTO, :NOMEGRUPO, :IDGRUPO, :VALORLIQUIDO_2,:QTDELIQUIDO_2

   do
     begin
       select sum(IT.PRECOVENDA*IT.QTDEPEDIDO),
              sum(IT.QTDEPEDIDO*IT.FATORCONVERSAO)  from ITENSDEVOLUCAO IT

       right join DEVOLUCAO D
          on D.IDFILIAL = :IDFILIAL
         and D.IDPEDIDO = IT.IDPEDIDO
         and D.IDFOLHA = IT.IDFOLHA

      left join PRODUTO PR
         on PR.IDFILIAL = :IDFILIAL
        and PR.IDPRODUTO = IT.IDPRODUTO

       where IT.IDFILIAL = :IDFILIAL
         and IT.IDPRODUTO = :IDPRODUTO
         and D.SITUACAOPEDIDO = 'V'
         and IT.TROCA = 'N'
         and (extract(month from D.DATAPEDIDO) between extract(month from :DT2_MESANOINI) and extract(month from :DT2_MESANOFIM)
                 and extract(year from D.DATAPEDIDO) between extract(year from :DT2_MESANOINI) and extract(year from :DT2_MESANOFIM))
       into :vDEV_VALORLIQUIDO_2,:vDEV_QTDELIQUIDO_2;

       if (VDEV_QTDELIQUIDO_2 is null) then VDEV_QTDELIQUIDO_2 = 0;
       if (VDEV_VALORLIQUIDO_2 is null) then VDEV_VALORLIQUIDO_2 = 0;
       if (QTDELIQUIDO_2 is null) then QTDELIQUIDO_2 = 0;
       if (VALORLIQUIDO_2 is null) then VALORLIQUIDO_2 = 0;

       if (VDEV_QTDELIQUIDO_1 is null) then VDEV_QTDELIQUIDO_1 = 0;
       if (VDEV_VALORLIQUIDO_1 is null) then VDEV_VALORLIQUIDO_1 = 0;
       if (QTDELIQUIDO_1 is null) then QTDELIQUIDO_1 = 0;
       if (VALORLIQUIDO_1 is null) then VALORLIQUIDO_1 = 0;

       VALORLIQUIDO_2 = VALORLIQUIDO_2-:VDEV_VALORLIQUIDO_2;
       QTDELIQUIDO_2 = QTDELIQUIDO_2-:VDEV_QTDELIQUIDO_2;
         suspend;
     end
end^


ALTER PROCEDURE REL_TROCA (
    IDFILIAL INTEGER,
    DTPEDIDOINI DATE,
    DTPEDIDOFIM DATE,
    IDREPREINI INTEGER,
    IDREPREFIM INTEGER,
    IDCLIENTEINI INTEGER,
    IDCLIENTEFIM INTEGER,
    IDFORNECEDORINI INTEGER,
    IDFORNECEDORFIM INTEGER)
RETURNS (
    IDPRODUTO INTEGER,
    NOMEPRODUTO VARCHAR(65),
    TOTALPEDIDO NUMERIC(14,2),
    TOTALDEVOLUCAO NUMERIC(14,2),
    TOTALBONIFICACAO NUMERIC(14,2),
    TOTALTROCA NUMERIC(14,2),
    FATORCONVERSAO INTEGER,
    QTDEPEDIDO NUMERIC(15,3),
    QTDEDEVOLUCAO NUMERIC(15,3),
    QTDEBONIFICACAO NUMERIC(15,3),
    QTDETROCA NUMERIC(15,3),
    QTDEENTRADA NUMERIC(15,3),
    TOTALENTRADA NUMERIC(14,2))
AS
begin
  QTDEENTRADA = 0;
  TOTALENTRADA = 0;



  TOTALPEDIDO = 0;
  TOTALDEVOLUCAO = 0;
  TOTALBONIFICACAO = 0;
  TOTALTROCA = 0;
  QTDEBONIFICACAO = 0;
  QTDEDEVOLUCAO = 0;
  QTDEPEDIDO = 0;
  QTDETROCA = 0;

  for select IT.IDPRODUTO, P.ESPECIFICACAO, P.FATORCONVERSAO,  sum(IT.QTDEPEDIDO*IT.FATORCONVERSAO), sum(IT.PRECOVENDA*IT.QTDEPEDIDO) from ITENSPEDIDO IT
      right join PEDIDO PE
       on PE.IDPEDIDO = IT.IDPEDIDO
      and PE.IDFOLHA = IT.IDFOLHA
      and PE.IDFILIAL = :IDFILIAL

      left join PRODUTO P
         on P.IDFILIAL = IT.IDFILIAL
        and P.IDPRODUTO = IT.IDPRODUTO


     where IT.IDFILIAL = :IDFILIAL
       and IT.TROCA = 'N'
       and PE.SITUACAOPEDIDO = 'V'
       and PE.IDCLIENTE between :IDCLIENTEINI and :IDCLIENTEFIM
       and P.IDFORNECEDOR between :IDFORNECEDORINI and :IDFORNECEDORFIM
       and PE.IDREPRESENTANTE between :IDREPREINI and :IDREPREFIM
       and PE.DATAPEDIDO between :DTPEDIDOINI and :DTPEDIDOFIM
       group by IT.IDPRODUTO, P.ESPECIFICACAO,P.FATORCONVERSAO
       into :IDPRODUTO, :NOMEPRODUTO, :FATORCONVERSAO, :QTDEPEDIDO, :TOTALPEDIDO
  do
    suspend;

  TOTALPEDIDO = 0;
  TOTALDEVOLUCAO = 0;
  TOTALBONIFICACAO = 0;
  TOTALTROCA = 0;
  QTDEBONIFICACAO = 0;
  QTDEDEVOLUCAO = 0;
  QTDEPEDIDO = 0;
  QTDETROCA = 0;


  for select IT.IDPRODUTO, P.ESPECIFICACAO, P.FATORCONVERSAO, sum(IT.QTDEPEDIDO*IT.FATORCONVERSAO), sum(IT.PRECOVENDA*IT.QTDEPEDIDO) from ITENSDEVOLUCAO IT
      right join DEVOLUCAO D
       on D.IDPEDIDO = IT.IDPEDIDO
      and D.IDFOLHA = IT.IDFOLHA
      and D.IDFILIAL = :IDFILIAL

      left join PRODUTO P
         on P.IDFILIAL = IT.IDFILIAL
        and P.IDPRODUTO = IT.IDPRODUTO


     where IT.IDFILIAL = :IDFILIAL
       and IT.TROCA = 'N'
       and D.IDCLIENTE between :IDCLIENTEINI and :IDCLIENTEFIM
       and D.IDREPRESENTANTE between :IDREPREINI and :IDREPREFIM
       and D.DATAPEDIDO between :DTPEDIDOINI and :DTPEDIDOFIM
       and P.IDFORNECEDOR between :IDFORNECEDORINI and :IDFORNECEDORFIM
       group by IT.IDPRODUTO, P.ESPECIFICACAO, P.FATORCONVERSAO
       into :IDPRODUTO, :NOMEPRODUTO, :FATORCONVERSAO, :QTDEDEVOLUCAO, :TOTALDEVOLUCAO
  do
    suspend;

  TOTALPEDIDO = 0;
  TOTALDEVOLUCAO = 0;
  TOTALBONIFICACAO = 0;
  TOTALTROCA = 0;
  QTDEBONIFICACAO = 0;
  QTDEDEVOLUCAO = 0;
  QTDEPEDIDO = 0;
  QTDETROCA = 0;

    for select IT.IDPRODUTO, P.ESPECIFICACAO, P.FATORCONVERSAO, sum(IT.QTDEPEDIDO*IT.FATORCONVERSAO), sum(IT.PRECOVENDA*IT.QTDEPEDIDO) from ITENSPEDIDO IT
          right join PEDIDO PE
           on PE.IDPEDIDO = IT.IDPEDIDO
          and PE.IDFOLHA = IT.IDFOLHA
          and PE.IDFILIAL = :IDFILIAL

         left join PRODUTO P
           on P.IDFILIAL = IT.IDFILIAL
          and P.IDPRODUTO = IT.IDPRODUTO


         where IT.IDFILIAL = :IDFILIAL
           and (PE.SITUACAOPEDIDO = 'B' or IT.TROCA = 'S')
           and PE.IDCLIENTE between :IDCLIENTEINI and :IDCLIENTEFIM
           and PE.IDREPRESENTANTE between :IDREPREINI and :IDREPREFIM
           and P.IDFORNECEDOR between :IDFORNECEDORINI and :IDFORNECEDORFIM
           and PE.DATAPEDIDO between :DTPEDIDOINI and :DTPEDIDOFIM
         group by IT.IDPRODUTO, P.ESPECIFICACAO, P.FATORCONVERSAO
         into :IDPRODUTO, :NOMEPRODUTO, :FATORCONVERSAO, :QTDEBONIFICACAO, :TOTALBONIFICACAO
   do
      suspend;

  TOTALPEDIDO = 0;
  TOTALDEVOLUCAO = 0;
  TOTALBONIFICACAO = 0;
  TOTALTROCA = 0;
  QTDEBONIFICACAO = 0;
  QTDEDEVOLUCAO = 0;
  QTDEPEDIDO = 0;
  QTDETROCA = 0;

   for select IT.IDPRODUTO, P.ESPECIFICACAO, P.FATORCONVERSAO, sum(IT.QTDEPEDIDO*IT.FATORCONVERSAO), sum(IT.PRECOVENDA*IT.QTDEPEDIDO) from ITENSPEDIDO IT
        right join PEDIDO PE
          on PE.IDPEDIDO = IT.IDPEDIDO
         and PE.IDFOLHA = IT.IDFOLHA
         and PE.IDFILIAL = :IDFILIAL

        left join PRODUTO P
           on P.IDFILIAL = IT.IDFILIAL
          and P.IDPRODUTO = IT.IDPRODUTO

       where IT.IDFILIAL = :IDFILIAL
         and PE.SITUACAOPEDIDO = 'T'
         and PE.IDCLIENTE between :IDCLIENTEINI and :IDCLIENTEFIM
         and PE.IDREPRESENTANTE between :IDREPREINI and :IDREPREFIM
         and PE.DATAPEDIDO between :DTPEDIDOINI and :DTPEDIDOFIM
         and P.IDFORNECEDOR between :IDFORNECEDORINI and :IDFORNECEDORFIM
      group by IT.IDPRODUTO, P.ESPECIFICACAO, P.FATORCONVERSAO
      into :IDPRODUTO, :NOMEPRODUTO, :FATORCONVERSAO, :QTDETROCA, :TOTALTROCA
   do
     suspend;


  TOTALPEDIDO = 0;
  TOTALDEVOLUCAO = 0;
  TOTALBONIFICACAO = 0;
  TOTALTROCA = 0;
  QTDEBONIFICACAO = 0;
  QTDEDEVOLUCAO = 0;
  QTDEPEDIDO = 0;
  QTDETROCA = 0;






















   /* PARTE DA ENTRADA  */
/*
   for select IT.IDPRODUTO, P.ESPECIFICACAO, P.FATORCONVERSAO, sum(IT.QTDECOMPRA*IT.FATORCONVERSAO), sum(IT.PRECOVENDA*IT.QTDECOMPRA)  from ITENSENTRADA IT

     join ENTRADA E
       on E.IDNOTA = IT.IDNOTA
      and E.IDFORNECEDOR = IT.IDFORNECEDOR
      and E.IDFILIAL = :IDFILIAL

     left join CENTROCUSTO CC
       on CC.IDCENTROCUSTO = E.IDCENTROCUSTO

     left join PRODUTO P
       on P.IDPRODUTO = IT.IDPRODUTO
      and P.IDFILIAL = :IDFILIAL

     left join UNIDADEMEDIDA UN
       on UN.IDUNIDADEMEDIDA = IT.IDUNIDADEMEDIDA
      and UN.IDFILIAL = :IDFILIAL

     left join CFOP CF
       on CF.IDCFOP = E.IDCFOP
      and CF.IDFILIAL = :IDFILIAL

     left join CONDICAOPAGTO CP
       on CP.IDCONDICAOPAGTO = E.IDCONDICAOPAGTO

     left join FORNECEDOR F
       on F.IDFORNECEDOR = IT.IDFORNECEDOR

     where IT.IDFILIAL = :IDFILIAL
         and E.DATAENTRADA between :DTPEDIDOINI and :DTPEDIDOFIM
         and E.IDFORNECEDOR between :IDFORNECEDORINI and :IDFORNECEDORFIM
      group by IT.IDPRODUTO, P.ESPECIFICACAO, P.FATORCONVERSAO
      into :IDPRODUTO, :NOMEPRODUTO, :FATORCONVERSAO, :QTDEENTRADA, :TOTALENTRADA
   do
     suspend;

  TOTALPEDIDO = 0;
  TOTALDEVOLUCAO = 0;
  TOTALBONIFICACAO = 0;
  TOTALTROCA = 0;
  QTDEBONIFICACAO = 0;
  QTDEDEVOLUCAO = 0;
  QTDEPEDIDO = 0;
  QTDETROCA = 0; */
end^


ALTER PROCEDURE REL_TROCA_SINT_GRUPO (
    IDFILIAL INTEGER,
    DTPEDIDOINI DATE,
    DTPEDIDOFIM DATE,
    IDREPREINI INTEGER,
    IDREPREFIM INTEGER,
    IDCLIENTEINI INTEGER,
    IDCLIENTEFIM INTEGER,
    IDFORNECEDORINI INTEGER,
    IDFORNECEDORFIM INTEGER)
RETURNS (
    IDGRUPO INTEGER,
    NOMEGRUPO VARCHAR(65),
    TOTALPEDIDO NUMERIC(14,2),
    TOTALDEVOLUCAO NUMERIC(14,2),
    TOTALBONIFICACAO NUMERIC(14,2),
    TOTALTROCA NUMERIC(14,2))
AS
begin
  TOTALPEDIDO = 0;
  TOTALDEVOLUCAO = 0;
  TOTALBONIFICACAO = 0;
  TOTALTROCA = 0;

  for select P.IDGRUPO, G.NOME, sum(IT.PRECOVENDA*IT.QTDEPEDIDO) from ITENSPEDIDO IT
      right join PEDIDO PE
       on PE.IDPEDIDO = IT.IDPEDIDO
      and PE.IDFOLHA = IT.IDFOLHA
      and PE.IDFILIAL = :IDFILIAL

      left join PRODUTO P
         on P.IDFILIAL = IT.IDFILIAL
        and P.IDPRODUTO = IT.IDPRODUTO

      left join GRUPO G
        on G.IDFILIAL = :IDFILIAL
       and G.IDGRUPO = P.IDGRUPO

     where IT.IDFILIAL = :IDFILIAL
       and IT.TROCA = 'N'
       and PE.SITUACAOPEDIDO = 'V'
       and PE.IDCLIENTE between :IDCLIENTEINI and :IDCLIENTEFIM
       and P.IDFORNECEDOR between :IDFORNECEDORINI and :IDFORNECEDORFIM
       and PE.IDREPRESENTANTE between :IDREPREINI and :IDREPREFIM
       and PE.DATAPEDIDO between :DTPEDIDOINI and :DTPEDIDOFIM
       group by P.IDGRUPO, G.NOME
       into :IDGRUPO, :NOMEGRUPO, :TOTALPEDIDO
  do
    suspend;

  TOTALPEDIDO = 0;
  TOTALDEVOLUCAO = 0;
  TOTALBONIFICACAO = 0;
  TOTALTROCA = 0;

  for select P.IDGRUPO, G.NOME, sum(IT.PRECOVENDA*IT.QTDEPEDIDO) from ITENSDEVOLUCAO IT
      right join DEVOLUCAO D
       on D.IDPEDIDO = IT.IDPEDIDO
      and D.IDFOLHA = IT.IDFOLHA
      and D.IDFILIAL = :IDFILIAL

      left join PRODUTO P
         on P.IDFILIAL = IT.IDFILIAL
        and P.IDPRODUTO = IT.IDPRODUTO


      left join GRUPO G
        on G.IDFILIAL = :IDFILIAL
       and G.IDGRUPO = P.IDGRUPO

     where IT.IDFILIAL = :IDFILIAL
       and IT.TROCA = 'N'
       and D.IDCLIENTE between :IDCLIENTEINI and :IDCLIENTEFIM
       and D.IDREPRESENTANTE between :IDREPREINI and :IDREPREFIM
       and D.DATAPEDIDO between :DTPEDIDOINI and :DTPEDIDOFIM
       and P.IDFORNECEDOR between :IDFORNECEDORINI and :IDFORNECEDORFIM
       group by P.IDGRUPO, G.NOME
       into :IDGRUPO, :NOMEGRUPO, :TOTALDEVOLUCAO
  do
    suspend;

  TOTALPEDIDO = 0;
  TOTALDEVOLUCAO = 0;
  TOTALBONIFICACAO = 0;
  TOTALTROCA = 0;

  for select P.IDGRUPO, G.NOME, sum(IT.PRECOVENDA*IT.QTDEPEDIDO) from ITENSPEDIDO IT
          right join PEDIDO PE
           on PE.IDPEDIDO = IT.IDPEDIDO
          and PE.IDFOLHA = IT.IDFOLHA
          and PE.IDFILIAL = :IDFILIAL

         left join PRODUTO P
           on P.IDFILIAL = IT.IDFILIAL
          and P.IDPRODUTO = IT.IDPRODUTO

      left join GRUPO G
        on G.IDFILIAL = :IDFILIAL
       and G.IDGRUPO = P.IDGRUPO

         where IT.IDFILIAL = :IDFILIAL
           and (PE.SITUACAOPEDIDO = 'B' or IT.TROCA = 'S')
           and PE.IDCLIENTE between :IDCLIENTEINI and :IDCLIENTEFIM
           and PE.IDREPRESENTANTE between :IDREPREINI and :IDREPREFIM
           and P.IDFORNECEDOR between :IDFORNECEDORINI and :IDFORNECEDORFIM
           and PE.DATAPEDIDO between :DTPEDIDOINI and :DTPEDIDOFIM
           and not (exists(select D.IDPEDIDO from DEVOLUCAO D
                               join ITENSDEVOLUCAO ID
                                 on ID.IDFILIAL = :IDFILIAL
                                and ID.IDPEDIDO = PE.IDPEDIDO
                                and ID.IDFOLHA = PE.IDFOLHA
                                and ID.IDPRODUTO = IT.IDPRODUTO
                            where D.IDFILIAL = :IDFILIAL
                              and D.IDPEDIDO = PE.IDPEDIDO
                              and (D.SITUACAOPEDIDO = 'B' or ID.TROCA = 'S')
                              and D.IDFOLHA = PE.IDFOLHA))
         group by P.IDGRUPO, G.NOME
         into :IDGRUPO, :NOMEGRUPO, :TOTALBONIFICACAO
   do
      suspend;

  TOTALPEDIDO = 0;
  TOTALDEVOLUCAO = 0;
  TOTALBONIFICACAO = 0;
  TOTALTROCA = 0;

   for select P.IDGRUPO, G.NOME,  sum(IT.PRECOVENDA*IT.QTDEPEDIDO) from ITENSPEDIDO IT
        right join PEDIDO PE
          on PE.IDPEDIDO = IT.IDPEDIDO
         and PE.IDFOLHA = IT.IDFOLHA
         and PE.IDFILIAL = :IDFILIAL

        left join PRODUTO P
           on P.IDFILIAL = IT.IDFILIAL
          and P.IDPRODUTO = IT.IDPRODUTO

      left join GRUPO G
        on G.IDFILIAL = :IDFILIAL
       and G.IDGRUPO = P.IDGRUPO

       where IT.IDFILIAL = :IDFILIAL
         and PE.SITUACAOPEDIDO = 'T'
         and PE.IDCLIENTE between :IDCLIENTEINI and :IDCLIENTEFIM
         and PE.IDREPRESENTANTE between :IDREPREINI and :IDREPREFIM
         and PE.DATAPEDIDO between :DTPEDIDOINI and :DTPEDIDOFIM
         and P.IDFORNECEDOR between :IDFORNECEDORINI and :IDFORNECEDORFIM
         and not (exists(select D.IDPEDIDO from DEVOLUCAO D
                          where D.IDFILIAL = :IDFILIAL
                            and D.IDPEDIDO = PE.IDPEDIDO
                            and D.SITUACAOPEDIDO = 'T'
                            and D.IDFOLHA = PE.IDFOLHA))
      group by P.IDGRUPO, G.NOME
      into :IDGRUPO, :NOMEGRUPO, :TOTALTROCA
   do
     suspend;


  TOTALPEDIDO = 0;
  TOTALDEVOLUCAO = 0;
  TOTALBONIFICACAO = 0;
  TOTALTROCA = 0;
end^


ALTER PROCEDURE REL_TROCA_SINT_REPRESENTANTE (
    IDFILIAL INTEGER,
    DTPEDIDOINI DATE,
    DTPEDIDOFIM DATE,
    IDREPREINI INTEGER,
    IDREPREFIM INTEGER,
    IDCLIENTEINI INTEGER,
    IDCLIENTEFIM INTEGER,
    IDFORNECEDORINI INTEGER,
    IDFORNECEDORFIM INTEGER)
RETURNS (
    IDREPRESENTANTE INTEGER,
    NOMEREPRESENTANTE VARCHAR(65),
    TOTALPEDIDO NUMERIC(14,2),
    TOTALDEVOLUCAO NUMERIC(14,2),
    TOTALBONIFICACAO NUMERIC(14,2),
    TOTALTROCA NUMERIC(14,2))
AS
begin
  TOTALPEDIDO = 0;
  TOTALDEVOLUCAO = 0;
  TOTALBONIFICACAO = 0;
  TOTALTROCA = 0;

  for select PE.IDREPRESENTANTE, R.NOME, sum(IT.PRECOVENDA*IT.QTDEPEDIDO) from ITENSPEDIDO IT
      right join PEDIDO PE
       on PE.IDPEDIDO = IT.IDPEDIDO
      and PE.IDFOLHA = IT.IDFOLHA
      and PE.IDFILIAL = :IDFILIAL

      left join REPRESENTANTE R
        on R.IDFILIAL = :IDFILIAL
       and R.IDREPRESENTANTE = PE.IDREPRESENTANTE

      left join PRODUTO P
         on P.IDFILIAL = IT.IDFILIAL
        and P.IDPRODUTO = IT.IDPRODUTO


     where IT.IDFILIAL = :IDFILIAL
       and IT.TROCA = 'N'
       and PE.SITUACAOPEDIDO = 'V'
       and PE.IDCLIENTE between :IDCLIENTEINI and :IDCLIENTEFIM
       and P.IDFORNECEDOR between :IDFORNECEDORINI and :IDFORNECEDORFIM
       and PE.IDREPRESENTANTE between :IDREPREINI and :IDREPREFIM
       and PE.DATAPEDIDO between :DTPEDIDOINI and :DTPEDIDOFIM
       group by PE.IDREPRESENTANTE, R.NOME
       into :IDREPRESENTANTE, :NOMEREPRESENTANTE, :TOTALPEDIDO
  do
    suspend;

  TOTALPEDIDO = 0;
  TOTALDEVOLUCAO = 0;
  TOTALBONIFICACAO = 0;
  TOTALTROCA = 0;

  for select D.IDREPRESENTANTE, R.NOME, sum(IT.PRECOVENDA*IT.QTDEPEDIDO) from ITENSDEVOLUCAO IT
      right join DEVOLUCAO D
       on D.IDPEDIDO = IT.IDPEDIDO
      and D.IDFOLHA = IT.IDFOLHA
      and D.IDFILIAL = :IDFILIAL

      left join REPRESENTANTE R
        on R.IDFILIAL = :IDFILIAL
       and R.IDREPRESENTANTE = D.IDREPRESENTANTE

      left join PRODUTO P
         on P.IDFILIAL = IT.IDFILIAL
        and P.IDPRODUTO = IT.IDPRODUTO


     where IT.IDFILIAL = :IDFILIAL
       and IT.TROCA = 'N'
       and D.IDCLIENTE between :IDCLIENTEINI and :IDCLIENTEFIM
       and D.IDREPRESENTANTE between :IDREPREINI and :IDREPREFIM
       and D.DATAPEDIDO between :DTPEDIDOINI and :DTPEDIDOFIM
       and P.IDFORNECEDOR between :IDFORNECEDORINI and :IDFORNECEDORFIM
       group by D.IDREPRESENTANTE, R.NOME
       into :IDREPRESENTANTE, :NOMEREPRESENTANTE, :TOTALDEVOLUCAO
  do
    suspend;

  TOTALPEDIDO = 0;
  TOTALDEVOLUCAO = 0;
  TOTALBONIFICACAO = 0;
  TOTALTROCA = 0;

  for select PE.IDREPRESENTANTE, R.NOME, sum(IT.PRECOVENDA*IT.QTDEPEDIDO) from ITENSPEDIDO IT
          right join PEDIDO PE
           on PE.IDPEDIDO = IT.IDPEDIDO
          and PE.IDFOLHA = IT.IDFOLHA
          and PE.IDFILIAL = :IDFILIAL

      left join REPRESENTANTE R
        on R.IDFILIAL = :IDFILIAL
       and R.IDREPRESENTANTE = PE.IDREPRESENTANTE

         left join PRODUTO P
           on P.IDFILIAL = IT.IDFILIAL
          and P.IDPRODUTO = IT.IDPRODUTO

         where IT.IDFILIAL = :IDFILIAL
           and (PE.SITUACAOPEDIDO = 'B' or IT.TROCA = 'S')
           and PE.IDCLIENTE between :IDCLIENTEINI and :IDCLIENTEFIM
           and PE.IDREPRESENTANTE between :IDREPREINI and :IDREPREFIM
           and P.IDFORNECEDOR between :IDFORNECEDORINI and :IDFORNECEDORFIM
           and PE.DATAPEDIDO between :DTPEDIDOINI and :DTPEDIDOFIM
           and not (exists(select D.IDPEDIDO from DEVOLUCAO D
                               join ITENSDEVOLUCAO ID
                                 on ID.IDFILIAL = :IDFILIAL
                                and ID.IDPEDIDO = PE.IDPEDIDO
                                and ID.IDFOLHA = PE.IDFOLHA
                                and ID.IDPRODUTO = IT.IDPRODUTO
                            where D.IDFILIAL = :IDFILIAL
                              and D.IDPEDIDO = PE.IDPEDIDO
                              and (D.SITUACAOPEDIDO = 'B' or ID.TROCA = 'S')
                              and D.IDFOLHA = PE.IDFOLHA))
         group by PE.IDREPRESENTANTE, R.NOME
         into :IDREPRESENTANTE, :NOMEREPRESENTANTE, :TOTALBONIFICACAO
   do
      suspend;

  TOTALPEDIDO = 0;
  TOTALDEVOLUCAO = 0;
  TOTALBONIFICACAO = 0;
  TOTALTROCA = 0;

   for select PE.IDREPRESENTANTE, R.NOME,  sum(IT.PRECOVENDA*IT.QTDEPEDIDO) from ITENSPEDIDO IT
        right join PEDIDO PE
          on PE.IDPEDIDO = IT.IDPEDIDO
         and PE.IDFOLHA = IT.IDFOLHA
         and PE.IDFILIAL = :IDFILIAL

      left join REPRESENTANTE R
        on R.IDFILIAL = :IDFILIAL
       and R.IDREPRESENTANTE = PE.IDREPRESENTANTE

        left join PRODUTO P
           on P.IDFILIAL = IT.IDFILIAL
          and P.IDPRODUTO = IT.IDPRODUTO

       where IT.IDFILIAL = :IDFILIAL
         and PE.SITUACAOPEDIDO = 'T'
         and PE.IDCLIENTE between :IDCLIENTEINI and :IDCLIENTEFIM
         and PE.IDREPRESENTANTE between :IDREPREINI and :IDREPREFIM
         and PE.DATAPEDIDO between :DTPEDIDOINI and :DTPEDIDOFIM
         and P.IDFORNECEDOR between :IDFORNECEDORINI and :IDFORNECEDORFIM
         and not (exists(select D.IDPEDIDO from DEVOLUCAO D
                          where D.IDFILIAL = :IDFILIAL
                            and D.IDPEDIDO = PE.IDPEDIDO
                            and D.SITUACAOPEDIDO = 'T'
                            and D.IDFOLHA = PE.IDFOLHA))
      group by PE.IDREPRESENTANTE, R.NOME
      into :IDREPRESENTANTE, :NOMEREPRESENTANTE, :TOTALTROCA
   do
     suspend;


  TOTALPEDIDO = 0;
  TOTALDEVOLUCAO = 0;
  TOTALBONIFICACAO = 0;
  TOTALTROCA = 0;
end^


ALTER PROCEDURE REL_VENDAPROD_SG_FOR_SINT (
    IDFILIAL INTEGER,
    IDFORINI INTEGER,
    IDFORFIM INTEGER,
    IDGRUPOINI INTEGER,
    IDGRUPOFIM INTEGER,
    DTINI DATE,
    DTFIM DATE,
    SITUACAOPEDIDO CHAR(1),
    IDCIDADEINI SMALLINT,
    IDCIDADEFIM SMALLINT,
    IDCONVENIOINI SMALLINT,
    IDCONVENIOFIM SMALLINT,
    IDSUB_CONVENIOINI SMALLINT,
    IDSUB_CONVENIOFIM SMALLINT,
    IDUSUARIO INTEGER,
    IDATIVIDADEINI SMALLINT,
    IDATIVIDADEFIM SMALLINT,
    IDSUB_ATIVIDADEINI INTEGER,
    IDSUB_ATIVIDADEFIM INTEGER,
    IDSUB_GRUPOINI INTEGER,
    IDSUB_GRUPOFIM INTEGER,
    CPFINI VARCHAR(14),
    CPFFIM VARCHAR(14))
RETURNS (
    IDFORNECEDOR INTEGER,
    NOMEFORNECEDOR VARCHAR(60) CHARACTER SET NONE,
    TOTALVENDIDO NUMERIC(16,2),
    QTDEVENDIDO INTEGER)
AS
declare variable VDEV_PRECOVENDA numeric(14,2);
declare variable VDEV_QTDE integer;
begin
  for select PR.IDFORNECEDOR, COLLATEBR(F.NOME), sum(IT.PRECOVENDA*IT.QTDEPEDIDO), count(distinct PE.IDPEDIDO) /*R.CPF_SUPERVISOR*/ from ITENSPEDIDO IT
        right join PEDIDO PE
          on PE.IDPEDIDO = IT.IDPEDIDO
         and PE.IDFOLHA = IT.IDFOLHA
         and PE.IDFILIAL = :IDFILIAL


        join PRODUTO PR
          on PR.IDFILIAL = :IDFILIAL
         and PR.IDPRODUTO = IT.IDPRODUTO

        left join COTA_FORNECEDOR CF
           on CF.IDFILIAL = :IDFILIAL
          and CF.IDREPRESENTANTE = PE.idrepresentante
          and CF.IDFORNECEDOR = PR.IDFORNECEDOR

        left join CLIENTE C
          on C.IDCLIENTE = PE.IDCLIENTE

        join FORNECEDOR F
          on F.IDFORNECEDOR = PR.IDFORNECEDOR

        left join REPRESENTANTE R
         on R.IDREPRESENTANTE = PE.IDREPRESENTANTE

        where IT.IDFILIAL = :IDFILIAL
          and IT.TROCA = 'N'
          and PE.SITUACAOPEDIDO = :SITUACAOPEDIDO
          and PE.DATAPEDIDO between :DTINI and :DTFIM
          and C.IDCONVENIO between :IDCONVENIOINI and :IDCONVENIOFIM
          and C.IDSUBCONVENIO between :IDSUB_CONVENIOINI and :IDSUB_CONVENIOFIM
          and C.IDCIDADE between :IDCIDADEINI and :IDCIDADEFIM
          and PR.IDFORNECEDOR between :IDFORINI and :IDFORFIM
          and PR.IDGRUPO between :IDGRUPOINI and :IDGRUPOFIM
          and C.IDATIVIDADE between :IDATIVIDADEINI and :IDATIVIDADEFIM
          and C.IDSUB_ATIVIDADE between :IDSUB_ATIVIDADEINI and :IDSUB_ATIVIDADEFIM
          and PR.IDSUB_GRUPO between :IDSUB_GRUPOINI and :IDSUB_GRUPOFIM
          and R.CPF_SUPERVISOR between :CPFINI and :CPFFIM
          and exists(select T.ID from TABELA_AUXILIAR T
                      where T.ID        = PE.IDREPRESENTANTE
                        and T.TABELA    = 'REPRESENTANTE'
                        and T.IDUSUARIO = :IDUSUARIO)

        group by PR.IDFORNECEDOR, COLLATEBR(F.NOME)--, R.CPF_SUPERVISOR--, CF.VALOR
        into :IDFORNECEDOR, :NOMEFORNECEDOR, :TOTALVENDIDO, :QTDEVENDIDO/*, :CPF_SUPERVISOR*/
  do
    begin
         select count(distinct D.IDPEDIDO),
                sum(IT.PRECOVENDA*IT.QTDEPEDIDO) from ITENSDEVOLUCAO IT

             right join DEVOLUCAO D
               on D.IDFILIAL = :IDFILIAL
              and D.IDPEDIDO = IT.IDPEDIDO
              and D.IDFOLHA = IT.IDFOLHA

            join PRODUTO P
              on  P.IDPRODUTO = IT.IDPRODUTO
              and P.IDFILIAL = IT.IDFILIAL

            join CLIENTE C
              on C.IDCLIENTE = D.IDCLIENTE


          where IT.IDFILIAL = :IDFILIAL
            and IT.TROCA = 'N'
            and D.SITUACAOPEDIDO = :SITUACAOPEDIDO
            and D.DATAPEDIDO between :DTINI and :DTFIM
            and C.IDCONVENIO between :IDCONVENIOINI and :IDCONVENIOFIM
            and C.IDSUBCONVENIO between :IDSUB_CONVENIOINI and :IDSUB_CONVENIOFIM
            and C.IDCIDADE between :IDCIDADEINI and :IDCIDADEFIM
            and P.IDFORNECEDOR = :IDFORNECEDOR
            and P.IDGRUPO between :IDGRUPOINI and :IDGRUPOFIM
            and C.IDATIVIDADE between :IDATIVIDADEINI and :IDATIVIDADEFIM
            and C.IDSUB_ATIVIDADE between :IDSUB_ATIVIDADEINI and :IDSUB_ATIVIDADEFIM
            and P.IDSUB_GRUPO between :IDSUB_GRUPOINI and :IDSUB_GRUPOFIM
            into :VDEV_QTDE, :VDEV_PRECOVENDA;

          if (:vDEV_PRECOVENDA is null) then vDEV_PRECOVENDA = 0;
          if (:vDEV_QTDE is null) then vDEV_QTDE = 0;

          TOTALVENDIDO = (:TOTALVENDIDO-:vDEV_PRECOVENDA);
          QTDEVENDIDO = (:QTDEVENDIDO-:vDEV_QTDE);
      suspend;
   end
end^


ALTER PROCEDURE REL_VENDAPRODUTO_FOR_ANAL (
    IDFILIAL INTEGER,
    IDFORINI INTEGER,
    IDFORFIM INTEGER,
    IDGRUPOINI INTEGER,
    IDGRUPOFIM INTEGER,
    DTINI DATE,
    DTFIM DATE,
    SITUACAOPEDIDO CHAR(1),
    IDCLIENTEINI INTEGER,
    IDCLIENTEFIM INTEGER,
    IDCIDADEINI SMALLINT,
    IDCIDADEFIM SMALLINT,
    IDCONVENIOINI SMALLINT,
    IDCONVENIOFIM SMALLINT,
    IDSUB_CONVENIOINI SMALLINT,
    IDSUB_CONVENIOFIM SMALLINT,
    IDUSUARIO INTEGER,
    IDATIVIDADEINI SMALLINT,
    IDATIVIDADEFIM SMALLINT,
    IDSUB_ATIVIDADEINI INTEGER,
    IDSUB_ATIVIDADEFIM INTEGER,
    IDSUB_GRUPOINI INTEGER,
    IDSUB_GRUPOFIM INTEGER,
    CPF_SUPERVISOR VARCHAR(14))
RETURNS (
    IDFORNECEDOR INTEGER,
    NOMEFORNECEDOR VARCHAR(60),
    IDGRUPO INTEGER,
    NOMEGRUPO VARCHAR(40),
    IDPRODUTO INTEGER,
    NOMEPRODUTO VARCHAR(60),
    UNIDADE VARCHAR(20),
    FATORCONVERSAO INTEGER,
    QTDEVENDIDA NUMERIC(16,3),
    TOTALVENDIDO NUMERIC(16,2),
    IDSUB_GRUPO SMALLINT,
    NOMESUB_GRUPO VARCHAR(30),
    TOTALCUSTO NUMERIC(14,2),
    FATURAMENTO_CX NUMERIC(15,4),
    IDUNIDADEMEDIDA INTEGER,
    CUSTO_ENCARGOS NUMERIC(16,2))
AS
declare variable SITUACAOINI varchar(1);
declare variable SITUACAOFIM varchar(1);
begin
  if (:SITUACAOPEDIDO = '*') then
  begin
     SITUACAOINI = 'A';
     SITUACAOFIM = 'Z';
  end
  else begin
     SITUACAOINI = :SITUACAOPEDIDO;
     SITUACAOFIM = :SITUACAOPEDIDO;
  end



  if (:CPF_SUPERVISOR = '') then
  begin
      for select IT.IDFORNECEDOR, IT.NOMEFORNECEDOR, IT.IDGRUPO, IT.NOMEGRUPO, IT.IDPRODUTO, IT.NOMEPRODUTO,
                 IT.DESC_UNI_PRODUTO  , IT.FATORPRODUTO,
                 sum(IT.QTDEPEDIDO*IT.FATORCONVERSAO)-coalesce( sum((select sum(RIP.QTDEPEDIDO*RIP.FATORCONVERSAO) from REL_ITENS_DEVOLUCAO RIP
                                                               where RIP.IDFILIAL = IT.IDFILIAL
                                                                 and RIP.IDPEDIDO = IT.IDPEDIDO
                                                                 and RIP.IDFOLHA  = IT.IDFOLHA
                                                                 and RIP.IDPRODUTO = IT.IDPRODUTO)),0),
                 sum(IF_SN(PE.SITUACAOPEDIDO,'=','B',0,IT.PRECOVENDA)*IT.QTDEPEDIDO)-coalesce( sum((select sum(RIP.PRECOVENDA*RIP.QTDEPEDIDO) from REL_ITENS_DEVOLUCAO RIP
                                                               where RIP.IDFILIAL = IT.IDFILIAL
                                                                 and RIP.IDPEDIDO = IT.IDPEDIDO
                                                                 and RIP.IDFOLHA  = IT.IDFOLHA
                                                                 and RIP.IDPRODUTO = IT.IDPRODUTO)),0),
                 IT.IDSUB_GRUPO, IT.NOMESUBGRUPO,
                 sum(IT.CUSTONOTA*IT.QTDEPEDIDO),
                 sum(IT.CUSTOENCARGOS*IT.QTDEPEDIDO),
                 sum((IT.QTDEPEDIDO*IT.FATORCONVERSAO)/IT.FATORPRODUTO)-coalesce( sum((select sum((RIP.QTDEPEDIDO*RIP.FATORCONVERSAO)/RIP.FATORPRODUTO) from REL_ITENS_DEVOLUCAO RIP
                                                               where RIP.IDFILIAL = IT.IDFILIAL
                                                                 and RIP.IDPEDIDO = IT.IDPEDIDO
                                                                 and RIP.IDFOLHA  = IT.IDFOLHA
                                                                 and RIP.IDPRODUTO = IT.IDPRODUTO)),0),
                 IT.IDUNIDADEMEDIDA_PRODUTO from REL_ITENS_PEDIDO IT
    
            join REL_PEDIDO PE
              on PE.IDFOLHA = IT.IDFOLHA
             and PE.IDPEDIDO = IT.IDPEDIDO
             and PE.IDFILIAL = :IDFILIAL
    
            where IT.IDFILIAL = :IDFILIAL
              and IT.TROCA = 'N'
              and PE.SITUACAOPEDIDO between :SITUACAOINI and :SITUACAOFIM
              and PE.IDCONVENIO between :IDCONVENIOINI and :IDCONVENIOFIM
              and PE.IDSUB_CONVENIO between :IDSUB_CONVENIOINI and :IDSUB_CONVENIOFIM
              and PE.DATAPEDIDO between :DTINI and :DTFIM
              and PE.IDCLIENTE between :IDCLIENTEINI and :IDCLIENTEFIM
              and PE.IDCIDADE_CLIENTE between :IDCIDADEINI and :IDCIDADEFIM
              and IT.IDFORNECEDOR between :IDFORINI and :IDFORFIM
              and IT.IDGRUPO between :IDGRUPOINI and :IDGRUPOFIM
              and PE.IDATIVIDADE between :IDATIVIDADEINI and :IDATIVIDADEFIM
              and PE.IDSUB_ATIVIDADE between :IDSUB_ATIVIDADEINI and :IDSUB_ATIVIDADEFIM
              and IT.IDSUB_GRUPO between :IDSUB_GRUPOINI and :IDSUB_GRUPOFIM
             and exists(select T.ID from TABELA_AUXILIAR T
                          where T.ID        = PE.IDREPRESENTANTE
                            and T.TABELA    = 'REPRESENTANTE'
                            and T.IDUSUARIO = :IDUSUARIO)
            group by IT.IDFORNECEDOR, IT.NOMEFORNECEDOR, IT.IDGRUPO, IT.NOMEGRUPO, IT.IDPRODUTO, IT.NOMEPRODUTO,
                     IT.DESC_UNI_PRODUTO  , IT.FATORPRODUTO,
                     IT.IDSUB_GRUPO, IT.NOMESUBGRUPO,
                     IT.IDUNIDADEMEDIDA_PRODUTO
            into :IDFORNECEDOR, :NOMEFORNECEDOR, :IDGRUPO,:NOMEGRUPO,:IDPRODUTO, :NOMEPRODUTO, :UNIDADE,:FATORCONVERSAO, :QTDEVENDIDA, :TOTALVENDIDO, :IDSUB_GRUPO, :NOMESUB_GRUPO, :TOTALCUSTO, :CUSTO_ENCARGOS, :FATURAMENTO_CX, :IDUNIDADEMEDIDA
    
      do
        suspend;
  end



  -- SE TIVER CPF
  else begin

      for select IT.IDFORNECEDOR, IT.NOMEFORNECEDOR, IT.IDGRUPO, IT.NOMEGRUPO, IT.IDPRODUTO, IT.NOMEPRODUTO,
                 IT.DESC_UNI_PRODUTO  , IT.FATORPRODUTO,
                 sum(IT.QTDEPEDIDO*IT.FATORCONVERSAO)-coalesce( sum((select sum(RIP.QTDEPEDIDO*RIP.FATORCONVERSAO) from REL_ITENS_DEVOLUCAO RIP
                                                               where RIP.IDFILIAL = IT.IDFILIAL
                                                                 and RIP.IDPEDIDO = IT.IDPEDIDO
                                                                 and RIP.IDFOLHA  = IT.IDFOLHA
                                                                 and RIP.IDPRODUTO = IT.IDPRODUTO)),0),
                 sum(IF_SN(PE.SITUACAOPEDIDO,'=','B',0,IT.PRECOVENDA)*IT.QTDEPEDIDO)-coalesce( sum((select sum(RIP.PRECOVENDA*RIP.QTDEPEDIDO) from REL_ITENS_DEVOLUCAO RIP
                                                               where RIP.IDFILIAL = IT.IDFILIAL
                                                                 and RIP.IDPEDIDO = IT.IDPEDIDO
                                                                 and RIP.IDFOLHA  = IT.IDFOLHA
                                                                 and RIP.IDPRODUTO = IT.IDPRODUTO)),0),
                 IT.IDSUB_GRUPO, IT.NOMESUBGRUPO,
                 sum(IT.CUSTONOTA*IT.QTDEPEDIDO),
                 sum(IT.CUSTOENCARGOS*IT.QTDEPEDIDO),
                 sum((IT.QTDEPEDIDO*IT.FATORCONVERSAO)/IT.FATORPRODUTO)-coalesce( sum((select sum((RIP.QTDEPEDIDO*RIP.FATORCONVERSAO)/RIP.FATORPRODUTO) from REL_ITENS_DEVOLUCAO RIP
                                                               where RIP.IDFILIAL = IT.IDFILIAL
                                                                 and RIP.IDPEDIDO = IT.IDPEDIDO
                                                                 and RIP.IDFOLHA  = IT.IDFOLHA
                                                                 and RIP.IDPRODUTO = IT.IDPRODUTO)),0),
                 IT.IDUNIDADEMEDIDA_PRODUTO from REL_ITENS_PEDIDO IT
    
            join REL_PEDIDO PE
              on PE.IDFOLHA = IT.IDFOLHA
             and PE.IDPEDIDO = IT.IDPEDIDO
             and PE.IDFILIAL = :IDFILIAL
    
            where IT.IDFILIAL = :IDFILIAL
              and IT.TROCA = 'N'
              and PE.SITUACAOPEDIDO between :SITUACAOINI and :SITUACAOFIM
              and PE.CPF_SUPERVISOR = :CPF_SUPERVISOR
              and PE.IDCONVENIO between :IDCONVENIOINI and :IDCONVENIOFIM
              and PE.IDSUB_CONVENIO between :IDSUB_CONVENIOINI and :IDSUB_CONVENIOFIM
              and PE.DATAPEDIDO between :DTINI and :DTFIM
              and PE.IDCLIENTE between :IDCLIENTEINI and :IDCLIENTEFIM
              and PE.IDCIDADE_CLIENTE between :IDCIDADEINI and :IDCIDADEFIM
              and IT.IDFORNECEDOR between :IDFORINI and :IDFORFIM
              and IT.IDGRUPO between :IDGRUPOINI and :IDGRUPOFIM
              and PE.IDATIVIDADE between :IDATIVIDADEINI and :IDATIVIDADEFIM
              and PE.IDSUB_ATIVIDADE between :IDSUB_ATIVIDADEINI and :IDSUB_ATIVIDADEFIM
              and IT.IDSUB_GRUPO between :IDSUB_GRUPOINI and :IDSUB_GRUPOFIM
             and exists(select T.ID from TABELA_AUXILIAR T
                          where T.ID        = PE.IDREPRESENTANTE
                            and T.TABELA    = 'REPRESENTANTE'
                            and T.IDUSUARIO = :IDUSUARIO)
            group by IT.IDFORNECEDOR, IT.NOMEFORNECEDOR, IT.IDGRUPO, IT.NOMEGRUPO, IT.IDPRODUTO, IT.NOMEPRODUTO,
                     IT.DESC_UNI_PRODUTO  , IT.FATORPRODUTO,
                     IT.IDSUB_GRUPO, IT.NOMESUBGRUPO,
                     IT.IDUNIDADEMEDIDA_PRODUTO
            into :IDFORNECEDOR, :NOMEFORNECEDOR, :IDGRUPO,:NOMEGRUPO,:IDPRODUTO, :NOMEPRODUTO, :UNIDADE,:FATORCONVERSAO, :QTDEVENDIDA, :TOTALVENDIDO, :IDSUB_GRUPO, :NOMESUB_GRUPO, :TOTALCUSTO, :CUSTO_ENCARGOS, :FATURAMENTO_CX, :IDUNIDADEMEDIDA
    
      do
        suspend;

  end
end^


ALTER PROCEDURE REL_VENDAPRODUTO_FOR_SINT (
    IDFILIAL INTEGER,
    IDFORINI INTEGER,
    IDFORFIM INTEGER,
    IDGRUPOINI INTEGER,
    IDGRUPOFIM INTEGER,
    DTINI DATE,
    DTFIM DATE,
    SITUACAOPEDIDO CHAR(1),
    IDCIDADEINI SMALLINT,
    IDCIDADEFIM SMALLINT,
    IDCONVENIOINI SMALLINT,
    IDCONVENIOFIM SMALLINT,
    IDSUB_CONVENIOINI SMALLINT,
    IDSUB_CONVENIOFIM SMALLINT,
    IDUSUARIO INTEGER,
    IDATIVIDADEINI SMALLINT,
    IDATIVIDADEFIM SMALLINT,
    IDSUB_ATIVIDADEINI INTEGER,
    IDSUB_ATIVIDADEFIM INTEGER,
    IDSUB_GRUPOINI INTEGER,
    IDSUB_GRUPOFIM INTEGER)
RETURNS (
    IDFORNECEDOR INTEGER,
    NOMEFORNECEDOR VARCHAR(60) CHARACTER SET NONE,
    TOTALVENDIDO NUMERIC(16,2),
    QTDEVENDIDO INTEGER,
    VALORCOTA NUMERIC(16,2),
    IDREPRESENTANTE INTEGER,
    NOMEREPRESENTANTE VARCHAR(60),
    CPF_SUPERVISOR VARCHAR(14))
AS
declare variable VDEV_PRECOVENDA numeric(14,2);
declare variable VDEV_QTDE integer;
declare variable SITUACAOINI varchar(1);
declare variable SITUACAOFIM varchar(1);
begin
  if (:SITUACAOPEDIDO = '*') then
  begin
     SITUACAOINI = 'A';
     SITUACAOFIM = 'Z';
  end
  else begin
     SITUACAOINI = :SITUACAOPEDIDO;
     SITUACAOFIM = :SITUACAOPEDIDO;
  end


  for select PE.IDREPRESENTANTE, R.NOME, PR.IDFORNECEDOR, COLLATEBR(F.NOME), sum(IF_SN(PE.SITUACAOPEDIDO,'=','B',0,IT.PRECOVENDA)*IT.QTDEPEDIDO), count(distinct PE.IDPEDIDO), CF.valor, R.CPF_SUPERVISOR from ITENSPEDIDO IT
        right join PEDIDO PE
          on PE.IDPEDIDO = IT.IDPEDIDO
         and PE.IDFOLHA = IT.IDFOLHA
         and PE.IDFILIAL = :IDFILIAL

        left join REPRESENTANTE R
           on R.IDREPRESENTANTE = PE.IDREPRESENTANTE

        join PRODUTO PR
          on PR.IDFILIAL = :IDFILIAL
         and PR.IDPRODUTO = IT.IDPRODUTO

        left join COTA_FORNECEDOR CF
           on CF.IDFILIAL = :IDFILIAL
          and CF.IDREPRESENTANTE = PE.idrepresentante
          and CF.IDFORNECEDOR = PR.IDFORNECEDOR

        left join CLIENTE C
          on C.IDCLIENTE = PE.IDCLIENTE

        join FORNECEDOR F
          on F.IDFORNECEDOR = PR.IDFORNECEDOR

        where IT.IDFILIAL = :IDFILIAL
          and IT.TROCA = 'N'
          and PE.SITUACAOPEDIDO between :SITUACAOINI and :SITUACAOFIM
          and PE.DATAPEDIDO between :DTINI and :DTFIM
          and C.IDCONVENIO between :IDCONVENIOINI and :IDCONVENIOFIM
          and C.IDSUBCONVENIO between :IDSUB_CONVENIOINI and :IDSUB_CONVENIOFIM
          and C.IDCIDADE between :IDCIDADEINI and :IDCIDADEFIM
          and PR.IDFORNECEDOR between :IDFORINI and :IDFORFIM
          and PR.IDGRUPO between :IDGRUPOINI and :IDGRUPOFIM
          and C.IDATIVIDADE between :IDATIVIDADEINI and :IDATIVIDADEFIM
          and C.IDSUB_ATIVIDADE between :IDSUB_ATIVIDADEINI and :IDSUB_ATIVIDADEFIM
          and PR.IDSUB_GRUPO between :IDSUB_GRUPOINI and :IDSUB_GRUPOFIM
--          and exists(select T.ID from TABELA_AUXILIAR T
--                      where T.ID        = PE.IDREPRESENTANTE
--                        and T.TABELA    = 'REPRESENTANTE'
--                        and T.IDUSUARIO = :IDUSUARIO)

        group by PE.IDREPRESENTANTE, R.NOME, PR.IDFORNECEDOR, COLLATEBR(F.NOME),CF.valor, R.CPF_SUPERVISOR
        into :IDREPRESENTANTE, :NOMEREPRESENTANTE, :IDFORNECEDOR, :NOMEFORNECEDOR, :TOTALVENDIDO, :QTDEVENDIDO, :VALORCOTA, :CPF_SUPERVISOR
  do
