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:
- Fórmula em cada item da venda — avalia a fórmula item a item e aponta o item problemático.
- Fórmula em cada parcela da venda — avalia a fórmula parcela a parcela.
Cadastrando
- No menu superior, clique na Engrenagem.
- Clique em Validações personalizadas.
- Escolha Venda.
- Clique em Incluir.
- Na galeria, selecione o modelo Fórmula personalizada.
- 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.
- 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_NFCEpelo 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
]
}
- 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.