Pular para o conteúdo principal

MNF026 — Troca de Produtos com Emissão de Nota Fiscal (enriquecimento)

Menu: Faturamento > Movimentações > Notas Fiscais > Troca de Produtos com Emissão de Nota Fiscal

Objetivo​

O MNF026 (Troca de Produtos com Emissão de Nota Fiscal) permite, numa única tela, devolver produtos de uma ou mais notas de venda já emitidas e, ao mesmo tempo, emitir uma nova nota fiscal de saída com os produtos que o cliente está levando na troca. O sistema calcula a diferença entre o valor devolvido e o valor da nova nota, permite quitar essa diferença por compensação de créditos do cliente, desconto ou geração de caixa/financeiro, e pode vincular a troca a um pedido de venda já cadastrado. Ao salvar, grava simultaneamente a nota de entrada (devolução) e a nota de saída (troca), grava um resumo em TROCANFERESUMO/TROCANF e, conforme parâmetros, movimenta estoque, gera comissão, contas a receber/pagar e NF-e/NFC-e.

Fluxo principal​

  1. Na aba 'Dados', selecionar/pesquisar a(s) nota(s) de venda originais na grade 'Notas Para Devolução' (informando Nº da nota, série ou pessoa). (Dados) — source/MNF026/UdmMNF026.pas:4661-4688 (ListaNotasDevolucao)
  2. Preencher os dados da nova nota de troca: Cliente, Série/Espécie de saída, Endereço e Data de Emissão. (Dados) — source/MNF026/UMNF026.dfm:341-425
  3. Na aba 'Nota', na grade 'Produtos Devolvidos (Entrada)', informar/ajustar o peso ou quantidade de cada item a devolver (ou usar o código de barras). (Nota) — source/MNF026/UMNF026.dfm:783-899
  4. Na grade 'Produtos p/ Troca (Saída)', informar os novos produtos que o cliente está levando, manualmente ou importando de um pedido de venda pelo botão Pedido. (Nota) — source/MNF026/UMNF026.dfm:1235-1293
  5. Informar Vendedor, Condição de Pagamento e Forma de Pagamento da nova nota; se necessário, informar data de vencimento. (Nota) — source/MNF026/UMNF026.pas:624-682 (TfrmMNF026.btnSalvarClick)
  6. Se houver diferença a favor do cliente, usar o botão 'Compensar' para abater créditos existentes e/ou aplicar desconto sobre a diferença (quando disponível). (Nota) — source/MNF026/UMNF026.pas:2575-2646 (TfrmMNF026.btnCompensarClick)

Campos obrigatórios​

CampoCondiçãoMensagemFonte
Pessoa (cliente) da nova notaSempre, ao trocar (F6) e ao salvarW-1993 / W-1979source/MNF026/UMNF026.pas:2317-2321 (TfrmMNF026.btnTrocaClick)
Endereço da nova notaSempre, requer pessoa já preenchidaW-1980source/MNF026/UMNF026.pas:592-595 (TfrmMNF026.btnSalvarClick)
Série da nova nota (saída)SempreW-0786source/MNF026/UMNF026.pas:598-602 (TfrmMNF026.btnSalvarClick)
Data de Emissão da nova notaSempreW-1981source/MNF026/UMNF026.pas:604-609 (TfrmMNF026.btnSalvarClick)
Série da nota de devolução (entrada)SempreW-1984source/MNF026/UMNF026.pas:638-649 (TfrmMNF026.btnSalvarClick)
Condição de pagamentoSempreW-0324 / W-1967source/MNF026/UMNF026.pas:651-656 (TfrmMNF026.btnSalvarClick)
Data de VencimentoSomente quando a condição de pagamento é do tipo 'Digite o Vencimento' (campo fica editável)W-1985source/MNF026/UMNF026.pas:657-665 (TfrmMNF026.btnSalvarClick)
Forma de pagamentoSempreW-0326 / W-1968source/MNF026/UMNF026.pas:668-672 (TfrmMNF026.btnSalvarClick)
VendedorSomente quando PARMFATUR.ST_BLOQUEIOVENDEDOR = 'S'W-0127source/MNF026/UMNF026.pas:674-682 (TfrmMNF026.btnSalvarClick)
Ao menos um produto na grade de Devolução (Entrada)SempreW-1987source/MNF026/UMNF026.pas:698-701 (TfrmMNF026.btnSalvarClick)
Ao menos um produto na grade de Troca (Saída)SempreW-1988 / W-1989source/MNF026/UMNF026.pas:703-715 (TfrmMNF026.btnSalvarClick)

