Validação por Fórmula em Vendas

O validador por fórmula é o mais versátil das validações personalizadas. Em vez de escolher uma regra pronta, você escreve a sua própria condição e o Fácil123 a avalia no momento de gravar a venda: se a condição for verdadeira, a venda passa; se for falsa, a gravação é barrada e o sistema exibe a mensagem de erro.

É o tipo a escolher quando nenhum dos validadores prontos — estoque suficiente, item duplicado, cliente inadimplente — resolve a sua necessidade.

Quando a fórmula olha a venda inteira

Este validador avalia a venda como um todo: a fórmula recebe os dados do documento e devolve um único verdadeiro ou falso. É o que você quer para regras sobre o valor total, o destinatário, a operação, o vendedor, a data de emissão e afins.

Quando a regra precisa valer para cada linha da venda, existem duas variações deste mesmo validador:

Cadastrando

  1. No menu superior, clique na Engrenagem.
  2. Clique em Validações personalizadas.
  3. Escolha Venda.
  4. Clique em Incluir.
  5. Na galeria, selecione o modelo Fórmula personalizada.
  6. Preencha os campos (veja abaixo) e clique em Salvar.

Campos

Além dos campos comuns a toda validação — Nome, Execução, Finalidade e Registro arquivado —, este validador tem dois campos próprios:

  • Fórmula: a regra que decide se a venda pode ser gravada. Ela deve devolver verdadeiro para liberar a gravação e falso para barrá-la. A linguagem é a mesma usada em todo o Fácil123 — consulte Fórmulas para a sintaxe e a lista de atributos da venda.
  • Mensagem de erro: o texto exibido quando a venda é barrada. Capriche na mensagem: ela é o que orienta quem está vendendo a corrigir o problema.

Exemplo: não gravar venda abaixo de um valor mínimo

Suponha que vendas abaixo de R$ 500,00 só possam ser registradas após aprovação. Para barrar as que ficam abaixo desse valor:

  • Fórmula:
{ ">=": [{ "attr": "invoice.total" }, 500] }
  • Mensagem de erro: Vendas abaixo de R$ 500,00 precisam de aprovação antes de serem gravadas.

Como funciona: a fórmula compara o total da venda com 500. Quando o total é maior ou igual, ela devolve verdadeiro e a venda é gravada; quando é menor, devolve falso e a gravação é barrada com a mensagem acima.

Para condicionar quando o validador roda — por exemplo, aplicá-lo apenas a uma operação específica — use o campo Execução com um critério, como descrito em Critério de execução com fórmula.

Exemplo: bloquear NFC-e para clientes PJ no PDV

Impede que uma venda seja gravada como NFC-e quando o destinatário é uma pessoa jurídica (PJ), caso em que o documento correto é a NF-e. Funciona tanto na tela padrão de vendas quanto no PDV.

  1. No campo Execução, selecione critério específico, atributo Destinatário, operador Igual a, alterne o valor para fórmula e cole o JSON abaixo, substituindo ID_DA_OPERACAO_NFCE pelo ID da operação NFC-e da licença (visível na URL do registro em Engrenagem → Operações):
{
  "if": [
    {"==": [{"attr": "invoice.operationkind_id"}, ID_DA_OPERACAO_NFCE]},
    {"attr": "invoice.recipient_id"},
    0
  ]
}
  1. No campo Fórmula, cole:
{"!": [{"==": [{"attr": "invoice.recipient.kind"}, "company"]}]}

O critério de execução faz a validação rodar apenas quando a operação for NFC-e. Se o destinatário for pessoa jurídica, a fórmula bloqueia a gravação. Para clientes PF ou operações diferentes de NFC-e, a validação é ignorada.

Exemplo: bloquear alterações a partir de determinada etapa

Depois que a venda chega a uma etapa como Faturado, você pode querer que só alguns usuários consigam editá-la. A validação roda sempre que a venda é gravada, inclusive quando ela é arrastada no quadro, então basta barrar a gravação de quem não está autorizado enquanto a venda estiver nessas etapas:

{
  "if": [
    { "in": [{ "attr": "invoice.invoicelane_id" }, [ID_ETAPA_1, ID_ETAPA_2]] },
    {
      "or": [
        { "==": [{ "current_user_id": [] }, null] },
        { "in": [{ "current_user_id": [] }, [ID_USUARIO_1, ID_USUARIO_2]] }
      ]
    },
    true
  ]
}

Resultado: nas etapas indicadas, true só para os usuários da lista e para rotinas automáticas; false para qualquer outro usuário. Nas demais etapas, a validação sempre passa.

Troque ID_ETAPA_1 e ID_ETAPA_2 pelos ids das etapas bloqueadas (aparecem na URL do kanban ao passar o mouse sobre a etapa) e ID_USUARIO_1 e ID_USUARIO_2 pelos ids dos usuários que podem continuar editando. A checagem de current_user_id vazio libera as rotinas automáticas, que rodam sem usuário.

Como a validação olha a etapa em que a venda está sendo gravada, mover a venda para uma dessas etapas também conta como gravação nela. Por isso, só os usuários da lista conseguem colocar a venda nessas etapas.

Pelo mesmo motivo, quem não está na lista ainda consegue tirar a venda dessas etapas e editá-la na etapa anterior. Para fechar esse caminho, cadastre também a Validação de Fluxo das Etapas do Quadro com o comportamento Não pode voltar para qualquer etapa anterior.

Outros casos comuns em vendas

Outras regras frequentes montadas com este validador (e algumas com o critério de execução):

  • Não salvar sem parcelas informadas — conta as parcelas e barra a venda quando não há nenhuma. Veja a fórmula em Fórmulas.
  • Obrigar preenchimento do Vendedor — barra a venda sem vendedor informado. Veja em Fórmulas.
  • Restringir inclusão a determinadas etapas por usuário — limita quais etapas certos usuários podem usar. Veja em Fórmulas.
  • Tabela de preço da venda deve corresponder à do cliente — bloqueia quando a tabela usada difere da cadastrada no cliente.
  • Exigir campo personalizado antes de avançar de etapa — impede mover a venda para uma etapa enquanto um campo obrigatório (status de entrega, conferência etc.) não estiver preenchido.
  • Lembrar de trocar o depósito conforme a cidade do cliente — para quem usa Multidepósito, avisa quando o depósito não corresponde à cidade do cliente.

Perguntas e respostas

1 - Qual a diferença entre este validador e o de cada item? R: Este avalia a venda inteira de uma vez; o de cada item repete a fórmula para cada produto e aponta qual deles reprovou. Use este para regras sobre o documento (total, destinatário, datas) e o de cada item para regras sobre os produtos.

2 - Posso deixar a venda passar para alguns usuários? R: Sim. No campo Execução, monte um critério que pule a validação para os usuários autorizados. Veja o exemplo em Validações personalizadas.