| 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 |
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.
Parâmetro Dinâmico a ser configurado:
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:
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
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.