...
| Produto: | | Solucoes_totvs |
|---|
| Solucao | TOTVS Varejo Supermercados |
|---|
|
|
|---|
| Linha de Produto: | | Linhas_totvs |
|---|
| Linha | Supermercados - Linha Consinco |
|---|
|
|
|---|
| Segmento: | |
|---|
| Tipo de Documento: | |
|---|
| 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) : | | Jira |
|---|
| server | JIRA |
|---|
| serverId | 0c783de1-186e-383b-975c-a1acd7d76cb5 |
|---|
| key | DSUPCONTR-8730 |
|---|
|
|
|---|
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.
...
| Totvs custom tabs box |
|---|
| tabs | PD IND_GERA_AUTO_VERBA_ZERASALDO |
|---|
| ids | ZeraSaldo |
|---|
|
| Totvs custom tabs box items |
|---|
| default | yes |
|---|
| referencia | ZeraSaldo |
|---|
| 
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 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 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 |
|---|
| language | sql |
|---|
| theme | RDark |
|---|
| firstline | 1 |
|---|
| title | Rotina para Nova query de busca para rotina de zerar saldo |
|---|
| linenumbers | true |
|---|
|
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) TemVergaVigenteTemVerbaVigente,
nvl(max(Verba.IndVerbaAutoZeraSaldo), 'N') IndVerbaAutoZeraSaldo
from Msu_AcordoPromoc Acordo
left from join Mrl_CustoVerba Verba on Acordo.NroAcordo = Verba.Nroacordo
Msu_AcordoPromoc Acordo
left join Mrl_CustoVerba Verba
and Acordo.NroEmpresa = Verba.NroEmpresaAcordo
on where Acordo.AppOrigemNroAcordo = 2Verba.Nroacordo
and Acordo.DtaInicialNroEmpresa >= pdDtaInicial
Verba.NroEmpresaAcordo
and Acordo.DtaFim + 1 <= pdDtaFinal
nvl(Verba.IndTipAcordo, 'R') = 'R'
and nvl(Verba.IndVerbaAutoZeraSaldo, 'N')StatusVerba = 'NA'
and nvl(Acordo.StatusAcordo, 'P') != 'R'
where Acordo.AppOrigem = 2
and Acordo.SituacaoAcordoDtaInicial not>= in ('R', 'C')
nvl(pdDtaInicial, Acordo.DtaInicial)
and Verba.NroempresaAcordo = Acordo.NroEmpresa
Acordo.DtaFim + 1 <= pdDtaFinal
and nvl(VerbaAcordo.IndTipAcordoStatusAcordo, 'RP') != 'R'
and Verba.StatusVerba = 'A'
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.TemVergaVigenteIndVerbaAutoZeraSaldo = 0'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