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_GERANOTAEMPValor padrão:S(Sim) – definido no DDL (PARMFATUR.sql:159→DOM_CHAR1 DEFAULT 'S' NOT NULL). Observação: oAfterInsertdeUdmMFA001.pasnã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ódulo | Código | Descrição |
|---|---|---|
| Nota Fiscal – menu principal | MNF001 | Chamada direta de GERA_NOTAFISCAL |
| Nota Fiscal Saída | MNF002 | Emissão/confirmação de NF de saída |
| Nota Fiscal Entrada | MNF004 | Emissão de NF de entrada |
| Nota Fiscal Importação | MNF007 | Emissão de NF de importação |
| Nota Fiscal Genérica | MNF008 | Emissão de NF genérica |
| Nota Fiscal Complementar | MNF010 | Emissão de NF complementar (com UMSGMNF010) |
| Nota Fiscal CTRC | MNF013 | Conhecimento de transporte / nota vinculada |
| Nota Fiscal – Ajuste ICMS | MNF017 | Confirmação de pedido para NF (uMNF017ConfPedido) |
| Nota Fiscal Transferência Estoque | MNF019 | Geração de NF a partir de movimento de estoque |
| Nota Fiscal Devolução | MNF023 | Geração de NF de devolução |
| Nota Fiscal Exportação | MNF024 | NF de exportação |
| Nota Fiscal Serviço | MNF026 | NF de serviços |
| Nota Fiscal Complementar ST | MNF029 | NF complementar de substituição tributária |
| Nota Fiscal Remessa | MNF030 | NF de remessa |
| Nota Fiscal Consumo | MNF032 | NF de consumo interno |
| Nota Fiscal Produção | MNF033 | NF a partir de ordem de produção |
| Nota Fiscal Contrato | MNF034 | NF a partir de contrato |
| Transferência entre Empresas | MNF036 | Geração de pedidos de transferência entre filiais |
| Pedido Mobile – NF | MPD011 | Geração de NF a partir de pedido (UNFORDEM, UdmMPD011) |
| Recapadora – NF Ordem | MRC018 | NF vinculada a ordem da recapadora |
| Recapadora – NF Ordem Carregamento | MRC020 | NF de ordem de carregamento (UMRC020NFORDEM) |
| Transporte – MTR004 | MTR004 | Geração de NF dentro do módulo de transporte |
| Config NF | CNF001 | Configuração/execução de NF |
| Service Faturamento (backend Delphi) | JunsoftServiceFatApp | PersistenciaDao.pas chama a procedure a partir do serviço de faturamento |
Importante: nenhuma tela verifica
ST_GERANOTAEMPdiretamente no código Delphi – a única leitura do parâmetro acontece no servidor, dentro deGERA_NOTAFISCAL. Consequentemente, o parâmetro atua como um gate único para todas as telas acima.
Procedures impactadas
| Procedure / Script | Arquivo | Papel |
|---|---|---|
GERA_NOTAFISCAL | Scripts/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_V2chamamGERA_NOTAFISCAL, portanto também ficam sujeitas à regra indiretamente.
Campos envolvidos
| Campo | Descrição |
|---|---|
PARMFATUR.ST_GERANOTAEMP | O próprio parâmetro (S/N) |
PARMFATUR.CD_EMPRESA | Empresa cujo parâmetro está sendo lido em GERA_NOTAFISCAL (lida via P.CD_EMPRESA = :V_CD_EMPRESA, linha 263 do script) |
NOTAFISCAL.CD_PESSOA | Destinatário da nota – comparado contra V_CD_EMPRESALOGADA para decidir o bloqueio |
SESSAO.CD_EMPRESA / EMPRESA.CD_EMPRESA | Empresa 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_SERIE | Chave composta que identifica a nota sendo gerada |
Opções disponíveis
S - Sim (valor padrão)
| O que faz | Detalhe |
|---|---|
| Emissão de NF com destinatário = empresa logada | Permitida. A procedure GERA_NOTAFISCAL não lança a exceção de "NOTA DESTINADO À EMPRESA LOGADA!" |
| Cenários típicos | Notas 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 ocorre | Scripts/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 banco | PARMFATUR.ST_GERANOTAEMP = 'S' (default do DDL) |
Simulação passo a passo
- Em MFA001 → Notas Fiscais → aba "Parâmetros de Notas" → "Permite Nota Para a Mesma Empresa" selecione "Sim" (opção padrão).
- Salve os parâmetros (F6).
- Abra uma tela de geração/confirmação de NF, por exemplo MNF002 ou MNF036.
- Cadastre uma nota cujo
CD_PESSOA(destinatário) corresponda aoCD_EMPRESAda 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). - Dispare a geração da nota (Confirmar/F6 na tela correspondente).
- 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 faz | Detalhe |
|---|---|
| Emissão de NF com destinatário = empresa logada | Bloqueada. A procedure GERA_NOTAFISCAL retorna mensagem de erro e interrompe a geração (SUSPEND; EXIT) |
| Mensagem exibida | GERA_NOTAFISCAL.: NÃO É PERMITIDO GERAR NOTA DESTINADO À EMPRESA LOGADA! |
| Onde a verificação ocorre | Scripts/GERA_NOTAFISCAL.sql:330-334 – IF ((I_ST_GERANOTAEMP = 'N') AND (I_CD_PESSOA = V_CD_EMPRESALOGADA)) THEN V_MENSAGEM := ... SUSPEND; EXIT; |
| Dado comparado | I_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 procedures | Como GERA_NOTAPEDIDO, GRAVA_NOTACTE, GERA_NOTAFISCALPEDIDO etc. chamam GERA_NOTAFISCAL, todas propagam o mesmo bloqueio |
Simulação passo a passo
- Em MFA001 → Notas Fiscais → aba "Parâmetros de Notas" → "Permite Nota Para a Mesma Empresa" selecione "Não".
- Salve os parâmetros (F6).
- Abra MNF002 e inicie a geração de uma nota destinada a uma pessoa cujo código (
CD_PESSOA) seja igual aoCD_EMPRESAda empresa atualmente logada (ou acione MNF036 para gerar uma transferência entre empresas onde a filial/matriz destino é a própria empresa logada). - Ao confirmar, a tela chama
GERA_NOTAFISCAL. - A condição da linha 330 é atendida (
ST_GERANOTAEMP='N'e destinatário = empresa logada) →V_MENSAGEMrecebe o texto do erro e a procedure executaSUSPEND; EXIT. - 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ção | Label na tela | Permite NF com destinatário = empresa logada? | Mensagem em GERA_NOTAFISCAL | Efeito prático |
|---|---|---|---|---|
| S (padrão) | Sim | Sim | – (não lança) | Fluxo normal; permite notas de transferência/consumo interno destinadas à própria empresa |
| N | Não | Não | GERA_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: TwwDBComboBoxcomDataField = 'ST_GERANOTAEMP'eItems.Strings = ('Sim'#9'S', 'Não'#9'N'), dentro da abapagParametrosNF→GroupBox grpNota("Parâmetros de Notas Fiscais").source/MFA001/UMFA001.dfm:5925–pagParametrosNF: TTabSheetcomCaption = 'Parâmetros de Notas'(aba que contém o campo).source/MFA001/UMFA001.dfm:5910–TabSheetexternoCaption = 'Notas Fiscais'(menu/opção que contém a aba).source/MFA001/UMFA001.dfm–Label72emLeft=32, Top=302,Caption = 'Permite Nota Para a Mesma Empresa'(label do ComboBox).source/MFA001/UdmMFA001.pas:210– declaraçãotabPARMFATURST_GERANOTAEMP: TStringField.source/MFA001/UdmMFA001.dfm:1553-1558– mapeamento doTStringFieldao campo"PARMFATUR"."ST_GERANOTAEMP"(FixedChar = True,Size = 1).source/MFA001/UdmMFA001.dfm:224e3104– SQL deSELECTdaPARMFATURincluiPARMFATUR.ST_GERANOTAEMP.source/MFA001/UdmMFA001.dfm:2809– SQL deUPDATEdaPARMFATURincluiST_GERANOTAEMP = :ST_GERANOTAEMP.source/MFA001/UdmMFA001.pas:434-553–tabPARMFATURAfterInsertnão atribui valor paraST_GERANOTAEMP(o valor padrãoSvem exclusivamente do DDLDEFAULT '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– declaraI_ST_GERANOTAEMP DOM_CHAR1.Scripts/GERA_NOTAFISCAL.sql:220-223– obtémV_CD_EMPRESALOGADAconsultandoSESSAOpelaCURRENT_CONNECTION.Scripts/GERA_NOTAFISCAL.sql:259–SELECT ... P.ST_GERANOTAEMP ... FROM PARMFATUR P WHERE P.CD_EMPRESA = :V_CD_EMPRESApreenche:I_ST_GERANOTAEMP.Scripts/GERA_NOTAFISCAL.sql:266– variável:I_ST_GERANOTAEMPrecebe o valor doINTO.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.passource/MNF002/UMNF002.pasesource/MNF002/UdmMNF002.passource/MNF004/UMNF004.passource/MNF007/UMNF007.passource/MNF008/UMNF008.passource/MNF010/UMNF010.pasesource/MNF010/UMSGMNF010.passource/MNF013/UMNF013.passource/MNF017/uMNF017ConfPedido.passource/MNF019/UMNF019.passource/MNF023/UMNF023.passource/MNF024/UMNF024.passource/MNF026/UdmMNF026.passource/MNF029/UMNF029.passource/MNF030/UdmMNF030.passource/MNF032/UMNF032.passource/MNF033/UdmMNF033.passource/MNF034/UMNF034.passource/MNF036/UMNF036.passource/MPD011/UdmMPD011.pasesource/MPD011/UNFORDEM.passource/MRC018/UMRC018.passource/MRC020/UMRC020NFORDEM.passource/MTR004/UMTR004.passource/CNF001/UCNF001.passource/JunsoftServiceFatApp/PersistenciaDao.pas
Procedures SQL que chamam GERA_NOTAFISCAL (propagação indireta)
Scripts/GERA_NOTAPEDIDO.sqlScripts/GERA_NOTAFISCALPEDIDO.sqlScripts/GERA_NOTAFISCALORDEMCARREG.sqlScripts/GERA_NFORDEMCARREGMRC049.sqlScripts/GRAVA_NOTACTE.sqlScripts/PROCESSA_NOTASOVIS.sqlScripts/GERA_NOTAPEDIDOSOVIS.sqlScripts/FECHA_CONTRATOLEITE.sqleScripts/FECHA_CONTRATOLEITE_V2.sql
Nenhuma outra referência a
ST_GERANOTAEMPfoi encontrada emsource/(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 emGERA_NOTAFISCAL.sql.