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/ grupogrpControleEntrega), 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 noAfterInsert(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 proceduresGERA_MESTRA/CANCELA_MESTRAchamamGERA_CONTROLEENTREGAno momento da gravação, liberando/baixando a entrega sem intervenção do usuário.M(Manual): as procedures não tocam noCONTROLEENTREGA; 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ódulo | Código | Uso |
|---|---|---|
| Parâmetros de Faturamento | MFA001 | Único local onde o valor é gravado (cmbTP_EXCLUSAOENTREGADEVOLUCAO em UMFA001.dfm:11345-11372). Combo travado - muda junto com ST_CONFIRMAENTREGAREMESSA |
| Cancelamento de Nota Fiscal | MNF005 | Lê 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ção | MNF007 | Em 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
| Objeto | Arquivo | Papel |
|---|---|---|
GERA_MESTRA | Scripts/GERA_MESTRA.sql linhas 43, 47-50, 195-203, 301-308 | Lê 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_MESTRA | Scripts/CANCELA_MESTRA.sql linhas 43, 61-64, 340-347 | Mesma 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_CONTROLEENTREGA | Scripts/GERA_CONTROLEENTREGA.sql | Procedure 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_CONTROLEENTREGA | Scripts/DEVOLUCAO_CONTROLEENTREGA.sql | Validaçã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_SALDOCONTROLEENTREGA | procedure referenciada em UMNF007.pas:1749 | Idem - só é consultada no fluxo manual |
Campos envolvidos
| Campo | Tabela | Tipo | Descrição |
|---|---|---|---|
TP_EXCLUSAOENTREGADEVOLUCAO | PARMFATUR | CHAR(1) / DEFAULT 'M' NOT NULL | O próprio parâmetro |
ST_CONFIRMAENTREGAREMESSA | PARMFATUR | CHAR(1) / DEFAULT 'N' NOT NULL | Parâmetro "pai". Quando 'S', o MFA001 força TP_EXCLUSAOENTREGADEVOLUCAO = 'A'. Quando 'N', força 'M' |
ST_CONTENTREGA | PARMFATUR | CHAR(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_ENTREGA | PARMFATUR | CHAR(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, DEVOLUCAONOTA | transacionais | - | 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 faz | Detalhe |
|---|---|
| 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ória | Só 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 resultante | O usuário grava a devolução e as entregas são liberadas/baixadas "silenciosamente" pela procedure no servidor |
Simulação passo a passo
ST_ENTREGA = 'S',ST_CONFIRMAENTREGAREMESSA = 'S',TP_EXCLUSAOENTREGADEVOLUCAO = 'A'(setado automaticamente pelo MFA001).- Operador emite Remessa (nota filha
Rcontra uma mestra). GERA_MESTRA.sqllinha 195 avaliaV_ST_CONFIRMAENTREGAREMESSA = 'S' AND V_TP_EXCLUSAOENTREGADEVOLUCAO = 'A' AND I_ST_MESTRA IN ('R','C','D') AND I_CD_SERIE <> 'XXXX'→ verdadeiro.- Chama
GERA_CONTROLEENTREGA(...)que insere/atualizaCONTROLEENTREGApara os itens da remessa. - Mais tarde o operador cancela a remessa.
CANCELA_MESTRA.sqllinha 340 avalia a mesma condição comV_TP_MESTRA IN ('F','I','R')→ verdadeiro.GERA_CONTROLEENTREGA(...)é executada de novo (agora comV_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 faz | Detalhe |
|---|---|
| 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 SQL | GERA_MESTRA/CANCELA_MESTRA não chamam GERA_CONTROLEENTREGA - as linhas 195/301/340 caem no ramo falso |
Simulação passo a passo
ST_ENTREGA = 'S',ST_CONFIRMAENTREGAREMESSA = 'N',TP_EXCLUSAOENTREGADEVOLUCAO = 'M'(padrão de fábrica).- Operador abre MNF007 e monta a devolução.
- No clique em Salvar (
btnSalvarClick),UMNF007.pas:1423entra no ramoTP_EXCLUSAOENTREGADEVOLUCAO = 'M'- o sistema verifica saldo pedido-a-pedido ou nota-a-nota pelaPEDIDONOTAe populatabITEMCONTROLE. - Em
UMNF007.pas:1723chamaDEVOLUCAO_CONTROLEENTREGA- se a procedure retornarO_MESSAGEM <> NULL, o Delphi lançaW-0000com o texto "[DEVOLUCAO_CONTROLEENTREGA] ... Verifique !" e aborta. - Se passar, chama
VERIFICA_SALDOCONTROLEENTREGA(...'D')- idem, pode abortar. - A devolução é gravada, mas o
CONTROLEENTREGAcontinua 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_ENTREGA | ST_CONFIRMAENTREGAREMESSA | TP_EXCLUSAOENTREGADEVOLUCAO | Significado |
|---|---|---|---|
N (Não usa controle de entrega) | qualquer | qualquer (irrelevante) | Nenhum dos fluxos é acionado - CONTROLEENTREGA não é usada |
S/P/H/T | N | M (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/T | S | A (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 (porqueA <> 'A') e o Delphi também pula o ramo manual (porqueM <> 'N'emUMNF005.pas:445) → risco deCONTROLEENTREGAficar órfão. Recomenda-se sempre alterar via tela. - Precisa existir
ST_CONTENTREGAadequado (Produto vs Produto+Serviço) para que os itens certos entrem no fluxo - ver ST_CONTENTREGA.
Tabela Comparativa Resumida
| Situação | TP_EXCLUSAOENTREGADEVOLUCAO = 'A' | TP_EXCLUSAOENTREGADEVOLUCAO = 'M' |
|---|---|---|
Baixa do CONTROLEENTREGA em devolução/cancelamento | Automá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ão | Sim |
MNF007 chama DEVOLUCAO_CONTROLEENTREGA / VERIFICA_SALDOCONTROLEENTREGA? | Não | Sim |
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- ComboBoxcmbTP_EXCLUSAOENTREGADEVOLUCAO(Enabled = False, itemsAutomático=A/Manual=M)source/MFA001/UMFA001.pas:2486-2496-cmbST_CONFIRMAENTREGAREMESSAChangeforça o valor em função deST_CONFIRMAENTREGAREMESSAsource/MFA001/UdmMFA001.dfm:284, 1912-1917, 2865, 3164- Campo natabPARMFATUR, SELECT e UPDATEsource/MFA001/UdmMFA001.pas:272, 563- DeclaraçãoTStringFielde valor padrão'M'noAfterInsertsource/MNF005/UMNF005.pas:445- Cancelamento de NF: pergunta ao usuário quandoTP_EXCLUSAOENTREGADEVOLUCAO = 'M'source/MNF007/UMNF007.pas:1423- Devolução: montatabITEMCONTROLEpara seleção manual quando'M'source/MNF007/UMNF007.pas:1723- Devolução: chamaDEVOLUCAO_CONTROLEENTREGA/VERIFICA_SALDOCONTROLEENTREGAe bloqueia comW-0000se houver inconsistência
SQL (Scripts/)
Scripts/GERA_MESTRA.sqllinhas 43, 47-50 - declaração e leitura do parâmetroScripts/GERA_MESTRA.sqllinhas 195-203, 301-308 -EXECUTE PROCEDURE GERA_CONTROLEENTREGA(...)condicional aV_TP_EXCLUSAOENTREGADEVOLUCAO = 'A'Scripts/CANCELA_MESTRA.sqllinhas 43, 61-64 - declaração e leituraScripts/CANCELA_MESTRA.sqllinhas 340-347 -EXECUTE PROCEDURE GERA_CONTROLEENTREGA(...)condicional ao par('S','A')em cancelamentosF/I/R
Schema
docs/schema/tables/PARMFATUR.sql:215-TP_EXCLUSAOENTREGADEVOLUCAO DOM_CHAR1 DEFAULT 'M' NOT NULL