Ajustando performance query produtos
davinTI/app-dono-modulos/pipeline/head This commit looks good

This commit is contained in:
Sarah Magalhães
2026-06-05 10:01:36 -03:00
parent d8fe335282
commit dc1aa9417e
+117 -47
View File
@@ -2663,49 +2663,75 @@ and pes2.qtdembalagem = (select nvl(max(pes3.qtdembalagem), 1)
return {
sql: /*sql*/ `
WITH CTE_UltimaEntrada AS (
SELECT /*+ MATERIALIZE */
SELECT
/*+ MATERIALIZE */
eit.codigo AS produto_codigo,
ent.loja AS loja_codigo,
ean2.quantidade AS quantidadecompra,
ent.dataentrada AS dataultimaentrada,
ROW_NUMBER() OVER (
PARTITION BY eit.codigo, ent.loja
ORDER BY ent.dataentrada DESC, ent.chave DESC
PARTITION BY eit.codigo,
ent.loja
ORDER BY
ent.dataentrada DESC,
ent.chave DESC
) AS rn
FROM verdemar.entradas ent
INNER JOIN verdemar.entradas_itens eit ON ent.chave = eit.chaveentrada
INNER JOIN verdemar.operacoes_entradas op ON ent.operacao = op.codigo
INNER JOIN verdemar.produtos_ean ean2 ON eit.embalagem = ean2.chave
WHERE ent.status = 'S'
FROM
verdemar.entradas ent
INNER JOIN verdemar.entradas_itens eit ON
ent.chave = eit.chaveentrada
INNER JOIN verdemar.operacoes_entradas op ON
ent.operacao = op.codigo
INNER JOIN verdemar.produtos_ean ean2 ON
eit.embalagem = ean2.chave
WHERE
ent.status = 'S'
AND op.atualizacusto = 'S'
AND op.tiponota NOT IN ('B', 'T', 'L')
AND ent.dataentrada <= TRUNC(SYSDATE)
AND eit.quantidade * ean2.quantidade > NVL(eit.quantidadedevolvida, 0)
AND eit.quantidade * ean2.quantidade > NVL(eit.quantidadedevolvida,
0)
AND eit.codigo = ${args.codproduto}
AND ent.loja IN (${args.ctx_user_companies_for_module})
)
SELECT
l.codigo AS idempresa,
FNC_NOMEPESSOAS(l.codigo) AS nomeempresa,
cat.nome AS categoria,
ult_ent.dataultimaentrada AS dataultimaentrada,
(
SELECT MAX(pm.data)
FROM verdemar.produtos_movimento pm
WHERE pm.codigo = p.codigo
SELECT
MAX(pm.data)
FROM
verdemar.produtos_movimento pm
WHERE
pm.codigo = p.codigo
AND pm.loja = l.codigo
AND pm.data >= TRUNC(SYSDATE) - 50
-- limita o scan
) AS dataultimavenda,
NULL AS precoatacado,
pp.precovenda AS precovarejo,
COALESCE(prom.precopromocao, 0) AS precopromoc,
COALESCE(prom.precopromocao,
0) AS precopromoc,
pp.precovenda AS preconormal,
(
SELECT pf.precofidelidade
FROM verdemar.produtos_fidelidade pf
WHERE pf.codigo = p.codigo
SELECT
pf.precofidelidade
FROM
verdemar.produtos_fidelidade pf
WHERE
pf.codigo = p.codigo
AND TRUNC(SYSDATE) BETWEEN pf.datainicial AND pf.datafinal
AND (pf.codigo_tipo = 0 OR pf.codigo_tipo = 2)
AND (pf.codigo_tipo = 0
OR pf.codigo_tipo = 2)
AND pf.loja = l.codigo
AND ROWNUM = 1
) AS precomeuMambo,
0 AS vlrprecovenctoprox,
pp.custoliquido AS custoliquido,
@@ -2713,29 +2739,41 @@ and pes2.qtdembalagem = (select nvl(max(pes3.qtdembalagem), 1)
0 AS margematacado,
pp.lucro AS margemnormal,
(
SELECT api.margemprecopromocao_clubevm
FROM verdemar.produtos_fidelidade pf
SELECT
api.margemprecopromocao_clubevm
FROM
verdemar.produtos_fidelidade pf
INNER JOIN verdemar.autorizacao_promocao_itens api
ON api.codigo = pf.codigo
ON
api.codigo = pf.codigo
AND api.chave = pf.chaveorigem
WHERE pf.codigo = p.codigo
WHERE
pf.codigo = p.codigo
AND api.datafinal >= SYSDATE
AND api.datainicial <= SYSDATE
AND pf.loja = l.codigo
AND ROWNUM = 1
) AS margemmeuMambo,
subg.sugestao AS margemlucrodivisao,
est.quantidade AS estoqueDisponivel,
(
SELECT est2.quantidade
FROM verdemar.loja l2
INNER JOIN verdemar.produtos_estoque est2 ON est2.loja = l2.codigo
WHERE l2.lojanota = l.codigo
SELECT
est2.quantidade
FROM
verdemar.produtos_estoque est2
INNER JOIN verdemar.loja l2 ON
l2.codigo = est2.loja
WHERE
est2.codigo = p.codigo
AND l2.lojanota = l.codigo
AND l2.statusloja = 3
AND est2.codigo = p.codigo
AND ROWNUM = 1
) AS estoquetroca,
FNC_QTD_EMTRANSITO(p.codigo, l.codigo) AS estoquetransito,
FNC_QTD_EMTRANSITO(p.codigo,
l.codigo) AS estoquetransito,
0 AS estoquefuturo,
0 AS estoquereservado,
0 AS reserva,
@@ -2755,59 +2793,91 @@ and pes2.qtdembalagem = (select nvl(max(pes3.qtdembalagem), 1)
ult_ent.quantidadecompra AS quantidadecompra,
0 AS qtdeatacado,
CASE
WHEN COALESCE(prom.precopromocao, 0) > 0 THEN 'PROMOCAO'
WHEN COALESCE(prom.precopromocao,
0) > 0 THEN 'PROMOCAO'
ELSE 'NORMAL'
END AS situacao,
CASE WHEN p.inativo = 'N' THEN 'A' ELSE 'I' END AS statusvenda,
CASE
WHEN p.inativo = 'N' THEN 'A'
ELSE 'I'
END AS statusvenda,
NULL AS statuscompra,
p.paicomposto AS idbase,
NULL AS tipotroca,
p.codigo AS seqproduto,
p.nome AS Descricao
FROM verdemar.produtos p
FROM
verdemar.produtos p
INNER JOIN verdemar.produtos_loja pl
ON pl.codigo = p.codigo
ON
pl.codigo = p.codigo
INNER JOIN verdemar.loja l
ON l.codigo = pl.loja
ON
l.codigo = pl.loja
INNER JOIN verdemar.produtos_precos pp
ON pp.codigo = p.codigo
ON
pp.codigo = p.codigo
AND pp.loja = l.codigo
LEFT JOIN verdemar.produtos_estoque est
ON est.codigo = p.codigo
ON
est.codigo = p.codigo
AND est.loja = l.codigo
LEFT JOIN verdemar.produtos_venda_media pvm
ON pvm.codigo = p.codigo
ON
pvm.codigo = p.codigo
AND pvm.loja = l.codigo
LEFT JOIN CTE_UltimaEntrada ult_ent
ON ult_ent.produto_codigo = p.codigo
ON
ult_ent.produto_codigo = p.codigo
AND ult_ent.loja_codigo = l.codigo
AND ult_ent.rn = 1
LEFT JOIN (
SELECT pr.codigo,
SELECT
pr.codigo,
pr.loja,
pr.precopromocao
FROM verdemar.promocao pr
WHERE (pr.datafinal >= TRUNC(SYSDATE) OR pr.indeterminada = 'S')
FROM
verdemar.promocao pr
WHERE
(pr.datafinal >= TRUNC(SYSDATE)
OR pr.indeterminada = 'S')
) prom
ON prom.codigo = p.codigo
ON
prom.codigo = p.codigo
AND prom.loja = l.codigo
LEFT JOIN verdemar.produtos_ean ean
ON ean.codigo = p.codigo
ON
ean.codigo = p.codigo
AND ean.comprapadrao = 'S'
LEFT JOIN verdemar.categoria cat
ON cat.codigo = p.categoria
ON
cat.codigo = p.categoria
LEFT JOIN verdemar.subgrupo subg
ON subg.codigo = p.subgrupo
ON
subg.codigo = p.subgrupo
AND subg.setor = p.setor
AND subg.grupo = p.grupo
LEFT JOIN verdemar.produtos_estoque_wms pew
ON pew.produto = p.codigo
ON
pew.produto = p.codigo
AND pew.cd = 892605
WHERE p.codigo = ${args.codproduto}
WHERE
p.codigo = ${args.codproduto}
AND l.participageradorlojas = 'S'
AND p.inativo = 'N'
`
AND l.codigo IN (${args.ctx_user_companies_for_module})`
}
},
detalhe_preco: (args) => {