Mensagens: causa e ação​

W-0127​

Causa: O parâmetro PARMFATUR.ST_BLOQUEIOVENDEDOR está ligado ('S') e o campo Vendedor da nova nota não foi preenchido.

Ação: Informar o vendedor no campo correspondente da aba Dados antes de salvar.

Fonte: source/MNF026/UMNF026.pas:674-682 (TfrmMNF026.btnSalvarClick)

W-1921​

Causa: O cliente informado está com o campo de situação SCPC vazio no cadastro de Pessoa, o que o sistema trata como bloqueio financeiro.

Ação: Verificar/atualizar a situação financeira do cliente no cadastro de Pessoa (TFA001).

Fonte: source/MNF026/UdmMNF026.pas:4793-4795 (TdmMNF026.tabNOTACD_PESSOAValidate)

W-1980​

Causa: A nova nota não tem um endereço de cliente definido (pessoa sem endereço cadastrado ou endereço não selecionado).

Ação: Cadastrar/selecionar um endereço da pessoa em TFA001 e reabrir o cliente na tela.

Fonte: source/MNF026/UMNF026.pas:592-595 (TfrmMNF026.btnSalvarClick)

W-0786​

Causa: A série da nova nota fiscal (saída) não foi informada.

Ação: Informar/selecionar a série da nova nota de saída (F9 no campo Série).

Fonte: source/MNF026/UMNF026.pas:598-602 (TfrmMNF026.btnSalvarClick)

W-1955​

Causa: A série de saída informada não tem Parâmetros de Nota Fiscal (MFA002) cadastrados para a empresa e operação de Saída.

Ação: Cadastrar os parâmetros dessa série em MFA002 ou usar outra série já parametrizada.

Fonte: source/MNF026/UdmMNF026.pas:4955-4962 (TdmMNF026.tabNOTACD_SERIENFValidate)

W-1942​

Causa: A série escolhida para a nota de devolução está marcada como cupom fiscal, é a série 'C' ou tem espécie ECF, o que não é permitido para devolução em troca.

Ação: Selecionar outra série de entrada normal (não fiscal de cupom) nos Parâmetros de Nota (MFA002).

Fonte: source/MNF026/UdmMNF026.pas:4475-4488 (TdmMNF026.tabFiltroCD_SERIEDEVValidate)

W-1950​

Causa: A nota de origem selecionada para devolução não está com status Válida (foi cancelada ou está em outro status).

Ação: Selecionar uma nota de origem válida; verificar o status da nota em Consulta de Notas Fiscais (CNF001).

Fonte: source/MNF026/UdmMNF026.pas:4769-4773 (TdmMNF026.tabDEVOLUCOESBeforePost)

W-1951​

Causa: A nota de origem já foi totalmente devolvida em trocas/devoluções anteriores, não restando saldo de peso/quantidade para devolver.

Ação: Selecionar outra nota que ainda tenha saldo, ou confirmar com o cliente se a mercadoria já foi trocada antes.

Fonte: source/MNF026/UdmMNF026.pas:4775-4779 (TdmMNF026.tabDEVOLUCOESBeforePost)

W-1965​

Causa: A quantidade ou peso digitado para devolução do item é maior do que o saldo ainda disponível daquele item na nota de origem.

Ação: Reduzir a quantidade/peso para o valor de saldo informado na mensagem.

Fonte: source/MNF026/UdmMNF026.pas:5478-5492 (ValidaQuantidadeDevol)

W-0122​

Causa: O produto informado (na devolução ou na troca) está inativo no cadastro de produtos.

Ação: Reativar o produto em TPO001 ou usar outro produto ativo.

Fonte: source/jCommon/jValidate.pas:1544-1545 (ValidaItem)

W-0168​

Causa: A movimentação do item gera estoque, mas o produto não tem local de armazenagem cadastrado, ou o usuário não tem acesso a esse local, ou o local não permite faturamento.

Ação: Cadastrar/liberar o local de armazenagem do produto (TOF007) ou dar acesso ao usuário.

Fonte: source/MNF026/UdmMNF026.pas:4218-4231 (TdmMNF026.tabITEMTROCACD_MOVIMENTACAOValidate)

W-1977​

Causa: O item que o usuário tentou excluir da grade de troca veio de um pedido de venda vinculado e não pode ser removido diretamente.

