Pular para o conteúdo principal

ST_GERANOTAEMP - Permite Nota Para a Mesma Empresa

Tela de configuração: MFA001 - Parâmetros de Faturamento Localização: Parâmetros → Notas Fiscais → aba "Parâmetros de Notas" → grupo "Parâmetros de Notas Fiscais" (label "Permite Nota Para a Mesma Empresa") Tabela: PARMFATUR.ST_GERANOTAEMP Valor padrão: S (Sim) – definido no DDL (PARMFATUR.sql:159 → DOM_CHAR1 DEFAULT 'S' NOT NULL). Observação: o AfterInsert de UdmMFA001.pas não atribui valor explícito – a coluna herda o default do banco ao inserir um registro novo.

Autoriza ou bloqueia a emissão de nota fiscal cujo destinatário seja a própria empresa logada. A regra é avaliada dentro da stored procedure GERA_NOTAFISCAL (chamada por praticamente todas as telas de nota fiscal do sistema) e, quando o parâmetro está em N, o sistema recusa gerar a nota com a mensagem "GERA_NOTAFISCAL.: NÃO É PERMITIDO GERAR NOTA DESTINADO À EMPRESA LOGADA!". Usado historicamente para permitir (ou impedir) notas de transferência/uso interno onde o destinatário é o próprio CNPJ/código da empresa.

Telas impactadas​

A regra está centralizada na procedure GERA_NOTAFISCAL; por isso, toda tela que invoca essa procedure herda automaticamente o efeito do parâmetro. Abaixo, as telas Delphi que chamam GERA_NOTAFISCAL:

MóduloCódigoDescrição
Nota Fiscal – menu principalMNF001Chamada direta de GERA_NOTAFISCAL
Nota Fiscal SaídaMNF002Emissão/confirmação de NF de saída
Nota Fiscal EntradaMNF004Emissão de NF de entrada
Nota Fiscal ImportaçãoMNF007Emissão de NF de importação
Nota Fiscal GenéricaMNF008Emissão de NF genérica
Nota Fiscal ComplementarMNF010Emissão de NF complementar (com UMSGMNF010)
Nota Fiscal CTRCMNF013Conhecimento de transporte / nota vinculada
Nota Fiscal – Ajuste ICMSMNF017Confirmação de pedido para NF (uMNF017ConfPedido)
Nota Fiscal Transferência EstoqueMNF019Geração de NF a partir de movimento de estoque
Nota Fiscal DevoluçãoMNF023Geração de NF de devolução
Nota Fiscal ExportaçãoMNF024NF de exportação
Nota Fiscal ServiçoMNF026NF de serviços
Nota Fiscal Complementar STMNF029NF complementar de substituição tributária
Nota Fiscal RemessaMNF030NF de remessa
Nota Fiscal ConsumoMNF032NF de consumo interno
Nota Fiscal ProduçãoMNF033NF a partir de ordem de produção
Nota Fiscal ContratoMNF034NF a partir de contrato
Transferência entre EmpresasMNF036Geração de pedidos de transferência entre filiais
Pedido Mobile – NFMPD011Geração de NF a partir de pedido (UNFORDEM, UdmMPD011)
Recapadora – NF OrdemMRC018NF vinculada a ordem da recapadora
Recapadora – NF Ordem CarregamentoMRC020NF de ordem de carregamento (UMRC020NFORDEM)
Transporte – MTR004MTR004Geração de NF dentro do módulo de transporte
Config NFCNF001Configuração/execução de NF
Service Faturamento (backend Delphi)JunsoftServiceFatAppPersistenciaDao.pas chama a procedure a partir do serviço de faturamento

Importante: nenhuma tela verifica ST_GERANOTAEMP diretamente no código Delphi – a única leitura do parâmetro acontece no servidor, dentro de GERA_NOTAFISCAL. Consequentemente, o parâmetro atua como um gate único para todas as telas acima.

Procedures impactadas​

Procedure / ScriptArquivoPapel
GERA_NOTAFISCALScripts/GERA_NOTAFISCAL.sqlÚnica procedure que lê e avalia ST_GERANOTAEMP. Responsável por lançar a mensagem de bloqueio

