Pular para o conteúdo principal

TP_EXCLUSAOENTREGADEVOLUCAO - Tipo de Exclusão de Entrega na Devolução

Tela de configuração: MFA001 - Parâmetros de Faturamento Localização: Parâmetros → aba Controle Entrega (pagControleEntrega / grupo grpControleEntrega), rótulo "Excluir Entrega na Devolução" (Label97, UMFA001.dfm:11189-11202) Tabela: PARMFATUR.TP_EXCLUSAOENTREGADEVOLUCAO (DOM_CHAR1 DEFAULT 'M' NOT NULL, docs/schema/tables/PARMFATUR.sql:215) Valor padrão: M (Manual) - tanto no DDL (DEFAULT 'M') quanto no AfterInsert (UdmMFA001.pas:563)

Define quem é responsável por dar baixa no Controle de Entrega quando uma nota de devolução / cancelamento de remessa / cancelamento de complemento é emitida contra uma nota mestra que possui CONTROLEENTREGA gerado:

  • A (Automático): as procedures GERA_MESTRA / CANCELA_MESTRA chamam GERA_CONTROLEENTREGA no momento da gravação, liberando/baixando a entrega sem intervenção do usuário.
  • M (Manual): as procedures não tocam no CONTROLEENTREGA; o sistema (MNF005/MNF007) apenas avisa o usuário que existem entregas vinculadas e pede confirmação antes de seguir - a baixa manual na tela de controle de entrega continua sendo responsabilidade do operador.

O combo do MFA001 fica desabilitado (Enabled = False em UMFA001.dfm:11358) porque o valor é derivado do parâmetro ST_CONFIRMAENTREGAREMESSA: sempre que o usuário muda ST_CONFIRMAENTREGAREMESSA no OnChange cmbST_CONFIRMAENTREGAREMESSAChange (UMFA001.pas:2486-2496), o sistema seta TP_EXCLUSAOENTREGADEVOLUCAO := 'A' se ST_CONFIRMAENTREGAREMESSA = 'S', senão 'M'. Ou seja, os dois parâmetros andam em par (ver ST_CONFIRMAENTREGAREMESSA se existir / seção de interação abaixo).

Telas impactadas​

MóduloCódigoUso
Parâmetros de FaturamentoMFA001Único local onde o valor é gravado (cmbTP_EXCLUSAOENTREGADEVOLUCAO em UMFA001.dfm:11345-11372). Combo travado - muda junto com ST_CONFIRMAENTREGAREMESSA
Cancelamento de Nota FiscalMNF005Lê via parmFatur.Values['TP_EXCLUSAOENTREGADEVOLUCAO'] (UMNF005.pas:445). Quando = 'M' e ST_CONFIRMAENTREGAREMESSA = 'N', antes de cancelar uma nota que tem CONTROLEENTREGA pendente, abre o diálogo "A Nota Possui Controle de Entrega, Deseja Continuar e Cancelar os Controles de Entrega?" (C-0000)
Digitação de Nota Fiscal de DevoluçãoMNF007Em btnSalvarClick (UMNF007.pas:1207) consulta ParmFatur.Values['TP_EXCLUSAOENTREGADEVOLUCAO'] duas vezes: linha 1423 monta a tabITEMCONTROLE para seleção manual de saldo de entrega por pedido/nota e linha 1723 chama DEVOLUCAO_CONTROLEENTREGA + VERIFICA_SALDOCONTROLEENTREGA para validar o saldo antes de gravar a devolução. Ambos só acontecem quando o parâmetro é M - se for A, nenhuma validação é feita no Delphi e toda a baixa é feita pelas procedures SQL

Procedures impactadas​