Ação: Reabrir a seleção de pedidos (botão Pedido) e desmarcar o item/pedido lá, em vez de excluir a linha na grade.

Fonte: source/MNF026/UdmMNF026.pas:6864-6865 (TdmMNF026.tabITEMTROCABeforeDelete)

W-1969​

Causa: O valor marcado para compensar naquela conta é maior que o saldo disponível da própria conta.

Ação: Reduzir o valor de compensação para até o saldo exibido na conta.

Fonte: source/MNF026/UdmMNF026.pas:6288-6290 (TdmMNF026.cdsCompensacaoVL_COMPENSACAOValidate)

W-1978​

Causa: A soma de todas as compensações marcadas ultrapassa o valor da diferença da troca a favor do cliente.

Ação: Reduzir o total compensado até o limite da diferença mostrada na tela.

Fonte: source/MNF026/UfrmMNF026Comp.pas:66-68 (TfrmCompMNF026.BitBtn1Click)

W-1995​

Causa: O usuário tentou abrir a tela de compensação de créditos, mas não há diferença a pagar na troca (a diferença já é zero ou negativa).

Ação: Não é necessário compensar; a troca já está equilibrada ou a favor da loja.

Fonte: source/MNF026/UMNF026.pas:2575-2578 (TfrmMNF026.btnCompensarClick)

W-1941​

Causa: O parâmetro de fechamento de troca está configurado como Liquidação (PARMFATUR.ST_FECHAMENTOTROCA='L') e a condição de pagamento escolhida é do tipo 'Digite o Vencimento'.

Ação: Selecionar outra condição de pagamento (do tipo Vencimento fixo) ou pedir para o cadastro alterar a condição, conforme MFA001/TFC002.

Fonte: source/MNF026/UdmMNF026.pas:4418-4419 (TdmMNF026.tabNOTACD_CONDPAGTOValidate)

W-1924​

Causa: O modelo de fechamento por Liquidação precisa de uma condição de pagamento do tipo 'Vencimento' cadastrada para gerar a nota de devolução, mas nenhuma foi encontrada.

Ação: Cadastrar ao menos uma condição de pagamento do tipo Vencimento em TFC002.

Fonte: source/MNF026/UdmMNF026.pas:2698-2707 (Grava_NotaFiscal)

W-1990​

Causa: O caixa para receber/pagar a diferença da troca não foi aberto (o usuário cancelou a abertura do caixa).

Ação: Refazer a troca e concluir a abertura do caixa quando solicitado; sem isso a nota inteira é cancelada.

Fonte: source/MNF026/UMNF026.pas:1004-1008 (TfrmMNF026.btnSalvarClick)

W-1932​

Causa: O mesmo produto já foi lançado em outra linha da grade de Produtos p/ Troca desta nota.

Ação: Remover a linha duplicada ou aumentar a quantidade na linha já existente do produto.

Fonte: source/MNF026/UdmMNF026.pas:3905-3914 (TdmMNF026.tabITEMTROCACD_ITEMValidate)

W-1957​

Causa: O produto já foi selecionado para devolução a partir da mesma nota de origem nesta troca.

Ação: Verificar a grade de devolução; o produto/nota já está lançado, não é necessário repetir.

Fonte: source/MNF026/UdmMNF026.pas:5130-5133 (TdmMNF026.tabITEMDEVOLCD_ITEMValidate)

W-1997/W-1998/W-1999/W-2000/W-2001​

Causa: A tela de Autorização (login/senha de um Autorizador) apareceu porque a nota está sujeita a bloqueio (VERIFICA_BLOQUEIO); os campos de login/senha ficaram vazios, o usuário informado não é/está inativo como autorizador, ou a senha não confere.

Ação: Informar login e senha de um usuário cadastrado como Autorizador ativo (TFA008/ADM001).

Fonte: source/MNF026/UMNF026AUTORIZACAO.pas:42-84 (TfrmAUTORIZACAO.btnConfirmarClick)

