NR_BEEP - Tipo de beep sonoro emitido pelas mensagens do checkout MNF017
Tela: MFA001 - Parâmetros de Faturamento Localização: Parâmetros → Faturamento → Opção 2 → campo BEEP de Mensagem [MNF017] (label
lblNR_BEEPemUMFA001.dfm:3963-3976, combocmbNR_BEEPemUMFA001.dfm:4643-4671, botão de testebtnNR_BEEPemUMFA001.dfm:4672-4685). Tabela:PARMFATUR.NR_BEEPTipo: Numérico (inteiro) —DOM_INTEGER DEFAULT 0 NOT NULLno DDL (docs/schema/tables/PARMFATUR.sql:217);TIntegerFieldno client. Apesar de ser inteiro, o valor não é uma quantidade/frequência — é um código de tipo de som Windows passado direto para a APIMessageBeep(UINT uType). Valor padrão:0(definido no DDL; oAfterInsertdetabPARMFATURemUdmMFA001.pas:434-...não atribui default explicitamente — o banco assume0= "Aviso Sonoro Padrão" /MB_OK).
O que o parâmetro faz
NR_BEEP define qual som do Windows será tocado pela função MsgBeep() do módulo MNF017 (Caixa/Checkout) ao exibir mensagens de erro, alerta, informação ou grave na barra de status edtMensagem do checkout. O valor é repassado diretamente para a função da Win32 API MessageBeep(iBeep), cujos códigos oficiais são:
| Valor | Constante Windows | Som associado (esquema "Sons" do Windows) |
|---|---|---|
0 | MB_OK | "Aviso Sonoro Padrão" (beep padrão do sistema) |
16 | MB_ICONHAND / MB_ICONERROR | "Parada Crítica" (Critical Stop) |
48 | MB_ICONEXCLAMATION / MB_ICONWARNING | "Exclamação" |
64 | MB_ICONINFORMATION / MB_ICONASTERISK | "Asterisco" |
Os valores acima são exatamente os oferecidos pelo combo em MFA001 (UMFA001.dfm:4662-4666):
'Aviso Sonoro Padrão' 0
'Asterisco' 64
'Exclamação' 48
'Parada Crítica' 16
Uso em runtime
No módulo MNF017, o parâmetro é lido no iniciar via BuscaParametros para a lista ParmFatur: TStrings (UMNF017.pas:234) e consumido em 31 pontos distintos de UMNF017.pas, UdmMNF017.pas e uMNF017ConfPedido.pas, sempre no padrão:
MsgBeep('<mensagem>', StrToInt(ParmFatur.Values['NR_BEEP']), '<tipo>', <tempo_ms>)
A função MsgBeep (implementada em UMNF017.pas:2550-2596) chama MessageBeep(iBeep) nos ramos sTipo = 'E' (Erro) e sTipo = 'G' (Grave/fonte aumentada). Nos ramos 'I' (Informação) e 'A' (Alerta padrão) a função não dispara MessageBeep — apenas altera cor do texto — mesmo que o parâmetro exista, ele só é ouvido em erros e mensagens graves.
Teste interativo em MFA001
O botão btnNR_BEEP (ao lado do combo) executa, via btnNR_BEEPClick em UMFA001.pas:2512-2515:
procedure TfrmMFA001.btnNR_BEEPClick(Sender: TObject);
begin
MessageBeep(dmMFA001.tabPARMFATURNR_BEEP.AsInteger);
end;
O operador pode, portanto, testar o som escolhido sem sair da tela de parâmetros.
Telas impactadas
| Módulo | Código | Papel |
|---|---|---|
| Parâmetros de Faturamento | MFA001 | Produtora — cadastra/edita o valor no combo cmbNR_BEEP e permite testar o som via btnNR_BEEP |
| Caixa/Checkout (PDV) | MNF017 | Única consumidora real — lê ParmFatur.Values['NR_BEEP'] e passa para MessageBeep em 31 chamadas de MsgBeep, cobrindo validações de item, quantidade, produto não cadastrado, preço, local de armazenagem, gravação de nota/pedido, etc. |
Procedures impactadas
Nenhuma stored procedure em Scripts/ referencia NR_BEEP (grep em Scripts/ retornou zero matches). A lógica é 100% client-side, ligada à API MessageBeep do Windows.
Campos envolvidos
| Campo | Tabela | Papel |
|---|---|---|
NR_BEEP | PARMFATUR | Código do som Windows (este parâmetro) |
CD_EMPRESA | PARMFATUR | Chave do registro — cada empresa pode ter seu próprio tipo de beep |
Comportamento
Valor = 0 (Aviso Sonoro Padrão — default do DDL)
| Aspecto | Comportamento |
|---|---|
| API Windows | MessageBeep(MB_OK) → toca o som "Beep Padrão" do tema |
| Experiência no caixa | Som neutro/curto a cada erro ou aviso grave disparado por MsgBeep em MNF017 |
| Observação | É o valor assumido por padrão após INSERT (DDL DEFAULT 0 NOT NULL) |
Resultado esperado: todas as chamadas de MsgBeep('<msg>', 0, 'E', ...) no checkout tocam o beep padrão do Windows.
Valor = 16 (Parada Crítica)
| Aspecto | Comportamento |
|---|---|
| API Windows | MessageBeep(MB_ICONHAND) → toca o som "Parada Crítica" do tema |
| Experiência no caixa | Som mais alto/alarmante a cada erro — sugerido quando o operador precisa parar e verificar |
Resultado esperado: erros no PDV disparam o som associado a "Parada Crítica" no painel de sons do Windows.
Valor = 48 (Exclamação)
| Aspecto | Comportamento |
|---|---|
| API Windows | MessageBeep(MB_ICONEXCLAMATION) |
| Experiência no caixa | Som de exclamação, tipicamente mais breve que "Parada Crítica" |
Resultado esperado: checkout emite o som de exclamação em cada erro/grave de MsgBeep.
Valor = 64 (Asterisco)
| Aspecto | Comportamento |
|---|---|
| API Windows | MessageBeep(MB_ICONASTERISK) |
| Experiência no caixa | Som de notificação/informação |
Resultado esperado: checkout emite o som de asterisco em cada erro/grave de MsgBeep.
Valor inválido (ex.: 99)
| Aspecto | Comportamento |
|---|---|
| MFA001 | O combo cmbNR_BEEP tem Style = csDropDownList (UMFA001.dfm:4649), portanto o usuário não consegue digitar um valor fora da lista. Só por edição SQL direta. |
| API Windows | MessageBeep documentada aceita qualquer UINT; valores fora de 0/16/32/48/64 geralmente tocam o som padrão (MB_OK) ou silêncio, conforme o tema do Windows |
Simulação passo a passo
Pré-requisitos:
- Empresa corrente logada no ERP.
- Windows com sons de sistema habilitados (Painel de Controle → Sons).
- Caixa físico com alto-falante.
- Abra MFA001 → Parâmetros → Faturamento → Opção 1.
- Localize o campo "BEEP de Mensagem [MNF017]" (label
lblNR_BEEP). - Escolha, por exemplo, "Parada Crítica" no combo
cmbNR_BEEP. Internamente isso gravaNR_BEEP = 16emPARMFATUR. - Clique no botão
btnNR_BEEPao lado — o Windows toca imediatamente o som de "Parada Crítica" (chamadaMessageBeep(16)emUMFA001.pas:2514). - Salve (F6). O
UPDATEgerado incluiNR_BEEP = :NR_BEEP(UdmMFA001.dfm:2867). - Abra MNF017 e tente, por exemplo, digitar um código de produto inexistente. A função
MsgBeep('O Produto não está Cadastrado [TPO001]!', 16, 'E', 1000)é chamada (UMNF017.pas:1432), o que:- Pinta
edtMensagemem preto com texto vermelho; - Chama
MessageBeep(16)→ som "Parada Crítica"; - Faz
Sleep(1000)(1 segundo); - Limpa a mensagem e retorna
true.
- Pinta
Resultado esperado: o operador do caixa escuta o som escolhido sempre que MsgBeep é chamada com tipo 'E' (erro) ou 'G' (grave) em MNF017 — alertando auditivamente mesmo quando ele não está olhando para a tela.
Interações com outros parâmetros
Este parâmetro é isolado — não interage com outros campos de PARMFATUR. Seu efeito depende exclusivamente de:
- Tema/Esquema de sons do Windows: se o usuário tiver desativado os sons do sistema (Painel → Sons → "Sem sons"), qualquer valor de
NR_BEEPfica silencioso. - Hardware de áudio da estação: caixas sem auto-falante obviamente não emitem som.
- Tipo de mensagem em
MsgBeep: apenas os ramos'E'(erro) e'G'(grave/fonte aumentada) chamamMessageBeep(iBeep). Os ramos'I'(info) e'A'(alerta) só mudam cor, ignorando o valor configurado.
Referências no Código Fonte
Delphi — MFA001 (cadastro do parâmetro)
| Arquivo | Linhas | Papel |
|---|---|---|
source/MFA001/UMFA001.dfm | 3963-3976 | TLabel lblNR_BEEP com Caption = 'BEEP de Mensagem [MNF017]' |
source/MFA001/UMFA001.dfm | 4643-4671 | TwwDBComboBox cmbNR_BEEP com DataField = 'NR_BEEP', Style = csDropDownList, Items = 'Aviso Sonoro Padrão'#9'0' / 'Asterisco'#9'64' / 'Exclamação'#9'48' / 'Parada Crítica'#9'16' |
source/MFA001/UMFA001.dfm | 4672-4685 | TBitBtn btnNR_BEEP — botão de teste do som, OnClick = btnNR_BEEPClick |
source/MFA001/UMFA001.pas | 531-533 | Declarações cmbNR_BEEP: TwwDBComboBox, btnNR_BEEP: TBitBtn, lblNR_BEEP: TLabel |
source/MFA001/UMFA001.pas | 829 | Assinatura procedure btnNR_BEEPClick(Sender: TObject) |
source/MFA001/UMFA001.pas | 2512-2515 | Corpo: MessageBeep(dmMFA001.tabPARMFATURNR_BEEP.AsInteger) — toca o som escolhido para teste |
source/MFA001/UdmMFA001.pas | 274 | Declaração tabPARMFATURNR_BEEP: TIntegerField |
source/MFA001/UdmMFA001.pas | 434-... | tabPARMFATURAfterInsert não atribui default (depende do DDL DEFAULT 0) |
source/MFA001/UdmMFA001.dfm | 286, 1923-1925, 2440, 2612, 2867, 3166 | SELECT/INSERT/UPDATE de PARMFATUR incluindo o campo e definição do TIntegerField |
Delphi — MNF017 (consumidora real — 31 chamadas)
| Arquivo | Linhas | Papel |
|---|---|---|
source/MNF017/UMNF017.pas | 107 | Assinatura function MsgBeep(sMensagem: String; iBeep: Integer; sTipo: String; iTempo: Integer): Boolean |
source/MNF017/UMNF017.pas | 234 | Leitura do parâmetro para ParmFatur: TStrings via BuscaParametros(..., 'PARMFATUR', ..., 'CD_EMPRESA') |
source/MNF017/UMNF017.pas | 480, 794, 840, 1025, 1044, 1054, 1182, 1211, 1300, 1416, 1432, 1524, 1530, 1571, 1583, 1601, 1614, 1853, 1871 (+ outras ~11 chamadas) | Chamadas MsgBeep('<msg>', StrToInt(ParmFatur.Values['NR_BEEP']), '<tipo>', <tempo>) em validações de item, quantidade, produto, preço, local de armazenagem, cupom/pedido |
source/MNF017/UMNF017.pas | 2550-2596 | Implementação de MsgBeep — chama MessageBeep(iBeep) em sTipo='E' (linha 2561) e sTipo='G' (linha 2581) |
source/MNF017/UdmMNF017.pas | 1076 | MsgBeep('Produto não tem local de armazenagem [TPO001]!', StrToInt(ParmFatur.Values['NR_BEEP']), 'E', 1000) |
source/MNF017/uMNF017ConfPedido.pas | 1218, 1222, 1895, 1899 | Mensagens de confirmação de gravação de nota/pedido (tipo 'I' — não toca beep, apenas lê o parâmetro por simetria de assinatura) |
DDL
docs/schema/tables/PARMFATUR.sql:217—NR_BEEP DOM_INTEGER DEFAULT 0 NOT NULL.
SQL — Procedures
Nenhuma stored procedure em Scripts/ referencia NR_BEEP (grep retornou zero matches). A regra inteira é executada no lado cliente, chamando diretamente a Win32 API MessageBeep.