ObjetoArquivoPapel
GERA_MESTRAScripts/GERA_MESTRA.sql linhas 43, 47-50, 195-203, 301-308Lê P.TP_EXCLUSAOENTREGADEVOLUCAO em V_TP_EXCLUSAOENTREGADEVOLUCAO. Só executa GERA_CONTROLEENTREGA(...) automaticamente quando V_ST_CONFIRMAENTREGAREMESSA = 'S' AND V_TP_EXCLUSAOENTREGADEVOLUCAO = 'A' (e I_ST_MESTRA IN ('R','C','D') na Remessa / Complemento / Devolução e I_CD_SERIE <> 'XXXX'). Quando o parâmetro é M, a chamada é ignorada e o controle de entrega fica sob responsabilidade do usuário
CANCELA_MESTRAScripts/CANCELA_MESTRA.sql linhas 43, 61-64, 340-347Mesma lógica: ao cancelar Remessa (R), Complemento (C) ou Devolução de Mestra (E), só reexecuta GERA_CONTROLEENTREGA(...) com o tipo de cancelamento (F/I/R) se V_ST_CONFIRMAENTREGAREMESSA = 'S' AND V_TP_EXCLUSAOENTREGADEVOLUCAO = 'A'. Caso contrário o controle precisa ser ajustado manualmente
GERA_CONTROLEENTREGAScripts/GERA_CONTROLEENTREGA.sqlProcedure alvo que efetivamente grava/baixa a tabela CONTROLEENTREGA. Só é chamada por GERA_MESTRA / CANCELA_MESTRA quando o par (ST_CONFIRMAENTREGAREMESSA='S', TP_EXCLUSAOENTREGADEVOLUCAO='A') está ativo
DEVOLUCAO_CONTROLEENTREGAScripts/DEVOLUCAO_CONTROLEENTREGA.sqlValidação auxiliar: o MNF007 só chama essa procedure (e emite W-0000 se ela retornar mensagem) quando TP_EXCLUSAOENTREGADEVOLUCAO = 'M', para avisar o usuário sobre inconsistência antes de gravar a devolução
VERIFICA_SALDOCONTROLEENTREGAprocedure referenciada em UMNF007.pas:1749Idem - só é consultada no fluxo manual

Campos envolvidos​

CampoTabelaTipoDescrição
TP_EXCLUSAOENTREGADEVOLUCAOPARMFATURCHAR(1) / DEFAULT 'M' NOT NULLO próprio parâmetro
ST_CONFIRMAENTREGAREMESSAPARMFATURCHAR(1) / DEFAULT 'N' NOT NULLParâmetro "pai". Quando 'S', o MFA001 força TP_EXCLUSAOENTREGADEVOLUCAO = 'A'. Quando 'N', força 'M'
ST_CONTENTREGAPARMFATURCHAR(1)Define se o Controle de Entrega trata só Produtos ou Produto+Serviço (ver ST_CONTENTREGA) - prerequisito para o fluxo acima ter efeito
ST_ENTREGAPARMFATURCHAR(1)Define se o sistema usa Controle de Entrega (quando <> 'N'). Se for 'N', os parâmetros ST_CONFIRMAENTREGAREMESSA / TP_EXCLUSAOENTREGADEVOLUCAO ficam inócuos
CONTROLEENTREGA.*tabela de agendamento de entrega-Tabela que é inserida/atualizada pela procedure GERA_CONTROLEENTREGA no fluxo automático
MESTRA, REMESSA, PEDIDONOTA, DEVOLUCAONOTAtransacionais-Tabelas participantes da cadeia Mestra → Remessa/Complemento → Devolução que disparam a regra

Opções disponíveis​

Os itens definidos no ComboBox cmbTP_EXCLUSAOENTREGADEVOLUCAO (UMFA001.dfm:11365-11367) são:

