Parâmetro Apenas Código de Barras
Tela de configuração: MFA001 - Parâmetros de Faturamento Localização: Parâmetros → Opção 2 → GroupBox "Parâmetros Comum a Notas Fiscais / Pedido" → campo "Apenas Cód. de Barras" Tabela:
PARMFATUR.ST_CODBARRASAPENASValor padrão: (sem default noAfterInsert; ao ser desabilitado pela UI recebe'N')
Quando ativado ('S'), este parâmetro obriga o lançamento de itens nos documentos de venda/nota somente através do leitor de código de barras, bloqueando a digitação manual do código do produto (CD_ITEM). Com isso o usuário é forçado a passar o leitor no código impresso da mercadoria — qualquer tentativa de digitar o código do item no grid fica impedida porque o campo assume ReadOnly = True.
O parâmetro só tem efeito quando existir um campo de código de barras disponível na tela; por isso ele é desligado automaticamente se ST_CODIGOBARRA = 'N' (sem leitor) e, nas telas que o consomem, existe ainda um "guarda" verificando o valor de ST_CODIGOBARRA (geralmente <> 'S', <> 'P' ou <> 'A', dependendo do módulo).
Telas impactadas
Tela de configuração
| Módulo | Código | Arquivo / Linha | Descrição |
|---|---|---|---|
| Parâmetros Faturamento | MFA001 | UMFA001.dfm:4161-4186, UMFA001.pas:258,2198-2209, UdmMFA001.pas:218, UdmMFA001.dfm:1601-1603 | Declara o TwwDBComboBox cmbST_CODBARRASAPENAS (Sim/Não), o field tabPARMFATURST_CODBARRASAPENAS e a regra de UI que força 'N' + Enabled=False quando ST_CODIGOBARRA = 'N' |
Telas que consomem o parâmetro (aplicam ReadOnly no CD_ITEM)
| Módulo | Código | Arquivo / Linha | Efeito quando ST_CODBARRASAPENAS = 'S' |
|---|---|---|---|
| Emissão de NF de Saída | MNF002 | UdmMNF002.pas:1093-1095, 6673-6674 | Calcula StApenasCodBarras := ((ST_CODIGOBARRA in ['S','A']) and ST_CODBARRASAPENAS = 'S'); ao carregar o item no grid, faz tabITEMNOTACD_ITEM.ReadOnly := True — operador só consegue incluir item pelo leitor |
| Nota Troca/Devolução | MNF009 | UMNF009.pas:204-214 | Se ST_CODIGOBARRA <> 'P' e ST_CODBARRASAPENAS = 'S', define CdItemRO := True (bloqueia digitação do código do item) |
| Nota Complementar | MNF007 | UMNF007.pas:408-413 | Mesma regra — CdItemRO := True quando ST_CODIGOBARRA <> 'P' e ST_CODBARRASAPENAS = 'S' |
| Pedido de Venda | MPD002 | UMPD002.pas:742-745, UdmMPD002.pas:5752 | CdItemRO := True quando ST_CODIGOBARRA <> 'S' e ST_CODBARRASAPENAS = 'S'; também inclui o campo no SELECT da PARMFATUR |
| Devolução de Pedido | MPD037 | UMPD037.pas:148-158 | Se ST_CODIGOBARRA <> 'S' e ST_CODBARRASAPENAS = 'S' → CdItemRO := True |
| NF de Compra (cabeçalho) | MNF008 | UdmMNF008.pas:765 | Lê o parâmetro no SELECT da PARMFATUR junto com os demais campos de controle |
| Comissão sobre Nota | MCO006 | UdmMCO006.pas:2109 | Lê P.ST_CODBARRASAPENAS no SELECT da PARMFATUR |
Telas que apenas persistem o parâmetro no dataset
| Módulo | Código | Arquivo / Linha | Uso |
|---|---|---|---|
| Parâmetros Faturamento | MFA001 | UdmMFA001.dfm:233, 2411, 2579, 2734, 3113 | SELECT/INSERT/UPDATE/FetchRow do PARMFATUR com ST_CODBARRASAPENAS |
Procedures impactadas
Nenhuma. O parâmetro não é referenciado em procedures/triggers/views SQL — a verificação busca direta em Scripts/ por ST_CODBARRASAPENAS retornou zero ocorrências. Todo o comportamento vive no lado Delphi (aplicação de ReadOnly nos grids de item via CdItemRO/StApenasCodBarras).
Campos envolvidos
| Campo | Descrição |
|---|---|
PARMFATUR.ST_CODBARRASAPENAS | Flag 'S'/'N' que obriga o lançamento via leitor de código de barras |
PARMFATUR.ST_CODIGOBARRA | Pré-condição: só faz sentido ativar ST_CODBARRASAPENAS quando este parâmetro habilita o campo de código de barras ('S', 'A' ou 'P' dependendo do módulo). Quando ST_CODIGOBARRA = 'N', a UI do MFA001 desabilita o combo e força ST_CODBARRASAPENAS = 'N' |
ITEMNOTA.CD_ITEM / ITEMPEDIDO.CD_ITEM | Campos do grid de itens cujo ReadOnly é forçado a True quando a regra dispara |
Opções disponíveis
N - Não (padrão de fato)
| O que faz | Detalhe |
|---|---|
Digitação do CD_ITEM no grid | Permitida normalmente |
| Uso do leitor de código de barras | Opcional (se ST_CODIGOBARRA estiver ativo) |
StApenasCodBarras / CdItemRO | Sempre False |
Dependência de ST_CODIGOBARRA | Nenhuma |
Simulação passo a passo
- Vá em MFA001 → aba Opção 2 → "Apenas Cód. de Barras" = "Não"
- Salve os parâmetros (F6)
- Abra MNF002 e insira uma nova nota
- No grid de itens, clique no campo Produto (CD_ITEM)
- Digite manualmente
1234(código interno do produto) e pressione Enter - O sistema localiza o produto e lança o item normalmente
Resultado esperado: O operador pode lançar itens digitando o código interno, escolhendo via F9 (pesquisa) ou passando o leitor de barras — à sua livre escolha. Este é o fluxo para ambientes onde nem todo produto tem etiqueta com código de barras.
Observação importante: o
AfterInsertdo MFA001 (UdmMFA001.pas:434-606) não define valor padrão explícito para este campo — ao contrário deST_CODBARRASBALANCA(linha 472 := 'N') eST_CODIGOBARRA(linha 443 := 'N'). Portanto, em uma empresa nova, o campo iniciaNULLe a UI trata isso como "Não". Somente quando o usuário abre o combo ou a rotinacmbST_CODIGOBARRAChangedispara (ao definirST_CODIGOBARRA = 'N') é que o valor'N'é gravado fisicamente (UMFA001.pas:2204).
S - Sim
| O que faz | Detalhe |
|---|---|
Digitação do CD_ITEM no grid | Bloqueada (ReadOnly = True) |
| Uso do leitor de código de barras | Obrigatório para lançar itens |
StApenasCodBarras / CdItemRO | True nas telas consumidoras |
| Pré-condição | Exige ST_CODIGOBARRA compatível ('S', 'A' ou 'P' conforme o módulo). Caso contrário o efeito é neutralizado pela expressão de guarda de cada tela |
Simulação passo a passo — lançamento na NF Saída (MNF002)
- Vá em MFA001 → aba Opção 2 → defina "Código de Barras" (
ST_CODIGOBARRA) = "Sim" ('S') - Defina "Apenas Cód. de Barras" (
ST_CODBARRASAPENAS) = "Sim" → F6 - Abra MNF002 e crie uma nova nota
- Na inicialização (
UdmMNF002.pas:1093),StApenasCodBarrasé calculado comoTrue—ST_CODIGOBARRA ∈ ['S','A']eST_CODBARRASAPENAS = 'S' - Ao abrir o grid de itens, o evento do
tabITEMNOTA(UdmMNF002.pas:6673-6674) aplicatabITEMNOTACD_ITEM.ReadOnly := True - O operador não consegue digitar o código do produto no grid (campo aparece cinza/bloqueado)
- O operador passa o leitor no código de barras da embalagem → o ERP identifica o produto via
VALIDA_CODIGOBARRA(ou busca direta emITEM.CD_CODIGOBARRA) e lança o item
Resultado esperado: Toda inclusão de item precisa passar pelo leitor de código de barras. Impede erros de digitação de código e força o rastreamento físico do produto (útil em distribuidoras, farmácias, supermercados, etc.).
Simulação passo a passo — guarda de pré-condição no Pedido (MPD002)
ST_CODIGOBARRA = 'A'(ativo apenas em ambos) eST_CODBARRASAPENAS = 'S'- Abra MPD002
UMPD002.pas:742avalia:(ST_CODIGOBARRA <> 'S') AND (ST_CODBARRASAPENAS = 'S')→TrueCdItemRO := True— oCD_ITEMdo pedido ficaReadOnly- Operador só consegue lançar item passando o leitor
Atenção: cada módulo tem uma regra de guarda ligeiramente diferente em relação a
ST_CODIGOBARRA:
- MNF002: ativa quando
ST_CODIGOBARRA ∈ {'S','A'}- MNF007, MNF009: ativa quando
ST_CODIGOBARRA <> 'P'- MPD002, MPD037: ativa quando
ST_CODIGOBARRA <> 'S'Essa heterogeneidade existe porque cada módulo tem seu próprio "domínio permitido" para
ST_CODIGOBARRA(Pedido, Nota, Ambos). Em campo, o efeito prático é: ligarST_CODBARRASAPENASsó bloqueia digitação nas telas em que o domínio doST_CODIGOBARRAé compatível.
Simulação passo a passo — UI desabilita o parâmetro quando ST_CODIGOBARRA = 'N'
- Abra MFA001, aba Opção 2
- Mude "Código de Barras" (
cmbST_CODIGOBARRA) para"Não" - O evento
TfrmMFA001.cmbST_CODIGOBARRAChangedispara (UMFA001.pas:2198-2209):- Força
tabPARMFATURST_CODBARRASAPENAS.AsString := 'N' - Aplica
cmbST_CODBARRASAPENAS.Enabled := False(combo fica cinza)
- Força
- Enquanto
ST_CODIGOBARRAvoltar a'S'/'A'/'P', o combo permanece desabilitado e o valor é mantido'N'
Resultado esperado: Garantia de integridade — não é possível exigir "apenas código de barras" em uma empresa que não utiliza leitor de barras.
Interação com ST_CODBARRASBALANCA / ST_CODIGOBARRA
ST_CODIGOBARRA (PARMFATUR.ST_CODIGOBARRA)
| Aspecto | Detalhe |
|---|---|
| Dependência | ST_CODBARRASAPENAS exige que ST_CODIGOBARRA esteja habilitado. A UI do MFA001 acopla fisicamente os dois: ao desligar ST_CODIGOBARRA, ST_CODBARRASAPENAS é forçado a 'N' e desabilitado (UMFA001.pas:2200-2208) |
| Consequência lógica | Se tentasse ativar "Apenas Cód. de Barras" sem haver campo de código de barras nas telas, o operador ficaria sem meio de lançar itens — por isso a UI impede essa combinação |
| Guardas nos módulos | Cada tela consumidora verifica o domínio de ST_CODIGOBARRA antes de setar CdItemRO := True |
Veja ST_CODIGOBARRA para detalhes do parâmetro de ativação.
ST_CODBARRASBALANCA (PARMFATUR.ST_CODBARRASBALANCA)
| Aspecto | Detalhe |
|---|---|
| Relação | Parâmetros independentes com papéis diferentes: ST_CODBARRASBALANCA define como interpretar códigos EAN de balança; ST_CODBARRASAPENAS define se é obrigatório usar o leitor para lançar itens |
| Uso combinado | Em açougues/mercearias que vendem por peso, é comum ativar os dois: força o uso do leitor e interpreta automaticamente o EAN de balança com código + peso |
Veja ST_CODBARRASBALANCA para detalhes.
Tabela Comparativa Resumida
| Opção | Digitação de CD_ITEM | Pré-condição | Uso típico |
|---|---|---|---|
| N (padrão) | Livre — pode digitar, usar F9 ou passar o leitor | Nenhuma | Fluxo padrão, qualquer empresa |
| S | Bloqueada — só via leitor de código de barras | Requer ST_CODIGOBARRA ativo e domínio compatível na tela consumidora | Supermercados, distribuidoras, farmácias — rastreamento físico obrigatório |
Referências no Código Fonte
Tela MFA001 (configuração)
| Arquivo | Linha | Descrição |
|---|---|---|
source/MFA001/UMFA001.dfm | 4161-4186 | Declaração do TwwDBComboBox cmbST_CODBARRASAPENAS com Items.Strings = ('Sim'#9'S', 'Não'#9'N'), DataField = 'ST_CODBARRASAPENAS', DataSource = dmMFA001.dsPARMFATUR |
source/MFA001/UMFA001.dfm | 3686-3698 | Label lblCodBarrasPermite com Caption = 'Apenas Cód. de Barras' (Left=12, Top=43) |
source/MFA001/UMFA001.pas | 258 | Declaração do componente cmbST_CODBARRASAPENAS: TwwDBComboBox |
source/MFA001/UMFA001.pas | 2198-2209 | TfrmMFA001.cmbST_CODIGOBARRAChange — quando ST_CODIGOBARRA = 'N' força ST_CODBARRASAPENAS := 'N' e desabilita o combo |
source/MFA001/UdmMFA001.pas | 218 | Declaração do field tabPARMFATURST_CODBARRASAPENAS: TStringField |
source/MFA001/UdmMFA001.pas | 434-606 | AfterInsert do tabPARMFATUR — não atribui valor padrão para ST_CODBARRASAPENAS |
source/MFA001/UdmMFA001.dfm | 1601-1603 | Definição do field (FieldName = 'ST_CODBARRASAPENAS', Origin = '"PARMFATUR"."ST_CODBARRASAPENAS"') |
source/MFA001/UdmMFA001.dfm | 233, 2411, 2579, 2734, 3113 | SELECT/INSERT/UPDATE/FetchRow do PARMFATUR incluindo o campo |
Telas consumidoras (regra CdItemRO / StApenasCodBarras)
| Arquivo | Linha | Descrição |
|---|---|---|
source/MNF002/UdmMNF002.pas | 1093-1095 | StApenasCodBarras := ((ST_CODIGOBARRA ∈ {'S','A'}) and ST_CODBARRASAPENAS = 'S') |
source/MNF002/UdmMNF002.pas | 6673-6674 | Aplica tabITEMNOTACD_ITEM.ReadOnly := True quando StApenasCodBarras é True |
source/MNF002/UdmMNF002.pas | 10500 | SELECT P.ST_CODBARRASAPENAS, ... na carga da PARMFATUR |
source/MNF007/UMNF007.pas | 410 | if (ST_CODIGOBARRA <> 'P') and (ST_CODBARRASAPENAS = 'S') then CdItemRO := True |
source/MNF008/UdmMNF008.pas | 765 | P.ST_CODBARRASAPENAS no SELECT da PARMFATUR |
source/MNF009/UMNF009.pas | 204-214 | SELECT ST_CODIGOBARRA, ST_CODBARRASAPENAS FROM PARMFATUR + regra CdItemRO := True quando ST_CODIGOBARRA <> 'P' e ST_CODBARRASAPENAS = 'S' |
source/MPD002/UMPD002.pas | 742-745 | if (ST_CODIGOBARRA <> 'S') and (ST_CODBARRASAPENAS = 'S') then CdItemRO := True |
source/MPD002/UdmMPD002.pas | 5752 | P.ST_CODBARRASAPENAS no SELECT de parâmetros do pedido |
source/MPD037/UMPD037.pas | 148-158 | SELECT ST_CODIGOBARRA, ST_CODBARRASAPENAS FROM PARMFATUR + CdItemRO := True |
source/MCO006/UdmMCO006.pas | 2109 | P.ST_CODBARRASAPENAS no SELECT da PARMFATUR |
Procedures / Scripts SQL
| Arquivo | Linha | Descrição |
|---|---|---|
| — | — | Nenhuma referência em Scripts/ — o parâmetro é avaliado exclusivamente no lado Delphi |