Regras de negócio​

  • MNF026.R001 (ver regras/MNF026/MNF026.R001.md)
  • MNF026.R002 (ver regras/MNF026/MNF026.R002.md)
  • MNF026.R003 (ver regras/MNF026/MNF026.R003.md)
  • MNF026.R004 (ver regras/MNF026/MNF026.R004.md)
  • MNF026.R005 (ver regras/MNF026/MNF026.R005.md)
  • MNF026.R006 (ver regras/MNF026/MNF026.R006.md)
  • MNF026.R007 (ver regras/MNF026/MNF026.R007.md)
  • MNF026.R008 (ver regras/MNF026/MNF026.R008.md)
  • MNF026.R009 (ver regras/MNF026/MNF026.R009.md)
  • MNF026.R010 (ver regras/MNF026/MNF026.R010.md)
  • MNF026.R011 (ver regras/MNF026/MNF026.R011.md)
  • MNF026.R012 (ver regras/MNF026/MNF026.R012.md)
  • MNF026.R013 (ver regras/MNF026/MNF026.R013.md)
  • MNF026.R014 (ver regras/MNF026/MNF026.R014.md)
  • MNF026.R015 (ver regras/MNF026/MNF026.R015.md)
  • MNF026.R016 (ver regras/MNF026/MNF026.R016.md)
  • MNF026.R017 (ver regras/MNF026/MNF026.R017.md)
  • MNF026.R018 (ver regras/MNF026/MNF026.R018.md)
  • MNF026.R019 (ver regras/MNF026/MNF026.R019.md)
  • MNF026.R020 (ver regras/MNF026/MNF026.R020.md)
  • MNF026.R021 (ver regras/MNF026/MNF026.R021.md)
  • MNF026.R022 (ver regras/MNF026/MNF026.R022.md)

Perguntas frequentes​

P: Por que aparece a mensagem 'A Pessoa está com Situação Financeira Bloqueada'? R: Porque o campo de situação SCPC do cliente está vazio no cadastro de Pessoa; o sistema trata isso como bloqueio. É preciso liberar a situação financeira do cliente no cadastro (TFA001) antes de continuar a troca. Fonte: source/MNF026/UdmMNF026.pas:4793-4795 (TdmMNF026.tabNOTACD_PESSOAValidate)

P: Por que não consigo salvar a troca sem informar o vendedor? R: Porque o parâmetro PARMFATUR.ST_BLOQUEIOVENDEDOR está configurado como 'S' para essa empresa, exigindo vendedor em todas as movimentações de venda, inclusive na troca. Fonte: source/MNF026/UMNF026.pas:674-682 (TfrmMNF026.btnSalvarClick)

P: Deu a mensagem 'A Nota não possui saldo para devolução'. O que fazer? R: A nota fiscal de origem selecionada já teve todo o seu conteúdo devolvido em trocas/devoluções anteriores. Selecione outra nota de origem que ainda tenha itens com saldo pendente de devolução. Fonte: source/MNF026/UdmMNF026.pas:4775-4779 (TdmMNF026.tabDEVOLUCOESBeforePost)

P: Por que não consigo excluir um item da grade de troca? R: Esse item foi importado de um pedido de venda vinculado à troca; para removê-lo é preciso voltar à tela de seleção de pedidos (botão Pedido) e desmarcar o item lá, e não excluí-lo diretamente da grade. Fonte: source/MNF026/UdmMNF026.pas:6862-6866 (TdmMNF026.tabITEMTROCABeforeDelete)

P: Por que o botão de Compensar créditos não aparece na tela? R: O botão só é exibido quando o parâmetro PARMFATUR.ST_FECHAMENTOTROCA está configurado como 'L' (Liquidação) e, mesmo assim, só fica habilitado se o cliente tiver saldo credor em contas a receber/adiantamento. Fonte: source/MNF026/UMNF026.pas:2603-2646 (TfrmMNF026.ValidaLiberacaoCompensacao)

P: Deu 'Nota Fiscal Cancelada. A Execução do Processo de Caixa foi Cancelada'. Por quê? R: No modelo de fechamento por Liquidação, quando a troca gera um valor de caixa (diferença a receber/pagar), o sistema tenta abrir automaticamente um lançamento de caixa; se essa abertura for recusada/cancelada, a nota fiscal inteira é desfeita e precisa ser refeita. Fonte: source/MNF026/UMNF026.pas:1004-1008 (TfrmMNF026.btnSalvarClick)

P: Por que apareceu uma tela pedindo login e senha de autorizador ao salvar? R: O sistema verificou que a nova nota está sujeita a algum bloqueio comercial (regra de VERIFICA_BLOQUEIO) e exige a confirmação de um usuário cadastrado como Autorizador ativo para liberar a gravação. Fonte: source/MNF026/UdmMNF026.pas:943-960 (GravaNotaNova)

