Skip to main content

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

  1. Verifica os itens do movimento (ITENSMOV) associado ao documento fiscal (MOVIMENTO).
  2. Compara o preço unitário praticado (IM.PRECOUNIT) com o preço de tabela do produto (PRODUTOS.PrecoVenda), aplicando o limite de 17%.
  3. 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%.

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