Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

Totvs custom tabs box
tabsPD IND_GERA_AUTO_VERBA_ZERASALDO
idsZeraSaldo
Totvs custom tabs box items
defaultyes
referenciaZeraSaldo

Configurações de Parâmetros Dinâmicos

    Imagem 01: Configurações de Parâmetros Dinâmicos



04. SOLUÇÃO

      A estrutura da query de busca de informações foi ajustada para evitar acessos ineficientes à função função fsaldoacordopromoc. Para isso, foi realizada uma melhoria abrangente na query, com os seguintes pontos principais:

  • Filtragem prévia dos acordos: A query agora retorna todos os acordos que atendem aos filtros antes de executar o cálculo de saldo por meio da função fsaldoacordopromocfunção fsaldoacordopromoc, evitando que ela seja chamada desnecessariamente.
  • Redução de chamadas à função: O número de execuções da função fsaldoacordopromoc foi função fsaldoacordopromoc foi reduzido de quatro para apenas uma.
  • Otimização dos EXISTSdos EXISTS: A lógica dos EXISTS foi dos EXISTS foi centralizada com o uso de JOINsde JOINs, reduzindo a repetição de código e melhorando a performance geral da query.
  • Novo parâmetro de data inicial: Foi adicionado um parâmetro para data de início, permitindo um filtro mais preciso dos acordos processados.
  • Filtro por acordos já processados: Incluído um filtro baseado na coluna IndVerbaAutoZeraSaldo da tabela Mrlcoluna IndVerbaAutoZeraSaldo da tabela Mrl_CustoVerba, garantindo que acordos que já passaram pelo processo de zerar saldo não sejam considerados novamente.


    Bloco de código
    languagesql
    themeRDark
    firstline1
    titleRotina para Nova query de busca para rotina de zerar saldo
    linenumberstrue
     with AcordosBase as (select Acordo.NroAcordo,
                                 Acordo.NroEmpresa,
                                 Acordo.SeqFornecedor,
                                 Acordo.SeqComprador,
                                 Acordo.VlrAcordo,
                                 Acordo.IndUtilContrSald,
                                 max(case 
                                       when Verba.NroAcordo is not null then
                                         1
                                       else   
                                         0
                                     end) TemVerba,             
                                 max(case 
                                       when Verba.DtaFinal >= trunc(sysdate) and Verba.QtdLimiteVerba > decode(nvl(Verba.QtdUtilizadaVerba, 0), 0, -1, Verba.QtdUtilizadaVerba) then
                                         1
                                       else
                                         0
                                     end) TemVergaVigente                                             
                          from  Msu_AcordoPromoc Acordo
                          left  join Mrl_CustoVerba Verba on Acordo.NroAcordo  = Verba.Nroacordo
                          and   Acordo.NroEmpresa = Verba.NroEmpresaAcordo
                          where Acordo.AppOrigem = 2
                          and   Acordo.DtaInicial >= pdDtaInicial
                          and   Acordo.DtaFim + 1 <= pdDtaFinal
                          and   nvl(Verba.IndVerbaAutoZeraSaldo, 'N') = 'N'
                          and   nvl(Acordo.StatusAcordo, 'P') != 'R'
                          and   Acordo.SituacaoAcordo not in ('R', 'C')
                          and   Verba.NroempresaAcordo = Acordo.NroEmpresa
                          and   nvl(Verba.IndTipAcordo, 'R') = 'R'
                          and   Verba.StatusVerba = 'A'
                          group by Acordo.NroAcordo,
                                   Acordo.NroEmpresa,
                                   Acordo.SeqFornecedor,
                                   Acordo.SeqComprador,
                                   Acordo.VlrAcordo,
                                   Acordo.IndUtilContrSald),
          -- SALDO DO ACORDO
          SaldoAcordo as (select AcordosBase.NroAcordo,
                                 AcordosBase.NroEmpresa,
                                 fsaldoacordopromoc(AcordosBase.NroEmpresa,  
                                                    AcordosBase.NroAcordo, 
                                                    AcordosBase.SeqFornecedor) as VlrSaldo
                          from   AcordosBase AcordosBase),               
          -- ACORDOS COM VERBAS VENCIDAS
          AcordosComVerba as (select AcordosBase.*, 
                                     'S' as IndExisteVerba,
                                     AcordosBase.NroEmpresa as NroEmpAcordo,
                                     Saldo.VlrSaldo
                              from   AcordosBase AcordosBase
                              left   join SaldoAcordo Saldo on AcordosBase.NroAcordo  = Saldo.Nroacordo
                              and    AcordosBase.NroEmpresa = Saldo.NroEmpresa
                              where  Saldo.VlrSaldo > 0
                              and    AcordosBase.TemVerba = 1
                              and    AcordosBase.TemVergaVigente = 0),
          -- ACORDOS SEM VERBA
          AcordosSemVerba as (select AcordosBase.*,
                                     'N' as IndExisteVerba,
                                     AcordosBase.NroEmpresa AS NroEmpAcordo,
                                     Saldo.VlrSaldo
                              from   AcordosBase AcordosBase
                              left   join SaldoAcordo Saldo on AcordosBase.NroAcordo  = Saldo.Nroacordo
                              and    AcordosBase.NroEmpresa = Saldo.NroEmpresa
                              where  Saldo.VlrSaldo > 0
                              and    AcordosBase.TemVerba = 0)
      select * 
      from AcordosComVerba
                                          
      union all
                                          
      select * 
      from AcordosSemVerba

...