Items.Strings = (
'Automático'#9'A'
'Manual'#9'M')

A - Automático​

O que fazDetalhe
Quem dá baixa no CONTROLEENTREGA?Procedures SQL GERA_MESTRA / CANCELA_MESTRA
Quando?No INSERT/UPDATE das tabelas MESTRA/REMESSA (gravação da nota Remessa/Complemento/Devolução/Cancelamento)
Interação obrigatóriaSó vale se ST_CONFIRMAENTREGAREMESSA = 'S' - a combinação (S, A) é travada pelo MFA001
MNF005 / MNF007 avisam o usuário?Não - o teste TP_EXCLUSAOENTREGADEVOLUCAO = 'M' falha e o bloco de aviso/validação manual é pulado
Fluxo resultanteO usuário grava a devolução e as entregas são liberadas/baixadas "silenciosamente" pela procedure no servidor

Simulação passo a passo​

  1. ST_ENTREGA = 'S', ST_CONFIRMAENTREGAREMESSA = 'S', TP_EXCLUSAOENTREGADEVOLUCAO = 'A' (setado automaticamente pelo MFA001).
  2. Operador emite Remessa (nota filha R contra uma mestra).
  3. GERA_MESTRA.sql linha 195 avalia V_ST_CONFIRMAENTREGAREMESSA = 'S' AND V_TP_EXCLUSAOENTREGADEVOLUCAO = 'A' AND I_ST_MESTRA IN ('R','C','D') AND I_CD_SERIE <> 'XXXX' → verdadeiro.
  4. Chama GERA_CONTROLEENTREGA(...) que insere/atualiza CONTROLEENTREGA para os itens da remessa.
  5. Mais tarde o operador cancela a remessa.
  6. CANCELA_MESTRA.sql linha 340 avalia a mesma condição com V_TP_MESTRA IN ('F','I','R') → verdadeiro.
  7. GERA_CONTROLEENTREGA(...) é executada de novo (agora com V_TP_MESTRA = 'F') e devolve o saldo ao controle de entrega da mestra.

Resultado esperado: nenhuma pergunta ao usuário, nenhuma tabela tabITEMCONTROLE em tempo de execução no MNF007 e nenhuma chamada a DEVOLUCAO_CONTROLEENTREGA / VERIFICA_SALDOCONTROLEENTREGA. Toda a reconciliação de CONTROLEENTREGA ocorre no Firebird.

M - Manual​

O que fazDetalhe
Quem dá baixa no CONTROLEENTREGA?O próprio usuário, pela tela de Controle de Entrega (frame TfrmEntrega da shared unit jControleEntrega)
Quando?A qualquer momento - o ERP não força baixa na gravação da devolução
MNF005 avisa o usuário?Sim. Em UMNF005.pas:445, o cancelamento de NF checa (ST_CONFIRMAENTREGAREMESSA = 'N') AND (TP_EXCLUSAOENTREGADEVOLUCAO = 'M'); se a nota tiver CONTROLEENTREGA.ST_ENTREGUE <> 'N', pergunta "A Nota Possui Controle de Entrega, Deseja Continuar e Cancelar os Controles de Entrega?" (C-0000). Cancelar aborta o cancelamento
MNF007 valida saldo na devolução?Sim. Em UMNF007.pas:1423 monta a grade tabITEMCONTROLE para o usuário indicar manualmente qual saldo de entrega está sendo devolvido. Em UMNF007.pas:1723 chama DEVOLUCAO_CONTROLEENTREGA (mensagem de inconsistência) e VERIFICA_SALDOCONTROLEENTREGA (passando 'D' = Devolução) antes de gravar. Se qualquer uma retornar texto, levanta W-0000 e impede o salvamento
Procedures SQLGERA_MESTRA/CANCELA_MESTRA não chamam GERA_CONTROLEENTREGA - as linhas 195/301/340 caem no ramo falso

Simulação passo a passo​

  1. ST_ENTREGA = 'S', ST_CONFIRMAENTREGAREMESSA = 'N', TP_EXCLUSAOENTREGADEVOLUCAO = 'M' (padrão de fábrica).
  2. Operador abre MNF007 e monta a devolução.
  3. No clique em Salvar (btnSalvarClick), UMNF007.pas:1423 entra no ramo TP_EXCLUSAOENTREGADEVOLUCAO = 'M' - o sistema verifica saldo pedido-a-pedido ou nota-a-nota pela PEDIDONOTA e popula tabITEMCONTROLE.
  4. Em UMNF007.pas:1723 chama DEVOLUCAO_CONTROLEENTREGA - se a procedure retornar O_MESSAGEM <> NULL, o Delphi lança W-0000 com o texto "[DEVOLUCAO_CONTROLEENTREGA] ... Verifique !" e aborta.
  5. Se passar, chama VERIFICA_SALDOCONTROLEENTREGA(...'D') - idem, pode abortar.
  6. A devolução é gravada, mas o CONTROLEENTREGA continua com os registros originais - o operador deve entrar no controle de entrega e dar baixa manual depois.

Resultado esperado: usuário é questionado/bloqueado se houver inconsistência, mas nenhum registro de CONTROLEENTREGA é baixado pela devolução - precisa ser feito manualmente. Em cancelamentos de NF (MNF005), o operador ainda recebe confirmação C-0000 pedindo autorização para "cancelar os controles de entrega" antes de prosseguir.


Interação com ST_CONFIRMAENTREGAREMESSA / ST_ENTREGA / ST_CONTENTREGA​

O parâmetro não é independente: o MFA001 o trava (Enabled = False) e o deriva de ST_CONFIRMAENTREGAREMESSA. As combinações possíveis, do ponto de vista do usuário, são:

ST_ENTREGAST_CONFIRMAENTREGAREMESSATP_EXCLUSAOENTREGADEVOLUCAOSignificado
N (Não usa controle de entrega)qualquerqualquer (irrelevante)Nenhum dos fluxos é acionado - CONTROLEENTREGA não é usada
S/P/H/TNM (forçado pelo OnChange)Fluxo clássico: ERP avisa o usuário no cancelamento (MNF005) e valida saldo na devolução (MNF007); baixa manual pela tela de controle de entrega
S/P/H/TSA (forçado pelo OnChange)Fluxo automatizado: procedures GERA_MESTRA/CANCELA_MESTRA chamam GERA_CONTROLEENTREGA; MNF005/MNF007 não exibem os avisos

Observações:

  • O combo é apenas visual - quem efetivamente muda o valor em edição é o evento cmbST_CONFIRMAENTREGAREMESSAChange (UMFA001.pas:2486-2496). Se alguém gravar um par inconsistente diretamente no banco (por ex. ST_CONFIRMAENTREGAREMESSA='S' AND TP_EXCLUSAOENTREGADEVOLUCAO='M'), o comportamento será misto: procedures SQL não baixam (porque A <> 'A') e o Delphi também pula o ramo manual (porque M <> 'N' em UMNF005.pas:445) → risco de CONTROLEENTREGA ficar órfão. Recomenda-se sempre alterar via tela.
  • Precisa existir ST_CONTENTREGA adequado (Produto vs Produto+Serviço) para que os itens certos entrem no fluxo - ver ST_CONTENTREGA.

Tabela Comparativa Resumida​

SituaçãoTP_EXCLUSAOENTREGADEVOLUCAO = 'A'TP_EXCLUSAOENTREGADEVOLUCAO = 'M'
Baixa do CONTROLEENTREGA em devolução/cancelamentoAutomática (procedure GERA_CONTROLEENTREGA)Manual (usuário, pela tela de controle de entrega)
GERA_MESTRA.sql executa GERA_CONTROLEENTREGA em Remessa/Complemento/Devolução?Sim (linha 195, 301)Não
CANCELA_MESTRA.sql executa GERA_CONTROLEENTREGA em cancelamento?Sim (linha 340)Não
MNF005 pergunta "Deseja Continuar e Cancelar os Controles de Entrega?"Não (só pergunta se M)Sim (C-0000)
MNF007 monta tabITEMCONTROLE para seleção de saldo?NãoSim
MNF007 chama DEVOLUCAO_CONTROLEENTREGA / VERIFICA_SALDOCONTROLEENTREGA?NãoSim
Valor padrão em AfterInsert-'M' (UdmMFA001.pas:563)
ST_CONFIRMAENTREGAREMESSA correspondente (travado pelo MFA001)'S''N'

Referências no Código Fonte​

Delphi​

  • source/MFA001/UMFA001.dfm:11189-11202 - Label "Excluir Entrega na Devolução" (Label97)
  • source/MFA001/UMFA001.dfm:11345-11372 - ComboBox cmbTP_EXCLUSAOENTREGADEVOLUCAO (Enabled = False, items Automático=A/Manual=M)
  • source/MFA001/UMFA001.pas:2486-2496 - cmbST_CONFIRMAENTREGAREMESSAChange força o valor em função de ST_CONFIRMAENTREGAREMESSA
  • source/MFA001/UdmMFA001.dfm:284, 1912-1917, 2865, 3164 - Campo na tabPARMFATUR, SELECT e UPDATE
  • source/MFA001/UdmMFA001.pas:272, 563 - Declaração TStringField e valor padrão 'M' no AfterInsert
  • source/MNF005/UMNF005.pas:445 - Cancelamento de NF: pergunta ao usuário quando TP_EXCLUSAOENTREGADEVOLUCAO = 'M'
  • source/MNF007/UMNF007.pas:1423 - Devolução: monta tabITEMCONTROLE para seleção manual quando 'M'
  • source/MNF007/UMNF007.pas:1723 - Devolução: chama DEVOLUCAO_CONTROLEENTREGA / VERIFICA_SALDOCONTROLEENTREGA e bloqueia com W-0000 se houver inconsistência

SQL (Scripts/)​

  • Scripts/GERA_MESTRA.sql linhas 43, 47-50 - declaração e leitura do parâmetro
  • Scripts/GERA_MESTRA.sql linhas 195-203, 301-308 - EXECUTE PROCEDURE GERA_CONTROLEENTREGA(...) condicional a V_TP_EXCLUSAOENTREGADEVOLUCAO = 'A'
  • Scripts/CANCELA_MESTRA.sql linhas 43, 61-64 - declaração e leitura
  • Scripts/CANCELA_MESTRA.sql linhas 340-347 - EXECUTE PROCEDURE GERA_CONTROLEENTREGA(...) condicional ao par ('S','A') em cancelamentos F/I/R

Schema​

  • docs/schema/tables/PARMFATUR.sql:215 - TP_EXCLUSAOENTREGADEVOLUCAO DOM_CHAR1 DEFAULT 'M' NOT NULL