P: Deu a mensagem 'Produto não está Ativo'. O que fazer? R: O produto informado (na devolução ou na troca) está com o cadastro inativo. É preciso reativá-lo no cadastro de Produtos (TPO001) ou usar outro produto ativo na operação. Fonte: source/jCommon/jValidate.pas:1544-1545 (ValidaItem)

P: Por que não consigo usar a condição de pagamento 'Digite o Vencimento' nesta troca? R: Porque a empresa está configurada com modelo de fechamento de troca por Liquidação (PARMFATUR.ST_FECHAMENTOTROCA='L'), que não permite condição de pagamento do tipo 'Digite o Vencimento'; é preciso usar/cadastrar uma condição do tipo Vencimento em TFC002. Fonte: source/MNF026/UdmMNF026.pas:4418-4419 (TdmMNF026.tabNOTACD_CONDPAGTOValidate)

P: Deu 'O valor de compensação não pode ser maior que o valor da diferença da troca'. Por quê? R: A soma dos valores marcados para compensar em contas do cliente ultrapassou o valor da diferença que falta cobrir na troca. Reduza os valores marcados até caberem dentro da diferença exibida na tela. Fonte: source/MNF026/UfrmMNF026Comp.pas:66-68 (TfrmCompMNF026.BitBtn1Click)

P: Deu 'O Produto ... já foi Informado na Nota Fiscal'. O que significa? R: O mesmo produto já está em outra linha da grade de Produtos p/ Troca dessa nota. Não é permitido duplicar o mesmo item; ajuste a quantidade na linha já existente ou remova a linha repetida. Fonte: source/MNF026/UdmMNF026.pas:3905-3914 (TdmMNF026.tabITEMTROCACD_ITEMValidate)

P: Por que a nova nota de saída não pode usar essa série de nota fiscal? R: A série informada não está parametrizada em PARMNOTA para operação de Saída na empresa atual. É preciso cadastrar essa série em Parâmetros de Nota Fiscal (MFA002) ou usar outra série já parametrizada. Fonte: source/MNF026/UdmMNF026.pas:4955-4962 (TdmMNF026.tabNOTACD_SERIENFValidate)

Dúvidas em aberto (o código não responde)​

  • Quais são todos os valores válidos de PARMFATUR.ST_FECHAMENTOTROCA e o que cada um representa? O código só trata explicitamente os valores 'S' e 'L'. — UMNF026.pas e UdmMNF026.pas comparam ST_FECHAMENTOTROCA apenas contra 'S' e 'L' em vários pontos (ex.: UMNF026.pas:766, 800, 1193; UdmMNF026.pas:2690, 4418), mas não há um trecho no módulo que enumere/documente o significado de cada letra nem o comportamento para outros valores possíveis do domínio.
  • O formulário UParcelaTroca.pas (TfrmParcela) ainda é utilizado pelo fluxo atual do MNF026? — UParcelaTroca.pas referencia campos como dmMNF026.tabTROCACD_CONDPAGTO, tabTROCAT_VL_TROCA e tabTROCADT_TROCA, que não aparecem entre os componentes/campos declarados em UdmMNF026.pas (que usa tabNOTATROCA e tabFiltro). Além disso, a rotina de parcelamento realmente chamada em Grava_NotaFiscal é a função externa MostraParcela (jParcela), não este formulário. Não ficou claro se UParcelaTroca.pas é código morto/legado ou se é usado por outro caminho não lido nesta sessão.
  • Qual o efeito de negócio detalhado de cada letra de PARMFATUR.ST_PEDVENDA ('L', 'P', 'V', 'D') na troca vinda de pedido? — UMNF026.pas:3072-3113 (Preenche_VetorPedido/carrega_Nota) trata essas letras apenas para decidir a fórmula de cálculo do valor líquido/IPI do item importado do pedido, sem comentário explicando o significado de cada modo; não achei documentação complementar no módulo.
  • O texto da mensagem de catálogo W-1935 ('não pode ser de Compra') está de fato desatualizado em relação à validação de código (que testa Tipo de Operação = Entrada), ou existe um cenário de 'Compra' equivalente a TP_OPERACAO='E' que não ficou claro no código lido? — UdmMNF026.pas:4189-4190 apenas verifica ResultMov[1] = 'E' (Entrada) para levantar W-1935; não há teste específico por um código de 'Compra' distinto de Entrada dentro do trecho lido desta rotina.