01. DADOS GERAIS

Produto:

TOTVS Varejo Supermercados

Linha de Produto:

Supermercados - Linha Consinco

Segmento:

Varejo

Tipo de Documento:

DSUPCONTR-8730

Módulo:Acordos e Verbas
Caminho: Administração > Verbas de Bonificação
Função:VERBAS DE BONIFICAÇÃO - MAX0302
País:Brasil
Ticket:22828126 
Requisito/Story/Issue (informe o requisito relacionado) :

DSUPCONTR-8730 - Obtendo detalhes do item... STATUS

02. SITUAÇÃO/REQUISITO

        Foi identificada uma lentidão no processo pkg_adm_acordoverba.SP_CONSUMOVERBA_ZERASALDO, causada pela estrutura da query de busca de informações. A função fsaldoacordopromoc está sendo chamada de forma desnecessária para todos os acordos existentes anteriores à data final informada no parâmetro, resultando em acessos ineficientes.

03. PRÉ-REQUISITOS

Parâmetro Dinâmico a ser configurado:

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 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 fsaldoacordopromoc, evitando que ela seja chamada desnecessariamente.
  • Redução de chamadas à função: O número de execuções da função fsaldoacordopromoc foi reduzido de quatro para apenas uma.
  • Otimização dos EXISTS: A lógica dos EXISTS foi centralizada com o uso de 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 opcional 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 Mrl_CustoVerba, garantindo que acordos que já passaram pelo processo de zerar saldo não sejam considerados novamente.


    Nova query de busca para rotina de zerar saldo
    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) TemVerbaVigente,
                                nvl(max(Verba.IndVerbaAutoZeraSaldo), 'N') IndVerbaAutoZeraSaldo                                              
                         from  Msu_AcordoPromoc Acordo
                         left  join Mrl_CustoVerba Verba 
                               on   Acordo.NroAcordo  = Verba.Nroacordo
                               and  Acordo.NroEmpresa = Verba.NroEmpresaAcordo
                               and  nvl(Verba.IndTipAcordo, 'R') = 'R'
                               and  Verba.StatusVerba = 'A'
                         where Acordo.AppOrigem = 2
                         and   Acordo.DtaInicial >= nvl(pdDtaInicial, Acordo.DtaInicial)
                         and   Acordo.DtaFim + 1 <= pdDtaFinal
                         and   nvl(Acordo.StatusAcordo, 'P') != 'R'
                         and   Acordo.SituacaoAcordo not in ('R', 'C')
                         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.TemVerbaVigente = 0
                             and    AcordosBase.IndVerbaAutoZeraSaldo = 'N'),
         -- 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

05. REQUISITOS DE VERSÃO

       Se estiver na versão 24.07, atualizar o sistema para o service pack 24.07.043 ou service pack superior.

       Se estiver na versão 25.01, atualizar o sistema para o service pack 25.01.017 ou service pack superior.

06. DOCUMENTOS RELACIONADOS

DOCUMENTO(S) DE REFERÊNCIA