As procedures GERA_NOTAPEDIDO, GERA_NOTAFISCALPEDIDO, GERA_NOTAFISCALORDEMCARREG, GERA_NFORDEMCARREGMRC049, PROCESSA_NOTASOVIS, GERA_NOTAPEDIDOSOVIS, GRAVA_NOTACTE, FECHA_CONTRATOLEITE/FECHA_CONTRATOLEITE_V2 chamam GERA_NOTAFISCAL, portanto também ficam sujeitas à regra indiretamente.

Campos envolvidos​

CampoDescrição
PARMFATUR.ST_GERANOTAEMPO próprio parâmetro (S/N)
PARMFATUR.CD_EMPRESAEmpresa cujo parâmetro está sendo lido em GERA_NOTAFISCAL (lida via P.CD_EMPRESA = :V_CD_EMPRESA, linha 263 do script)
NOTAFISCAL.CD_PESSOADestinatário da nota – comparado contra V_CD_EMPRESALOGADA para decidir o bloqueio
SESSAO.CD_EMPRESA / EMPRESA.CD_EMPRESAEmpresa da sessão atual (WHERE S.NR_CONEXAO = CURRENT_CONNECTION, linha 222 do script) – armazenada em V_CD_EMPRESALOGADA
NOTAFISCAL.NR_LANCAMENTO, TP_NOTA, CD_SERIEChave composta que identifica a nota sendo gerada

Opções disponíveis​

S - Sim (valor padrão)​

O que fazDetalhe
Emissão de NF com destinatário = empresa logadaPermitida. A procedure GERA_NOTAFISCAL não lança a exceção de "NOTA DESTINADO À EMPRESA LOGADA!"
Cenários típicosNotas de transferência entre filiais/matriz, notas de consumo interno, notas de remessa onde o destinatário é o próprio CNPJ, qualquer operação em que a pessoa destino bate com EMPRESA.CD_PESSOA da empresa logada
Onde a verificação ocorreScripts/GERA_NOTAFISCAL.sql:330 – a condição IF ((I_ST_GERANOTAEMP = 'N') AND (I_CD_PESSOA = V_CD_EMPRESALOGADA)) não é atendida, fluxo continua para as próximas validações
Valor gravado no bancoPARMFATUR.ST_GERANOTAEMP = 'S' (default do DDL)

Simulação passo a passo​

  1. Em MFA001 → Notas Fiscais → aba "Parâmetros de Notas" → "Permite Nota Para a Mesma Empresa" selecione "Sim" (opção padrão).
  2. Salve os parâmetros (F6).
  3. Abra uma tela de geração/confirmação de NF, por exemplo MNF002 ou MNF036.
  4. Cadastre uma nota cujo CD_PESSOA (destinatário) corresponda ao CD_EMPRESA da empresa logada (p.ex. uma filial gerando nota para ela mesma / para a matriz com código de pessoa igual ao código da empresa).
  5. Dispare a geração da nota (Confirmar/F6 na tela correspondente).
  6. A procedure GERA_NOTAFISCAL é chamada; a validação da linha 330 falha (I_ST_GERANOTAEMP = 'S') e o fluxo segue normalmente para as demais validações (datas, itens, impostos, etc.).

Resultado esperado: a nota é gerada sem a mensagem "NÃO É PERMITIDO GERAR NOTA DESTINADO À EMPRESA LOGADA!". Permite que operações internas (transferência, consumo, remessa) sigam pelo fluxo fiscal normal.


N - Não​

