Finalidade
Ela bloqueia a venda de produtos com preço unitário abaixo do limite mínimo permitido, que é definido como preço de tabela menos 17% de desconto. Assim, evita que usuários concedam descontos excessivos que possam comprometer a margem de lucro.
Lógica da Regra
- Verifica os itens do movimento (
ITENSMOV
) associado ao documento fiscal (MOVIMENTO
). - Compara o preço unitário praticado (
IM.PRECOUNIT
) com o preço de tabela do produto (PRODUTOS.PrecoVenda
), aplicando o limite de 17%. - Condições de aplicação:
- Se for usada a Tabela de Preço 1 (
IDPRECOTABELA = '1'
) e o cliente for da mesma UF da filial, o preço mínimo permitido éPrecoVenda1 - 17%
. - Se for usada a Tabela de Preço 2 (
IDPRECOTABELA = '2'
) e o cliente for de UF diferente da filial, o preço mínimo permitido éPrecoVenda2 - 17%
.
- Se for usada a Tabela de Preço 1 (
Resultado
- Caso algum item não respeite essa regra, a variável
@OK
retorna'S'
, indicando violação da regra. - Caso contrário, permanece
'N'
, indicando que o movimento está em conformidade.
REGRA
DECLARE @OK VARCHAR(1) = 'N'
DECLARE @IDMOV INT = :IDMOV
IF EXISTS (
SELECT 1
FROM MOVIMENTO M
INNER JOIN ITENSMOV IM ON IM.IDMOV = M.IDMOV
INNER JOIN PRODUTOS P ON P.IdProduto = IM.IdProduto
INNER JOIN CLI_FOR CF ON CF.CodCliFor = M.CodCliFor
INNER JOIN FILIAIS F ON F.CodFilial = M.CodFilial
WHERE M.IDMOV = @IDMOV
AND (
-- Caso seja tabela 1 e cliente da mesma UF da filial
(IM.IDPRECOTABELA = '1' AND CF.UFCLIFOR = F.UFFilial AND IM.PRECOUNIT < (p.PrecoVenda1 - (p.PrecoVenda1 * 0.17)))
-- OU caso seja tabela 4 e cliente de UF diferente da filial
OR (IM.IDPRECOTABELA = '2' AND CF.UFCLIFOR <> F.UFFilial AND IM.PRECOUNIT < (p.PrecoVenda2 - (p.PrecoVenda2 * 0.17)))
)
)
BEGIN
SET @OK = 'S'
END
SELECT OK = @OK