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