O que fazDetalhe
Emissão de NF com destinatário = empresa logadaBloqueada. A procedure GERA_NOTAFISCAL retorna mensagem de erro e interrompe a geração (SUSPEND; EXIT)
Mensagem exibidaGERA_NOTAFISCAL.: NÃO É PERMITIDO GERAR NOTA DESTINADO À EMPRESA LOGADA!
Onde a verificação ocorreScripts/GERA_NOTAFISCAL.sql:330-334 – IF ((I_ST_GERANOTAEMP = 'N') AND (I_CD_PESSOA = V_CD_EMPRESALOGADA)) THEN V_MENSAGEM := ... SUSPEND; EXIT;
Dado comparadoI_CD_PESSOA (destinatário lido da NOTAFISCAL) vs V_CD_EMPRESALOGADA (selecionado em SESSAO/EMPRESA pela CURRENT_CONNECTION, linhas 220-223 do script)
Impacto nas demais proceduresComo GERA_NOTAPEDIDO, GRAVA_NOTACTE, GERA_NOTAFISCALPEDIDO etc. chamam GERA_NOTAFISCAL, todas propagam o mesmo bloqueio

Simulação passo a passo​

  1. Em MFA001 → Notas Fiscais → aba "Parâmetros de Notas" → "Permite Nota Para a Mesma Empresa" selecione "Não".
  2. Salve os parâmetros (F6).
  3. Abra MNF002 e inicie a geração de uma nota destinada a uma pessoa cujo código (CD_PESSOA) seja igual ao CD_EMPRESA da empresa atualmente logada (ou acione MNF036 para gerar uma transferência entre empresas onde a filial/matriz destino é a própria empresa logada).
  4. Ao confirmar, a tela chama GERA_NOTAFISCAL.
  5. A condição da linha 330 é atendida (ST_GERANOTAEMP='N' e destinatário = empresa logada) → V_MENSAGEM recebe o texto do erro e a procedure executa SUSPEND; EXIT.
  6. A tela Delphi interrompe a emissão, exibe a mensagem retornada e nenhum número de nota é gravado.

Resultado esperado: bloqueio imediato da emissão com a mensagem "GERA_NOTAFISCAL.: NÃO É PERMITIDO GERAR NOTA DESTINADO À EMPRESA LOGADA!". Útil quando a política fiscal da empresa proíbe notas cuja operação destine a própria empresa logada (evita notas internas acidentais).


Tabela Comparativa Resumida​

OpçãoLabel na telaPermite NF com destinatário = empresa logada?Mensagem em GERA_NOTAFISCALEfeito prático
S (padrão)SimSim– (não lança)Fluxo normal; permite notas de transferência/consumo interno destinadas à própria empresa
NNãoNãoGERA_NOTAFISCAL.: NÃO É PERMITIDO GERAR NOTA DESTINADO À EMPRESA LOGADA!Interrompe a geração em qualquer tela que chame GERA_NOTAFISCAL

Referências no Código Fonte​

