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
+214 -144
View File
@@ -2663,151 +2663,221 @@ 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
eit.codigo AS produto_codigo, /*+ MATERIALIZE */
ent.loja AS loja_codigo, eit.codigo AS produto_codigo,
ean2.quantidade AS quantidadecompra, ent.loja AS loja_codigo,
ent.dataentrada AS dataultimaentrada, ean2.quantidade AS quantidadecompra,
ROW_NUMBER() OVER ( ent.dataentrada AS dataultimaentrada,
PARTITION BY eit.codigo, ent.loja ROW_NUMBER() OVER (
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'
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.codigo = ${args.codproduto}
)
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
AND pm.loja = l.codigo
) AS dataultimavenda,
NULL AS precoatacado,
pp.precovenda AS precovarejo,
COALESCE(prom.precopromocao, 0) AS precopromoc,
pp.precovenda AS preconormal,
(
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.loja = l.codigo
AND ROWNUM = 1
) AS precomeuMambo,
0 AS vlrprecovenctoprox,
pp.custoliquido AS custoliquido,
pp.sugestao AS margem,
0 AS margematacado,
pp.lucro AS margemnormal,
(
SELECT api.margemprecopromocao_clubevm
FROM verdemar.produtos_fidelidade pf
INNER JOIN verdemar.autorizacao_promocao_itens api
ON api.codigo = pf.codigo
AND api.chave = pf.chaveorigem
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
AND l2.statusloja = 3
AND est2.codigo = p.codigo
AND ROWNUM = 1
) AS estoquetroca,
FNC_QTD_EMTRANSITO(p.codigo, l.codigo) AS estoquetransito,
0 AS estoquefuturo,
0 AS estoquereservado,
0 AS reserva,
pew.estoque AS estoquedisponivelcd,
0 AS estoquefuturocd,
pvm.mediasempromocao AS mdv,
pvm.mediacompromocao AS mdvpromoc,
pvm.diasestoque AS ddv,
NULL AS ddvminimo,
NULL AS ddvmaximo,
NULL AS dtavalidade,
p.numerodiasvalidade AS validadedias,
NULL AS classeabastecimento,
p.tipoabastecimento AS formaabastecimento,
ean.embalagem AS descricaoembalagem,
ean.quantidade AS quantidadeembalagem,
ult_ent.quantidadecompra AS quantidadecompra,
0 AS qtdeatacado,
CASE
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,
NULL AS statuscompra,
p.paicomposto AS idbase,
NULL AS tipotroca,
p.codigo AS seqproduto,
p.nome AS Descricao
FROM verdemar.produtos p PARTITION BY eit.codigo,
INNER JOIN verdemar.produtos_loja pl ent.loja
ON pl.codigo = p.codigo ORDER BY
INNER JOIN verdemar.loja l ent.dataentrada DESC,
ON l.codigo = pl.loja ent.chave DESC
INNER JOIN verdemar.produtos_precos pp ) AS rn
ON pp.codigo = p.codigo FROM
AND pp.loja = l.codigo verdemar.entradas ent
LEFT JOIN verdemar.produtos_estoque est INNER JOIN verdemar.entradas_itens eit ON
ON est.codigo = p.codigo ent.chave = eit.chaveentrada
AND est.loja = l.codigo INNER JOIN verdemar.operacoes_entradas op ON
LEFT JOIN verdemar.produtos_venda_media pvm ent.operacao = op.codigo
ON pvm.codigo = p.codigo INNER JOIN verdemar.produtos_ean ean2 ON
AND pvm.loja = l.codigo eit.embalagem = ean2.chave
LEFT JOIN CTE_UltimaEntrada ult_ent WHERE
ON ult_ent.produto_codigo = p.codigo ent.status = 'S'
AND ult_ent.loja_codigo = l.codigo AND op.atualizacusto = 'S'
AND ult_ent.rn = 1 AND op.tiponota NOT IN ('B', 'T', 'L')
LEFT JOIN ( AND ent.dataentrada <= TRUNC(SYSDATE)
SELECT pr.codigo, AND eit.quantidade * ean2.quantidade > NVL(eit.quantidadedevolvida,
pr.loja, 0)
pr.precopromocao AND eit.codigo = ${args.codproduto}
FROM verdemar.promocao pr AND ent.loja IN (${args.ctx_user_companies_for_module})
WHERE (pr.datafinal >= TRUNC(SYSDATE) OR pr.indeterminada = 'S')
) prom )
ON prom.codigo = p.codigo
AND prom.loja = l.codigo SELECT
LEFT JOIN verdemar.produtos_ean ean l.codigo AS idempresa,
ON ean.codigo = p.codigo FNC_NOMEPESSOAS(l.codigo) AS nomeempresa,
AND ean.comprapadrao = 'S' cat.nome AS categoria,
LEFT JOIN verdemar.categoria cat ult_ent.dataultimaentrada AS dataultimaentrada,
ON cat.codigo = p.categoria (
LEFT JOIN verdemar.subgrupo subg SELECT
ON subg.codigo = p.subgrupo MAX(pm.data)
AND subg.setor = p.setor FROM
AND subg.grupo = p.grupo verdemar.produtos_movimento pm
LEFT JOIN verdemar.produtos_estoque_wms pew WHERE
ON pew.produto = p.codigo pm.codigo = p.codigo
AND pew.cd = 892605 AND pm.loja = l.codigo
WHERE p.codigo = ${args.codproduto} AND pm.data >= TRUNC(SYSDATE) - 50
AND l.participageradorlojas = 'S' -- limita o scan
AND p.inativo = 'N'
` ) AS dataultimavenda,
NULL AS precoatacado,
pp.precovenda AS precovarejo,
COALESCE(prom.precopromocao,
0) AS precopromoc,
pp.precovenda AS preconormal,
(
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.loja = l.codigo
AND ROWNUM = 1
) AS precomeuMambo,
0 AS vlrprecovenctoprox,
pp.custoliquido AS custoliquido,
pp.sugestao AS margem,
0 AS margematacado,
pp.lucro AS margemnormal,
(
SELECT
api.margemprecopromocao_clubevm
FROM
verdemar.produtos_fidelidade pf
INNER JOIN verdemar.autorizacao_promocao_itens api
ON
api.codigo = pf.codigo
AND api.chave = pf.chaveorigem
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.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 ROWNUM = 1
) AS estoquetroca,
FNC_QTD_EMTRANSITO(p.codigo,
l.codigo) AS estoquetransito,
0 AS estoquefuturo,
0 AS estoquereservado,
0 AS reserva,
pew.estoque AS estoquedisponivelcd,
0 AS estoquefuturocd,
pvm.mediasempromocao AS mdv,
pvm.mediacompromocao AS mdvpromoc,
pvm.diasestoque AS ddv,
NULL AS ddvminimo,
NULL AS ddvmaximo,
NULL AS dtavalidade,
p.numerodiasvalidade AS validadedias,
NULL AS classeabastecimento,
p.tipoabastecimento AS formaabastecimento,
ean.embalagem AS descricaoembalagem,
ean.quantidade AS quantidadeembalagem,
ult_ent.quantidadecompra AS quantidadecompra,
0 AS qtdeatacado,
CASE
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,
NULL AS statuscompra,
p.paicomposto AS idbase,
NULL AS tipotroca,
p.codigo AS seqproduto,
p.nome AS Descricao
FROM
verdemar.produtos p
INNER JOIN verdemar.produtos_loja pl
ON
pl.codigo = p.codigo
INNER JOIN verdemar.loja l
ON
l.codigo = pl.loja
INNER JOIN verdemar.produtos_precos pp
ON
pp.codigo = p.codigo
AND pp.loja = l.codigo
LEFT JOIN verdemar.produtos_estoque est
ON
est.codigo = p.codigo
AND est.loja = l.codigo
LEFT JOIN verdemar.produtos_venda_media pvm
ON
pvm.codigo = p.codigo
AND pvm.loja = l.codigo
LEFT JOIN CTE_UltimaEntrada ult_ent
ON
ult_ent.produto_codigo = p.codigo
AND ult_ent.loja_codigo = l.codigo
AND ult_ent.rn = 1
LEFT JOIN (
SELECT
pr.codigo,
pr.loja,
pr.precopromocao
FROM
verdemar.promocao pr
WHERE
(pr.datafinal >= TRUNC(SYSDATE)
OR pr.indeterminada = 'S')
) prom
ON
prom.codigo = p.codigo
AND prom.loja = l.codigo
LEFT JOIN verdemar.produtos_ean ean
ON
ean.codigo = p.codigo
AND ean.comprapadrao = 'S'
LEFT JOIN verdemar.categoria cat
ON
cat.codigo = p.categoria
LEFT JOIN verdemar.subgrupo subg
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
AND pew.cd = 892605
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) => { detalhe_preco: (args) => {