MFA001 (tela de configuração)​

  • source/MFA001/UMFA001.dfm:7250-7276 – wwDBComboBox10: TwwDBComboBox com DataField = 'ST_GERANOTAEMP' e Items.Strings = ('Sim'#9'S', 'Não'#9'N'), dentro da aba pagParametrosNF → GroupBox grpNota ("Parâmetros de Notas Fiscais").
  • source/MFA001/UMFA001.dfm:5925 – pagParametrosNF: TTabSheet com Caption = 'Parâmetros de Notas' (aba que contém o campo).
  • source/MFA001/UMFA001.dfm:5910 – TabSheet externo Caption = 'Notas Fiscais' (menu/opção que contém a aba).
  • source/MFA001/UMFA001.dfm – Label72 em Left=32, Top=302, Caption = 'Permite Nota Para a Mesma Empresa' (label do ComboBox).
  • source/MFA001/UdmMFA001.pas:210 – declaração tabPARMFATURST_GERANOTAEMP: TStringField.
  • source/MFA001/UdmMFA001.dfm:1553-1558 – mapeamento do TStringField ao campo "PARMFATUR"."ST_GERANOTAEMP" (FixedChar = True, Size = 1).
  • source/MFA001/UdmMFA001.dfm:224 e 3104 – SQL de SELECT da PARMFATUR inclui PARMFATUR.ST_GERANOTAEMP.
  • source/MFA001/UdmMFA001.dfm:2809 – SQL de UPDATE da PARMFATUR inclui ST_GERANOTAEMP = :ST_GERANOTAEMP.
  • source/MFA001/UdmMFA001.pas:434-553 – tabPARMFATURAfterInsert não atribui valor para ST_GERANOTAEMP (o valor padrão S vem exclusivamente do DDL DEFAULT 'S' NOT NULL).

DDL da tabela​

  • docs/schema/tables/PARMFATUR.sql:159 – ST_GERANOTAEMP DOM_CHAR1 DEFAULT 'S' NOT NULL.

SQL de manipulação / leitura do parâmetro​

  • Scripts/GERA_NOTAFISCAL.sql:147 – declara I_ST_GERANOTAEMP DOM_CHAR1.
  • Scripts/GERA_NOTAFISCAL.sql:220-223 – obtém V_CD_EMPRESALOGADA consultando SESSAO pela CURRENT_CONNECTION.
  • Scripts/GERA_NOTAFISCAL.sql:259 – SELECT ... P.ST_GERANOTAEMP ... FROM PARMFATUR P WHERE P.CD_EMPRESA = :V_CD_EMPRESA preenche :I_ST_GERANOTAEMP.
  • Scripts/GERA_NOTAFISCAL.sql:266 – variável :I_ST_GERANOTAEMP recebe o valor do INTO.
  • Scripts/GERA_NOTAFISCAL.sql:330-334 – núcleo da regra: IF ((I_ST_GERANOTAEMP = 'N') AND (I_CD_PESSOA = V_CD_EMPRESALOGADA)) THEN V_MENSAGEM = 'GERA_NOTAFISCAL.: NÃO É PERMITIDO GERAR NOTA DESTINADO À EMPRESA LOGADA!'; SUSPEND; EXIT; END.

Telas Delphi que chamam GERA_NOTAFISCAL (e portanto herdam a regra)​

  • source/MNF001/UMNF001.pas
  • source/MNF002/UMNF002.pas e source/MNF002/UdmMNF002.pas
  • source/MNF004/UMNF004.pas
  • source/MNF007/UMNF007.pas
  • source/MNF008/UMNF008.pas
  • source/MNF010/UMNF010.pas e source/MNF010/UMSGMNF010.pas
  • source/MNF013/UMNF013.pas
  • source/MNF017/uMNF017ConfPedido.pas
  • source/MNF019/UMNF019.pas
  • source/MNF023/UMNF023.pas
  • source/MNF024/UMNF024.pas
  • source/MNF026/UdmMNF026.pas
  • source/MNF029/UMNF029.pas
  • source/MNF030/UdmMNF030.pas
  • source/MNF032/UMNF032.pas
  • source/MNF033/UdmMNF033.pas
  • source/MNF034/UMNF034.pas
  • source/MNF036/UMNF036.pas
  • source/MPD011/UdmMPD011.pas e source/MPD011/UNFORDEM.pas
  • source/MRC018/UMRC018.pas
  • source/MRC020/UMRC020NFORDEM.pas
  • source/MTR004/UMTR004.pas
  • source/CNF001/UCNF001.pas
  • source/JunsoftServiceFatApp/PersistenciaDao.pas

Procedures SQL que chamam GERA_NOTAFISCAL (propagação indireta)​

  • Scripts/GERA_NOTAPEDIDO.sql
  • Scripts/GERA_NOTAFISCALPEDIDO.sql
  • Scripts/GERA_NOTAFISCALORDEMCARREG.sql
  • Scripts/GERA_NFORDEMCARREGMRC049.sql
  • Scripts/GRAVA_NOTACTE.sql
  • Scripts/PROCESSA_NOTASOVIS.sql
  • Scripts/GERA_NOTAPEDIDOSOVIS.sql
  • Scripts/FECHA_CONTRATOLEITE.sql e Scripts/FECHA_CONTRATOLEITE_V2.sql

Nenhuma outra referência a ST_GERANOTAEMP foi encontrada em source/ (grep case-insensitive sobre todo o código Delphi retorna apenas os 3 arquivos da MFA001). Toda a lógica de negócio está concentrada em GERA_NOTAFISCAL.sql.